All Products
Search
Document Center

Container Service for Kubernetes:Penskalaan vertikal pod otomatis

Last Updated:Jul 02, 2025

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:

Informasi latar belakang

Penting

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

  1. Jalankan perintah berikut untuk membuat file izin kontrol akses berbasis peran (RBAC):

    kubectl apply -f rbac.yaml

    Klik 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-system
  2. Jalankan 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.yaml

    Template 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: false

    Template 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: false

  3. Instal komponen vertical-pod-autoscaler.

    vertical-pod-autoscaler mencakup komponen berikut: admission-controller, recommender, dan updater.

    Catatan

    Sebelum 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-controller

      Instal 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: 8080

      Instal 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: 8080

    • Template 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-controller

      Instal 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: 8942

      Instal 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

  1. 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"

    Catatan

    Atur updateMode ke Off, dan biarkan bidang requests dan limits kosong dalam konfigurasi Deployment.

  2. Jalankan perintah berikut untuk menanyakan permintaan CPU dan permintaan memori yang direkomendasikan oleh vertical-pod-autoscaler untuk Deployment.

    Catatan

    Output akan dikembalikan 2 menit setelah Anda menjalankan perintah.

    kubectl describe vpa nginx-deployment-basic-vpa

    Output 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:  12128573170

    Anda 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.