Anda dapat menerapkan komponen vertical-pod-autoscaler di kluster Container Service for Kubernetes (ACK). Vertical Pod Autoscaler (VPA) memungkinkan penskalaan vertikal pod secara otomatis. Komponen ini menetapkan batasan penggunaan sumber daya kluster berdasarkan penggunaan sumber daya pod dalam kluster. Dengan cara ini, ACK dapat menjadwalkan pod ke node yang memiliki sumber daya yang cukup. vertical-pod-autoscaler juga mempertahankan rasio permintaan sumber daya terhadap batas sumber daya yang Anda tentukan dalam konfigurasi kontainer awal. Topik ini menjelaskan cara menggunakan file YAML untuk mengaktifkan penskalaan vertikal pod otomatis.
Prasyarat
Pastikan operasi berikut telah selesai:
Kluster ACK telah dibuat dan versi Kubernetes-nya lebih baru dari 1.12. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola.
Alat baris perintah terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
vertical-pod-autoscaler telah di-uninstall dari kluster untuk menghindari konflik saat Anda menerapkan versi baru.
Informasi latar belakang
Fitur penskalaan vertikal pod otomatis sedang dalam pengujian. Berhati-hatilah saat menggunakannya.
Anda dapat menggunakan vertical-pod-autoscaler untuk memperbarui konfigurasi sumber daya pod yang sedang berjalan. Fitur ini sedang dalam pengujian. Pembaruan konfigurasi akan menyebabkan pod restart dan rekreasi, serta mungkin dijadwalkan ulang ke node lain.
vertical-pod-autoscaler tidak mengusir pod yang tidak dikelola oleh replication controller. Untuk pod tersebut, mode Auto setara dengan mode Initial.
vertical-pod-autoscaler dan Horizontal Pod Autoscaler (HPA) tidak dapat berjalan pada saat yang sama. HPA memantau metrik CPU dan memori. Jika HPA hanya memantau metrik sumber daya kustom atau eksternal selain metrik CPU dan memori, Anda dapat menggunakan vertical-pod-autoscaler bersamaan dengan HPA.
vertical-pod-autoscaler menggunakan admission webhook sebagai pengontrol admisi. Jika ada admission webhook lain di kluster, pastikan bahwa admission webhook tersebut tidak bertentangan dengan admission webhook vertical-pod-autoscaler. Urutan eksekusi pengontrol admisi ditentukan dalam parameter server API.
vertical-pod-autoscaler dapat menangani sebagian besar kejadian habis memori (OOM), tetapi mungkin gagal menangani kejadian OOM dalam skenario tertentu.
Kinerja vertical-pod-autoscaler belum diuji dalam kluster berskala besar.
Permintaan sumber daya pod yang dimodifikasi oleh vertical-pod-autoscaler mungkin melebihi batas atas sumber daya aktual, termasuk sumber daya node, sumber daya idle, dan kuota sumber daya. Dalam hal ini, pod mungkin masuk ke status Pending dan gagal dijadwalkan. Anda dapat menggunakan autoscaler kluster untuk mengurangi dampak dari masalah ini.
Jika beberapa komponen vertical-pod-autoscaler memantau penggunaan sumber daya pod yang sama pada saat yang sama, perilaku yang tidak terdefinisi mungkin terjadi.
Instal vertical-pod-autoscaler
Jalankan perintah berikut untuk membuat file izin kontrol akses berbasis peran (RBAC):
kubectl apply -f rbac.yamlKlik untuk melihat detail
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:metrics-reader rules: - apiGroups: - "metrics.k8s.io" resources: - pods verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-actor rules: - apiGroups: - "" resources: - pods - nodes - limitranges verbs: - get - list - watch - apiGroups: - "" resources: - events verbs: - get - list - watch - create - apiGroups: - "poc.autoscaling.k8s.io" resources: - verticalpodautoscalers verbs: - get - list - watch - patch - apiGroups: - "autoscaling.k8s.io" resources: - verticalpodautoscalers verbs: - get - list - watch - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-checkpoint-actor rules: - apiGroups: - "poc.autoscaling.k8s.io" resources: - verticalpodautoscalercheckpoints verbs: - get - list - watch - create - patch - delete - apiGroups: - "autoscaling.k8s.io" resources: - verticalpodautoscalercheckpoints verbs: - get - list - watch - create - patch - delete - apiGroups: - "" resources: - namespaces verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:evictioner rules: - apiGroups: - "apps" - "extensions" resources: - replicasets verbs: - get - apiGroups: - "" resources: - pods/eviction verbs: - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:metrics-reader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:metrics-reader subjects: - kind: ServiceAccount name: vpa-recommender namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-actor roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-actor subjects: - kind: ServiceAccount name: vpa-recommender namespace: kube-system - kind: ServiceAccount name: vpa-updater namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-checkpoint-actor roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-checkpoint-actor subjects: - kind: ServiceAccount name: vpa-recommender namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-target-reader rules: - apiGroups: - '*' resources: - '*/scale' verbs: - get - watch - apiGroups: - "" resources: - replicationcontrollers verbs: - get - list - watch - apiGroups: - apps resources: - daemonsets - deployments - replicasets - statefulsets verbs: - get - list - watch - apiGroups: - batch resources: - jobs - cronjobs verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-target-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-target-reader subjects: - kind: ServiceAccount name: vpa-recommender namespace: kube-system - kind: ServiceAccount name: vpa-admission-controller namespace: kube-system - kind: ServiceAccount name: vpa-updater namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-evictioner-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:evictioner subjects: - kind: ServiceAccount name: vpa-updater namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-admission-controller namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-recommender namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: vpa-updater namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-admission-controller rules: - apiGroups: - "" resources: - pods - configmaps - nodes - limitranges verbs: - get - list - watch - apiGroups: - "admissionregistration.k8s.io" resources: - mutatingwebhookconfigurations verbs: - create - delete - get - list - apiGroups: - "poc.autoscaling.k8s.io" resources: - verticalpodautoscalers verbs: - get - list - watch - apiGroups: - "autoscaling.k8s.io" resources: - verticalpodautoscalers verbs: - get - list - watch - apiGroups: - "coordination.k8s.io" resources: - leases verbs: - create - update - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-admission-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-admission-controller subjects: - kind: ServiceAccount name: vpa-admission-controller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-status-reader rules: - apiGroups: - "coordination.k8s.io" resources: - leases verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: system:vpa-status-reader-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-status-reader subjects: - kind: ServiceAccount name: vpa-updater namespace: kube-systemJalankan perintah berikut untuk membuat CustomResourceDefinition (CRD) untuk vertical-pod-autoscaler.
CRD meningkatkan skalabilitas kluster ACK. Untuk informasi lebih lanjut, lihat Perluas API Kubernetes dengan CustomResourceDefinitions.
kubectl apply -f crd.yamlTemplate crd.yaml untuk kluster dengan versi Kubernetes lebih lama dari 1.22
apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: verticalpodautoscalers.autoscaling.k8s.io annotations: "api-approved.kubernetes.io": "https://github.com/kubernetes/kubernetes/pull/63797" spec: group: autoscaling.k8s.io scope: Namespaced names: plural: verticalpodautoscalers singular: verticalpodautoscaler kind: VerticalPodAutoscaler shortNames: - vpa version: v1beta1 versions: - name: v1beta1 served: false storage: false - name: v1beta2 served: true storage: true - name: v1 served: true storage: false validation: # openAPIV3Schema adalah skema untuk validasi objek kustom. openAPIV3Schema: type: object properties: spec: type: object required: [] properties: targetRef: type: object updatePolicy: type: object properties: updateMode: type: string resourcePolicy: type: object properties: containerPolicies: type: array items: type: object properties: containerName: type: string controlledValues: type: string enum: ["RequestsAndLimits", "RequestsOnly"] mode: type: string enum: ["Auto", "Off"] minAllowed: type: object maxAllowed: type: object controlledResources: type: array items: type: string enum: ["cpu", "memory"] --- apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: verticalpodautoscalercheckpoints.autoscaling.k8s.io annotations: "api-approved.kubernetes.io": "https://github.com/kubernetes/kubernetes/pull/63797" spec: group: autoscaling.k8s.io scope: Namespaced names: plural: verticalpodautoscalercheckpoints singular: verticalpodautoscalercheckpoint kind: VerticalPodAutoscalerCheckpoint shortNames: - vpacheckpoint version: v1beta1 versions: - name: v1beta1 served: false storage: false - name: v1beta2 served: true storage: true - name: v1 served: true storage: falseTemplate crd.yaml untuk kluster dengan versi Kubernetes 1.22 dan lebih baru
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes/kubernetes/pull/63797 controller-gen.kubebuilder.io/version: v0.9.2 creationTimestamp: null name: verticalpodautoscalercheckpoints.autoscaling.k8s.io spec: group: autoscaling.k8s.io names: kind: VerticalPodAutoscalerCheckpoint listKind: VerticalPodAutoscalerCheckpointList plural: verticalpodautoscalercheckpoints shortNames: - vpacheckpoint singular: verticalpodautoscalercheckpoint scope: Namespaced versions: - name: v1 schema: openAPIV3Schema: description: VerticalPodAutoscalerCheckpoint adalah titik pemeriksaan dari status internal VPA yang digunakan untuk pemulihan setelah restart recommender. properties: apiVersion: description: 'APIVersion mendefinisikan skema versi representasi ini dari sebuah objek. Server harus mengonversi skema yang dikenali ke nilai internal terbaru, dan dapat menolak nilai yang tidak dikenali. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind adalah nilai string yang merepresentasikan sumber daya REST yang direpresentasikan oleh objek ini. Server dapat menyimpulkan ini dari endpoint tempat klien mengirimkan permintaan. Tidak dapat diperbarui. Dalam CamelCase. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: 'Spesifikasi titik pemeriksaan. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.' properties: containerName: description: Nama kontainer yang diperiksa. type: string vpaObjectName: description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint. type: string type: object status: description: Data titik pemeriksaan. properties: cpuHistogram: description: Titik pemeriksaan histogram untuk konsumsi CPU. properties: bucketWeights: description: Peta dari indeks bucket ke bobot bucket. type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: Timestamp referensi untuk sampel yang dikumpulkan dalam histogram ini. format: date-time nullable: true type: string totalWeight: description: Jumlah sampel yang akan digunakan sebagai penyebut untuk bobot dari BucketWeights. type: number type: object firstSampleStart: description: Timestamp sampel pertama dari histogram. format: date-time nullable: true type: string lastSampleStart: description: Timestamp sampel terakhir dari histogram. format: date-time nullable: true type: string lastUpdateTime: description: Waktu ketika status terakhir diperbarui. format: date-time nullable: true type: string memoryHistogram: description: Titik pemeriksaan histogram untuk konsumsi memori. properties: bucketWeights: description: Peta dari indeks bucket ke bobot bucket. type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: Timestamp referensi untuk sampel yang dikumpulkan dalam histogram ini. format: date-time nullable: true type: string totalWeight: description: Jumlah sampel yang akan digunakan sebagai penyebut untuk bobot dari BucketWeights. type: number type: object totalSamplesCount: description: Jumlah total sampel dalam histogram. type: integer version: description: Versi format data yang disimpan. type: string type: object type: object served: true storage: true - name: v1beta2 schema: openAPIV3Schema: description: VerticalPodAutoscalerCheckpoint adalah titik pemeriksaan dari status internal VPA yang digunakan untuk pemulihan setelah restart recommender. properties: apiVersion: description: 'APIVersion mendefinisikan skema versi representasi ini dari sebuah objek. Server harus mengonversi skema yang dikenali ke nilai internal terbaru, dan dapat menolak nilai yang tidak dikenali. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind adalah nilai string yang merepresentasikan sumber daya REST yang direpresentasikan oleh objek ini. Server dapat menyimpulkan ini dari endpoint tempat klien mengirimkan permintaan. Tidak dapat diperbarui. Dalam CamelCase. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: 'Spesifikasi titik pemeriksaan. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.' properties: containerName: description: Nama kontainer yang diperiksa. type: string vpaObjectName: description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint. type: string type: object status: description: Data titik pemeriksaan. properties: cpuHistogram: description: Titik pemeriksaan histogram untuk konsumsi CPU. properties: bucketWeights: description: Peta dari indeks bucket ke bobot bucket. type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: Timestamp referensi untuk sampel yang dikumpulkan dalam histogram ini. format: date-time nullable: true type: string totalWeight: description: Jumlah sampel yang akan digunakan sebagai penyebut untuk bobot dari BucketWeights. type: number type: object firstSampleStart: description: Timestamp sampel pertama dari histogram. format: date-time nullable: true type: string lastSampleStart: description: Timestamp sampel terakhir dari histogram. format: date-time nullable: true type: string lastUpdateTime: description: Waktu ketika status terakhir diperbarui. format: date-time nullable: true type: string memoryHistogram: description: Titik pemeriksaan histogram untuk konsumsi memori. properties: bucketWeights: description: Peta dari indeks bucket ke bobot bucket. type: object x-kubernetes-preserve-unknown-fields: true referenceTimestamp: description: Timestamp referensi untuk sampel yang dikumpulkan dalam histogram ini. format: date-time nullable: true type: string totalWeight: description: Jumlah sampel yang akan digunakan sebagai penyebut untuk bobot dari BucketWeights. type: number type: object totalSamplesCount: description: Jumlah total sampel dalam histogram. type: integer version: description: Versi format data yang disimpan. type: string type: object type: object served: true storage: false --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes/kubernetes/pull/63797 controller-gen.kubebuilder.io/version: v0.9.2 creationTimestamp: null name: verticalpodautoscalers.autoscaling.k8s.io spec: group: autoscaling.k8s.io names: kind: VerticalPodAutoscaler listKind: VerticalPodAutoscalerList plural: verticalpodautoscalers shortNames: - vpa singular: verticalpodautoscaler scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.updatePolicy.updateMode name: Mode type: string - jsonPath: .status.recommendation.containerRecommendations[0].target.cpu name: CPU type: string - jsonPath: .status.recommendation.containerRecommendations[0].target.memory name: Mem type: string - jsonPath: .status.conditions[?(@.type=='RecommendationProvided')].status name: Provided type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1 schema: openAPIV3Schema: description: VerticalPodAutoscaler adalah konfigurasi untuk autoscaler pod vertikal, yang secara otomatis mengelola sumber daya pod berdasarkan pemanfaatan sumber daya historis dan waktu nyata. properties: apiVersion: description: 'APIVersion mendefinisikan skema versi representasi ini dari sebuah objek. Server harus mengonversi skema yang dikenali ke nilai internal terbaru, dan dapat menolak nilai yang tidak dikenali. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind adalah nilai string yang merepresentasikan sumber daya REST yang direpresentasikan oleh objek ini. Server dapat menyimpulkan ini dari endpoint tempat klien mengirimkan permintaan. Tidak dapat diperbarui. Dalam CamelCase. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: 'Spesifikasi perilaku autoscaler. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.' properties: recommenders: description: Recommender yang bertanggung jawab untuk menghasilkan rekomendasi untuk objek ini. Daftar harus kosong (recommender default akan menghasilkan rekomendasi) atau berisi tepat satu recommender. items: description: VerticalPodAutoscalerRecommenderSelector menunjuk ke Vertical Pod Autoscaler recommender tertentu. Di masa depan mungkin akan mengoper parameter ke recommender. properties: name: description: Nama recommender yang bertanggung jawab untuk menghasilkan rekomendasi untuk objek ini. type: string required: - name type: object type: array resourcePolicy: description: Mengontrol bagaimana autoscaler menghitung sumber daya yang direkomendasikan. Kebijakan sumber daya dapat digunakan untuk menetapkan batasan pada rekomendasi untuk kontainer individu. Jika tidak ditentukan, autoscaler menghitung sumber daya yang direkomendasikan untuk semua kontainer dalam pod, tanpa batasan tambahan. properties: containerPolicies: description: Kebijakan sumber daya per kontainer. items: description: ContainerResourcePolicy mengontrol bagaimana autoscaler menghitung sumber daya yang direkomendasikan untuk kontainer tertentu. properties: containerName: description: Nama kontainer atau DefaultContainerResourcePolicy, dalam hal ini kebijakan digunakan oleh kontainer yang tidak memiliki kebijakan sendiri yang ditentukan. type: string controlledResources: description: Menentukan jenis rekomendasi yang akan dihitung (dan mungkin diterapkan) oleh VPA. Jika tidak ditentukan, default [ResourceCPU, ResourceMemory] akan digunakan. items: description: ResourceName adalah nama yang mengidentifikasi berbagai sumber daya dalam ResourceList. type: string type: array controlledValues: description: Menentukan nilai sumber daya mana yang harus dikontrol. Defaultnya adalah "RequestsAndLimits". enum: - RequestsAndLimits - RequestsOnly type: string maxAllowed: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Menentukan jumlah maksimum sumber daya yang akan direkomendasikan untuk kontainer. Defaultnya adalah tidak ada maksimum. type: object minAllowed: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Menentukan jumlah minimal sumber daya yang akan direkomendasikan untuk kontainer. Defaultnya adalah tidak ada minimum. type: object mode: description: Apakah autoscaler diaktifkan untuk kontainer. Defaultnya adalah "Auto". enum: - Auto - "Off" type: string type: object type: array type: object targetRef: description: TargetRef menunjuk ke pengontrol yang mengelola set pod untuk autoscaler kendalikan - misalnya Deployment, StatefulSet. VerticalPodAutoscaler dapat ditargetkan pada pengontrol yang mengimplementasikan subresource skala (set pod diambil dari ScaleStatus pengontrol) atau beberapa pengontrol yang dikenal baik (misalnya untuk DaemonSet set pod dibaca dari spesifikasi pengontrol). Jika VerticalPodAutoscaler tidak dapat menggunakan target yang ditentukan, ia akan melaporkan kondisi ConfigUnsupported. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi penuh subresource skala - ia tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah label selector yang cocok dengan pod yang dikelompokkan oleh sumber daya target. properties: apiVersion: description: Versi API dari referent type: string kind: description: 'Jenis referent; Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' type: string name: description: 'Nama referent; Informasi lebih lanjut: http://kubernetes.io/docs/user-guide/identifiers#names' type: string required: - kind - name type: object x-kubernetes-map-type: atomic updatePolicy: description: Menggambarkan aturan tentang bagaimana perubahan diterapkan pada pod. Jika tidak ditentukan, semua bidang dalam `PodUpdatePolicy` diatur ke nilai default mereka. properties: minReplicas: description: Jumlah minimal replika yang perlu hidup agar Updater mencoba eviksi pod (menunggu pemeriksaan lain seperti PDB). Hanya nilai positif yang diizinkan. Mengganti bendera global '--min-replicas'. format: int32 type: integer updateMode: description: Mengontrol kapan autoscaler menerapkan perubahan pada sumber daya pod. Defaultnya adalah 'Auto'. enum: - "Off" - Initial - Recreate - Auto type: string type: object required: - targetRef type: object status: description: Informasi saat ini tentang autoscaler. properties: conditions: description: Conditions adalah serangkaian kondisi yang diperlukan untuk autoscaler ini untuk menskalakan targetnya, dan menunjukkan apakah kondisi tersebut terpenuhi atau tidak. items: description: VerticalPodAutoscalerCondition menggambarkan status VerticalPodAutoscaler pada titik tertentu. properties: lastTransitionTime: description: lastTransitionTime adalah waktu terakhir kondisi bertransisi dari satu status ke status lain format: date-time type: string message: description: message adalah penjelasan yang dapat dibaca manusia yang berisi detail tentang transisi type: string reason: description: reason adalah alasan untuk transisi terakhir kondisi. type: string status: description: status adalah status kondisi (True, False, Unknown) type: string type: description: type menggambarkan kondisi saat ini type: string required: - status - type type: object type: array recommendation: description: Jumlah sumber daya yang direkomendasikan oleh autoscaler untuk pod yang dikendalikan yang paling baru dihitung. properties: containerRecommendations: description: Sumber daya yang direkomendasikan oleh autoscaler untuk setiap kontainer. items: description: RecommendedContainerResources adalah rekomendasi sumber daya yang dihitung oleh autoscaler untuk kontainer tertentu. Menghormati kebijakan sumber daya kontainer jika ada dalam spesifikasi. Secara khusus, rekomendasi tidak dihasilkan untuk kontainer dengan `ContainerScalingMode` diatur ke 'Off'. properties: containerName: description: Nama kontainer. type: string lowerBound: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah sumber daya minimum yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup untuk aplikasi beroperasi secara stabil, namun menjalankan dengan lebih sedikit sumber daya kemungkinan besar akan berdampak signifikan pada kinerja/ketersediaan. type: object target: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. type: object uncappedTarget: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Target sumber daya yang direkomendasikan terbaru yang dihitung oleh autoscaler untuk pod yang dikendalikan, hanya berdasarkan penggunaan sumber daya aktual, tanpa mempertimbangkan ContainerResourcePolicy. Mungkin berbeda dari Rekomendasi jika penggunaan sumber daya aktual menyebabkan target melanggar ContainerResourcePolicy (lebih rendah dari MinAllowed atau lebih tinggi dari MaxAllowed). Hanya digunakan sebagai indikasi status, tidak akan memengaruhi penugasan sumber daya aktual. type: object upperBound: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah maksimum sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Sumber daya apa pun yang dialokasikan melebihi nilai ini mungkin terbuang percuma. Nilai ini mungkin lebih besar daripada jumlah maksimum yang sebenarnya dapat dikonsumsi oleh aplikasi. type: object required: - target type: object type: array type: object type: object required: - spec type: object served: true storage: true subresources: {} - deprecated: true deprecationWarning: API autoscaling.k8s.io/v1beta2 sudah usang name: v1beta2 schema: openAPIV3Schema: description: VerticalPodAutoscaler adalah konfigurasi untuk autoscaler pod vertikal, yang secara otomatis mengelola sumber daya pod berdasarkan pemanfaatan sumber daya historis dan waktu nyata. properties: apiVersion: description: 'APIVersion mendefinisikan skema versi representasi ini dari sebuah objek. Server harus mengonversi skema yang dikenali ke nilai internal terbaru, dan dapat menolak nilai yang tidak dikenali. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind adalah nilai string yang merepresentasikan sumber daya REST yang direpresentasikan oleh objek ini. Server dapat menyimpulkan ini dari endpoint tempat klien mengirimkan permintaan. Tidak dapat diperbarui. Dalam CamelCase. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: 'Spesifikasi perilaku autoscaler. Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.' properties: resourcePolicy: description: Mengontrol bagaimana autoscaler menghitung sumber daya yang direkomendasikan. Kebijakan sumber daya dapat digunakan untuk menetapkan batasan pada rekomendasi untuk kontainer individu. Jika tidak ditentukan, autoscaler menghitung sumber daya yang direkomendasikan untuk semua kontainer dalam pod, tanpa batasan tambahan. properties: containerPolicies: description: Kebijakan sumber daya per kontainer. items: description: ContainerResourcePolicy mengontrol bagaimana autoscaler menghitung sumber daya yang direkomendasikan untuk kontainer tertentu. properties: containerName: description: Nama kontainer atau DefaultContainerResourcePolicy, dalam hal ini kebijakan digunakan oleh kontainer yang tidak memiliki kebijakan sendiri yang ditentukan. type: string maxAllowed: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Menentukan jumlah maksimum sumber daya yang akan direkomendasikan untuk kontainer. Defaultnya adalah tidak ada maksimum. type: object minAllowed: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Menentukan jumlah minimal sumber daya yang akan direkomendasikan untuk kontainer. Defaultnya adalah tidak ada minimum. type: object mode: description: Apakah autoscaler diaktifkan untuk kontainer. Defaultnya adalah "Auto". enum: - Auto - "Off" type: string type: object type: array type: object targetRef: description: TargetRef menunjuk ke pengontrol yang mengelola set pod untuk autoscaler kendalikan - misalnya Deployment, StatefulSet. VerticalPodAutoscaler dapat ditargetkan pada pengontrol yang mengimplementasikan subresource skala (set pod diambil dari ScaleStatus pengontrol) atau beberapa pengontrol yang dikenal baik (misalnya untuk DaemonSet set pod dibaca dari spesifikasi pengontrol). Jika VerticalPodAutoscaler tidak dapat menggunakan target yang ditentukan, ia akan melaporkan kondisi ConfigUnsupported. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi penuh subresource skala - ia tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah label selector yang cocok dengan pod yang dikelompokkan oleh sumber daya target. properties: apiVersion: description: Versi API dari referent type: string kind: description: 'Jenis referent; Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' type: string name: description: 'Nama referent; Informasi lebih lanjut: http://kubernetes.io/docs/user-guide/identifiers#names' type: string required: - kind - name type: object x-kubernetes-map-type: atomic updatePolicy: description: Menggambarkan aturan tentang bagaimana perubahan diterapkan pada pod. Jika tidak ditentukan, semua bidang dalam `PodUpdatePolicy` diatur ke nilai default mereka. properties: updateMode: description: Mengontrol kapan autoscaler menerapkan perubahan pada sumber daya pod. Defaultnya adalah 'Auto'. enum: - "Off" - Initial - Recreate - Auto type: string type: object required: - targetRef type: object status: description: Informasi saat ini tentang autoscaler. properties: conditions: description: Conditions adalah serangkaian kondisi yang diperlukan untuk autoscaler ini untuk menskalakan targetnya, dan menunjukkan apakah kondisi tersebut terpenuhi atau tidak. items: description: VerticalPodAutoscalerCondition menggambarkan status VerticalPodAutoscaler pada titik tertentu. properties: lastTransitionTime: description: lastTransitionTime adalah waktu terakhir kondisi bertransisi dari satu status ke status lain format: date-time type: string message: description: message adalah penjelasan yang dapat dibaca manusia yang berisi detail tentang transisi type: string reason: description: reason adalah alasan untuk transisi terakhir kondisi. type: string status: description: status adalah status kondisi (True, False, Unknown) type: string type: description: type menggambarkan kondisi saat ini type: string required: - status - type type: object type: array recommendation: description: Jumlah sumber daya yang direkomendasikan oleh autoscaler untuk pod yang dikendalikan yang paling baru dihitung. properties: containerRecommendations: description: Sumber daya yang direkomendasikan oleh autoscaler untuk setiap kontainer. items: description: RecommendedContainerResources adalah rekomendasi sumber daya yang dihitung oleh autoscaler untuk kontainer tertentu. Menghormati kebijakan sumber daya kontainer jika ada dalam spesifikasi. Secara khusus, rekomendasi tidak dihasilkan untuk kontainer dengan `ContainerScalingMode` diatur ke 'Off'. properties: containerName: description: Nama kontainer. type: string lowerBound: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah sumber daya minimum yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup untuk aplikasi beroperasi secara stabil, namun menjalankan dengan lebih sedikit sumber daya kemungkinan besar akan berdampak signifikan pada kinerja/ketersediaan. type: object target: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. type: object uncappedTarget: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Target sumber daya yang direkomendasikan terbaru yang dihitung oleh autoscaler untuk pod yang dikendalikan, hanya berdasarkan penggunaan sumber daya aktual, tanpa mempertimbangkan ContainerResourcePolicy. Mungkin berbeda dari Rekomendasi jika penggunaan sumber daya aktual menyebabkan target melanggar ContainerResourcePolicy (lebih rendah dari MinAllowed atau lebih tinggi dari MaxAllowed). Hanya digunakan sebagai indikasi status, tidak akan memengaruhi penugasan sumber daya aktual. type: object upperBound: additionalProperties: anyOf: - type: integer - type: string pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true description: Jumlah maksimum sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Sumber daya apa pun yang dialokasikan melebihi nilai ini mungkin terbuang percuma. Nilai ini mungkin lebih besar daripada jumlah maksimum yang sebenarnya dapat dikonsumsi oleh aplikasi. type: object required: - target type: object type: array type: object type: object required: - spec type: object served: true storage: falseInstal komponen vertical-pod-autoscaler.
vertical-pod-autoscaler mencakup komponen berikut: admission-controller, recommender, dan updater.
CatatanSebelum menginstal komponen admission-controller, Anda harus menggunakan skrip untuk menghasilkan sertifikat untuk webhook.
Template YAML untuk kluster dengan versi Kubernetes lebih lama dari 1.22
Install admission-controller
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-admission-controller namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-admission-controller template: metadata: labels: app: vpa-admission-controller spec: serviceAccountName: admin containers: - name: admission-controller image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-admission-controller:0.7.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: tls-certs mountPath: "/etc/tls-certs" readOnly: true resources: limits: cpu: 200m memory: 500Mi requests: cpu: 50m memory: 200Mi ports: - containerPort: 8000 volumes: - name: tls-certs secret: secretName: vpa-tls-certs --- apiVersion: v1 kind: Service metadata: name: vpa-webhook namespace: kube-system spec: ports: - port: 443 targetPort: 8000 selector: app: vpa-admission-controllerInstal Recommender
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-recommender namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-recommender template: metadata: labels: app: vpa-recommender spec: serviceAccountName: admin containers: - name: recommender image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-recommender:0.7.0 imagePullPolicy: Always resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - containerPort: 8080Instal Updater
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-updater namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-updater template: metadata: labels: app: vpa-updater spec: serviceAccountName: admin containers: - name: updater image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-updater:0.7.0 imagePullPolicy: Always resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - containerPort: 8080Template YAML untuk kluster dengan versi Kubernetes 1.22 dan lebih baru
Install admission-controller
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-admission-controller namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-admission-controller template: metadata: labels: app: vpa-admission-controller spec: serviceAccountName: vpa-admission-controller securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: admission-controller image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-admission-controller:0.13.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: tls-certs mountPath: "/etc/tls-certs" readOnly: true resources: limits: cpu: 200m memory: 500Mi requests: cpu: 50m memory: 200Mi ports: - containerPort: 8000 - name: prometheus containerPort: 8944 volumes: - name: tls-certs secret: secretName: vpa-tls-certs --- apiVersion: v1 kind: Service metadata: name: vpa-webhook namespace: kube-system spec: ports: - port: 443 targetPort: 8000 selector: app: vpa-admission-controllerInstal Recommender
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-recommender namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-recommender template: metadata: labels: app: vpa-recommender spec: serviceAccountName: vpa-recommender securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: recommender image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-recommender:0.13.0 imagePullPolicy: Always resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - name: prometheus containerPort: 8942Instal Updater
apiVersion: apps/v1 kind: Deployment metadata: name: vpa-updater namespace: kube-system spec: replicas: 1 selector: matchLabels: app: vpa-updater template: metadata: labels: app: vpa-updater spec: serviceAccountName: vpa-updater securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: updater image: registry.cn-hangzhou.aliyuncs.com/acs/vpa-updater:0.13.0 imagePullPolicy: Always env: - name: NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - name: prometheus containerPort: 8943
Verifikasi bahwa vertical-pod-autoscaler telah diinstal
Gunakan file YAML berikut untuk membuat Deployment bernama nginx-deployment-basic dan sumber daya VPA bernama nginx-deployment-basic-vpa:
Klik untuk melihat detail
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 --- apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: nginx-deployment-basic-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: nginx-deployment-basic updatePolicy: updateMode: "Off"CatatanAtur updateMode ke Off, dan biarkan bidang requests dan limits kosong dalam konfigurasi Deployment.
Jalankan perintah berikut untuk menanyakan permintaan CPU dan permintaan memori yang direkomendasikan oleh vertical-pod-autoscaler untuk Deployment.
CatatanOutput akan dikembalikan 2 menit setelah Anda menjalankan perintah.
kubectl describe vpa nginx-deployment-basic-vpaOutput berikut menunjukkan contoh permintaan sumber daya yang direkomendasikan:
Klik untuk melihat detail
Recommendation: Container Recommendations: Container Name: nginx Lower Bound: Cpu: 25m Memory: 262144k Target: Cpu: 25m Memory: 262144k Uncapped Target: Cpu: 25m Memory: 262144k Upper Bound: Cpu: 11601m Memory: 12128573170Anda dapat menentukan permintaan sumber daya untuk Deployment berdasarkan rekomendasi. vertical-pod-autoscaler terus memantau penggunaan sumber daya Deployment dan memberikan saran tentang cara meningkatkan pemanfaatan sumber daya.