Untuk secara otomatis menyesuaikan dan mengoptimalkan alokasi sumber daya berdasarkan penggunaan aktual pod serta memastikan pod dapat dijadwalkan ke node dengan sumber daya yang cukup, kami sarankan Anda mengaktifkan fitur Vertical Pod Autoscaler (VPA) untuk kontainer aplikasi. VPA memantau pola konsumsi sumber daya pod dan memberikan rekomendasi terkait alokasi CPU dan memori. Selain itu, VPA dapat menyesuaikan alokasi sumber daya tanpa mengubah jumlah replikasi pod. Fitur ini cocok untuk skenario seperti aplikasi stateful yang memerlukan pasokan sumber daya stabil.
Sebelum Anda mulai
Untuk membantu Anda lebih memahami fitur VPA, kami sarankan Anda mempelajari informasi dasar, catatan penggunaan, dan batasan yang diketahui sebelum melanjutkan. Untuk informasi lebih lanjut, lihat Pengenalan VPA Komunitas Kubernetes.
Selain itu, kluster Container Service for Kubernetes (ACK) menyediakan solusi penjadwalan elastis beban kerja (elastisitas lapisan penjadwalan) dan penjadwalan elastis node (elastisitas lapisan sumber daya). Kami sarankan Anda membaca topik Penjadwalan Otomatis untuk memahami skenario dan batasan dari solusi yang berbeda.
ack-vertical-pod-autoscaler pengenalan
VPA diimplementasikan berdasarkan komponen ack-vertical-pod-autoscaler untuk merekomendasikan dan secara otomatis menyesuaikan alokasi CPU serta parameter permintaan dan batas memori untuk kontainer dalam pod sesuai dengan kebutuhan sumber daya aktual. VPA juga mempertahankan rasio permintaan sumber daya terhadap batas sumber daya yang ditentukan dalam konfigurasi awal kontainer. Komponen ack-vertical-pod-autoscaler terdiri dari bagian-bagian berikut:
admission-controller: Menetapkan nilai permintaan sumber daya yang tepat untuk pod baru. Sebelum menginstal komponen admission-controller, Anda harus menggunakan skrip untuk menghasilkan sertifikat webhook.
recommender: Memantau penggunaan sumber daya saat ini dan masa lalu dari kontainer serta merekomendasikan konfigurasi sumber daya berdasarkan data yang terdeteksi untuk mencocokkan kebutuhan sumber daya dengan akurat.
updater: Memeriksa apakah konfigurasi sumber daya pod yang dikelola oleh VPA sudah benar. Jika tidak, updater akan menghentikan pod tersebut untuk rekonstruksi selanjutnya.
Peringatan
Fitur VPA masih dalam fase beta dan kinerjanya belum diuji dalam kluster berskala besar. Gunakan fitur ini dengan hati-hati. Jika Anda mengalami masalah atau memiliki saran, ajukan tiket untuk menghubungi tim layanan kontainer.
Pembaruan konfigurasi sumber daya pod yang sedang berjalan mengakibatkan pod restart dan rekreasi, serta mungkin dijadwalkan ulang ke node lain. VPA mendukung mekanisme pembaruan yang secara otomatis memperbarui permintaan sumber daya pod yang ada tanpa merestart pod, tetapi mekanisme ini masih dalam tahap pengujian.
VPA tidak mengusir pod yang tidak dikelola oleh pengontrol replikasi. Dalam VPA, mode Otomatis untuk pod semacam itu setara dengan mode Awal, artinya VPA menetapkan permintaan dan batas sumber daya untuk pod baru tetapi tidak secara otomatis menghapus dan membuat ulang pod yang sedang berjalan dengan alokasi sumber daya yang tidak tepat.
Kami tidak menyarankan Anda untuk menerapkan beberapa VPA pada beban kerja yang sama. Jika beberapa VPA cocok untuk pod pada saat yang sama, perilaku yang tidak terduga mungkin terjadi.
Permintaan sumber daya pod yang dimodifikasi oleh VPA mungkin melebihi batas atas sumber daya aktual, termasuk sumber daya node, sumber daya idle, dan kuota sumber daya, menyebabkan pod masuk ke status Pending dan gagal dijadwalkan. Dalam kasus ini, menggunakan penjadwalan otomatis node mungkin dapat menyelesaikan masalah ini: jika pemanfaatan sumber daya pod melebihi ambang penskalaan, pod akan diskalakan keluar. Namun, jika sumber daya node tidak mencukupi, pod gagal dijadwalkan dan masuk ke status Pending, yang kemudian memicu penjadwalan node. Untuk informasi lebih lanjut, lihat Aktifkan Penjadwalan Otomatis Node.
Kontroler VPA dan Horizontal Pod Autoscaler (HPA) tidak sepenuhnya kompatibel. Konflik mungkin terjadi jika Anda menggunakan VPA dan HPA untuk memantau penggunaan CPU dan memori. Konflik ini dapat dihindari jika HPA hanya memantau metrik kustom atau eksternal selain metrik CPU dan memori.
VPA menggunakan admission webhook sebagai kontroler admisi. Jika ada admission webhook lain di kluster, pastikan bahwa admission webhook ini tidak bertentangan dengan VPA.
CatatanUrutan eksekusi kontroler admisi ditentukan dalam parameter konfigurasi API server.
VPA dapat menangani sebagian besar peristiwa kehabisan memori (OOM), tetapi tidak dapat menjamin keberhasilan dalam semua skenario.
Untuk informasi lebih lanjut tentang batasan yang diketahui dari VPA, lihat Batasan yang Diketahui VPA.
Langkah 1: Instal ack-vertical-pod-autoscaler
Anda dapat menginstal ack-vertical-pod-autoscaler menggunakan konsol untuk kluster yang menjalankan Kubernetes 1.26 atau lebih baru, atau menggunakan kubectl untuk kluster yang menjalankan Kubernetes sebelum 1.26.
Instal menggunakan konsol (disarankan)
Kami sarankan Anda menginstal ack-vertical-pod-autoscaler menggunakan konsol ACK karena mempermudah penggunaan dan mengurangi biaya pemeliharaan tanpa memerlukan pemahaman tentang kompleksitas yang mendasarinya.
Prasyarat
Sebuah kluster ACK dikelola yang menjalankan Kubernetes 1.26 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Dikelola. Untuk memperbarui kluster, lihat Perbarui Manual Kluster ACK.
Alat baris perintah terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Jika Anda menginstal VPA menggunakan kubectl, kami sarankan Anda menghapus VPA tersebut dan menginstal ulang menggunakan konsol. Untuk informasi lebih lanjut, lihat Bagaimana Cara Menggunakan Konsol untuk Mengelola VPA yang Diinstal Menggunakan kubectl?.
Langkah instalasi
Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di bilah navigasi kiri, klik Add-ons.
Di halaman Add-ons, temukan ack-vertical-pod-autoscaler dan selesaikan instalasi sesuai petunjuk.
Instal menggunakan kubectl
Prasyarat
Sebuah kluster ACK dikelola yang menjalankan Kubernetes sebelum 1.26 telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Dikelola.
Alat baris perintah terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Jika Anda telah menerapkan VPA di kluster, Anda harus menghapus VPA tersebut terlebih dahulu untuk menghindari konflik antara VPA baru dan yang sudah ada.
Langkah-langkah
Simpan file YAML untuk izin akses berbasis peran (RBAC) dan jalankan perintah untuk membuat file izin RBAC:
Perluas untuk Melihat Template YAML RBAC
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 - apiGroups: - "autoscaling.k8s.io" resources: - verticalpodautoscalers verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:vpa-status-actor rules: - apiGroups: - "autoscaling.k8s.io" resources: - verticalpodautoscalers/status verbs: - get - 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-status-actor roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:vpa-status-actor subjects: - kind: ServiceAccount name: vpa-recommender 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-systemkubectl apply -f rbac.yamlSimpan template YAML untuk CustomResourceDefinition (CRD) dan jalankan perintah untuk membuat CRD untuk ack-vertical-pod-autoscaler:
CatatanCRD meningkatkan skalabilitas kluster ACK. Untuk informasi lebih lanjut, lihat Perluas API Kubernetes dengan CustomResourceDefinitions.
Template YAML untuk CRD adalah sebagai berikut:
Versi Kubernetes sama dengan atau lebih baru dari 1.22 dan lebih lama dari 1.26
Perluas untuk Melihat Template YAML CRD
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 dari representasi objek ini. 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 mewakili sumber daya REST yang diwakili oleh objek ini. Server dapat menyimpulkan ini dari endpoint yang dikirimkan klien. 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 dicatat dalam titik pemeriksaan. type: string vpaObjectName: description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint. type: string type: object status: description: Data dari titik pemeriksaan. properties: cpuHistogram: description: Titik pemeriksaan histogram untuk konsumsi CPU. properties: bucketWeights: description: Peta dari indeks ember ke bobot ember. 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 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 ember ke bobot ember. 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 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 dari representasi objek ini. 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 mewakili sumber daya REST yang diwakili oleh objek ini. Server dapat menyimpulkan ini dari endpoint yang dikirimkan klien. 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 dicatat dalam titik pemeriksaan. type: string vpaObjectName: description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint. type: string type: object status: description: Data dari titik pemeriksaan. properties: cpuHistogram: description: Titik pemeriksaan histogram untuk konsumsi CPU. properties: bucketWeights: description: Peta dari indeks ember ke bobot ember. 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 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 ember ke bobot ember. 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 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 dari representasi objek ini. 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 mewakili sumber daya REST yang diwakili oleh objek ini. Server dapat menyimpulkan ini dari endpoint yang dikirimkan klien. 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 (kemudian recommender default akan menghasilkan rekomendasi) atau berisi tepat satu recommender. items: description: VerticalPodAutoscalerRecommenderSelector menunjuk ke recommender Vertical Pod Autoscaler tertentu. Di masa depan mungkin melewati 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 untuk dikontrol - 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, itu akan melaporkan kondisi ConfigUnsupported. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi penuh subresource skala - itu tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah pemilih label yang cocok dengan pod yang dikelompokkan oleh sumber daya target. properties: apiVersion: description: Versi API referensi type: string kind: description: 'Jenis referensi; Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' type: string name: description: 'Nama referensi; 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` disetel ke nilai default mereka. properties: minReplicas: description: Jumlah minimal replika yang perlu tetap hidup agar Updater mencoba pengusiran pod (tergantung pada 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 lainnya 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 dikontrol. 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` disetel 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 minimal sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup untuk aplikasi beroperasi dengan 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 dikontrol, 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). Digunakan hanya 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 maksimal sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Setiap sumber daya yang dialokasikan melebihi nilai ini kemungkinan besar terbuang. 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 dari representasi objek ini. 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 mewakili sumber daya REST yang diwakili oleh objek ini. Server dapat menyimpulkan ini dari endpoint yang dikirimkan klien. 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 untuk dikontrol - 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, itu akan melaporkan kondisi ConfigUnsupported. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi penuh subresource skala - itu tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah pemilih label yang cocok dengan pod yang dikelompokkan oleh sumber daya target. properties: apiVersion: description: Versi API referensi type: string kind: description: 'Jenis referensi; Informasi lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"' type: string name: description: 'Nama referensi; 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` disetel 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 lainnya 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 dikontrol. 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` disetel 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 minimal sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup untuk aplikasi beroperasi dengan 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 dikontrol, 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). Digunakan hanya 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 maksimal sumber daya yang direkomendasikan. Mengamati ContainerResourcePolicy. Setiap sumber daya yang dialokasikan melebihi nilai ini kemungkinan besar terbuang. 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: falseVersi Kubernetes lebih awal dari 1.22
Perluas untuk Melihat Template YAML CRD
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 memvalidasi 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: falsekubectl apply -f crd.yamlInstal komponen admission-controller, recommender, dan updater dari ack-vertical-pod-autoscaler.
Versi Kubernetes sama dengan atau lebih baru dari 1.22 dan lebih lama dari 1.26
Instal 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: 8943Versi Kubernetes lebih lama dari 1.22
Instal 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 Pembaruan
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: 8080
Langkah 2: Verifikasi VPA telah terinstal
Simpan template YAML berikut dan jalankan perintah untuk membuat Deployment bernama nginx-deployment-basic:
Perluas untuk Melihat Template nginx-deployment-basic.yaml
CatatanKosongkan bidang
requestsdanlimitsdalam konfigurasi Deployment.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: 80kubectl apply -f nginx-deployment-basic.yamlSimpan template YAML berikut dan jalankan perintah untuk membuat sumber daya VPA bernama nginx-deployment-basic-vpa:
Perluas untuk Melihat Template nginx-deployment-basic-vpa.yaml
CatatanAnda dapat mengatur
updateModekeOffatauAutosesuai kebutuhan.Off(disarankan): Merekomendasikan konfigurasi permintaan dan batas sumber daya pod berdasarkan konsumsi sumber daya kluster tetapi tidak secara otomatis memperbarui konfigurasi sumber daya pod.Auto: Merekomendasikan konfigurasi permintaan dan batas sumber daya pod berdasarkan konsumsi sumber daya kluster dan secara otomatis memperbarui konfigurasi sumber daya pod.
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" # Setel ke off.kubectl apply -f nginx-deployment-basic-vpa.yamlJalankan perintah berikut untuk menanyakan nilai
requestsuntuk sumber daya CPU dan memori yang direkomendasikan oleh VPA untuk Deployment:kubectl describe vpa nginx-deployment-basic-vpaOutput yang diharapkan mungkin memerlukan waktu sekitar dua menit. Output berikut menunjukkan contoh rekomendasi permintaan sumber daya:
Perluas untuk Melihat Output yang Diharapkan
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
requestsuntuk Deployment berdasarkan rekomendasi. VPA terus memantau penggunaan sumber daya Deployment dan memberikan saran optimisasi.
Bagaimana cara menggunakan konsol untuk mengelola VPA yang diinstal menggunakan kubectl?
Untuk kluster yang menjalankan Kubernetes 1.26 atau lebih baru, kami sarankan Anda menggunakan konsol untuk menginstal komponen ack-vertical-pod-autoscaler dan mengelola VPA. Anda harus menghapus VPA yang ada yang diinstal menggunakan kubectl, dan menginstal ulang melalui konsol untuk menghindari konflik antara VPA baru dan yang sudah ada.
Perluas untuk Melihat Prosedur
Langkah 1: Uninstal VPA yang diterapkan di kluster
Uninstal VPA yang diterapkan di kluster, termasuk membersihkan sumber daya seperti Deployments, izin RBAC, Secrets, CRD, dan Services, untuk menghindari konflik saat Anda menerapkan versi baru VPA.
Dalam file YAML dari VPA yang ada seperti yang ditunjukkan dalam contoh nginx-deployment-basic-vpa.yaml di bawah ini, dalam bidang
metadata, pertahankan hanya bidangnamedannamespacedan hapus semua informasi lainnya. Selain itu, hapus informasi dalam bidangstatus. Kemudian, simpan file YAML ini untuk langkah-langkah selanjutnya.apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"autoscaling.k8s.io/v1","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"nginx-deployment-basic-vpa","namespace":"default"},"spec":{"targetRef":{"apiVersion":"apps/v1","kind":"Deployment","name":"nginx-deployment-basic"},"updatePolicy":{"updateMode":"Off"}}} creationTimestamp: "2024-02-29T06:03:35Z" generation: 1 name: nginx-deployment-basic-vpa namespace: default resourceVersion: "56264" uid: 9f128737-d12e-46f6-b254-c1a7505c19c6 spec: targetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment-basic updatePolicy: updateMode: "Off" status: conditions: - lastTransitionTime: "2024-02-29T06:03:55Z" status: "True" type: RecommendationProvided recommendation: containerRecommendations: - containerName: nginx lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 25m memory: 262144kkubectl get vpa nginx-deployment-basic-vpa -oyamlJalankan perintah berikut untuk menghapus sumber daya yang diinstal oleh VPA:
// Hapus Deployment dan Service kubectl delete deployment vpa-admission-controller vpa-recommender vpa-updater -n kube-system kubectl delete svc vpa-webhook -n kube-system // Hapus ClusterRole kubectl delete clusterrole system:metrics-reader system:vpa-actor system:vpa-status-actor system:vpa-checkpoint-actor system:evictioner system:vpa-target-reader system:vpa-admission-controller system:vpa-status-reader // Hapus ClusterRoleBinding kubectl delete clusterrolebinding system:metrics-reader system:vpa-actor system:vpa-status-actor system:vpa-checkpoint-actor system:vpa-target-reader-binding system:vpa-evictioner-binding system:vpa-admission-controller system:vpa-status-reader-binding // Hapus ServiceAccount kubectl delete sa vpa-admission-controller vpa-recommender vpa-updater -n kube-system // Hapus Secret kubectl delete secret vpa-tls-certs -n kube-system // Hapus CRD kubectl delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io verticalpodautoscalers.autoscaling.k8s.io
Langkah 2: Instal komponen ack-vertical-pod-autoscaler
Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di bilah navigasi kiri, klik Add-ons.
Di halaman Add-ons, temukan ack-vertical-pod-autoscaler dan selesaikan instalasi sesuai petunjuk.
Langkah 3: Redeploy file YAML dari VPA
Jalankan perintah berikut untuk menerapkan ulang file YAML yang disimpan di Langkah 1: Uninstal VPA yang Diterapkan di Kluster. Langkah ini menggunakan nginx-deployment-basic-vpa.yaml sebagai contoh:
kubectl apply -f nginx-deployment-basic-vpa.yamlReferensi
Untuk menskalakan pod berdasarkan pemanfaatan CPU, penggunaan memori, atau metrik kustom lainnya, lihat Implementasikan Horizontal Pod Autoscaler (HPA).
Jika penggunaan sumber daya aplikasi Anda bersifat periodik dan Anda perlu menskalakan pod secara teratur menggunakan strategi seperti Crontab, lihat Gunakan CronHPA untuk penskalaan horizontal terjadwal.
Apabila penggunaan sumber daya aplikasi Anda menunjukkan pola periodik yang sulit didefinisikan dengan aturan tertentu, Anda dapat menggunakan Advanced Horizontal Pod Autoscaling (AHPA) untuk mengidentifikasi siklus penggunaan sumber daya secara otomatis dan menskalakan pod berdasarkan data historis. Untuk detail lebih lanjut, lihat Penskalaan prediktif berdasarkan AHPA.
Untuk menyesuaikan kebijakan penskalaan pod secara fleksibel berdasarkan antrian pesan, strategi waktu, metrik kustom, dan acara Kubernetes lainnya, lihat Penskalaan berbasis acara.