All Products
Search
Document Center

Container Service for Kubernetes:Vertical pod autoscaling (VPA)

Last Updated:Aug 21, 2026

Layanan Kontainer Serverless (ACK Serverless) menyediakan vertical pod autoscaling melalui Vertical Pod Autoscaler (VPA). Setelah Anda menerapkan dan menginstal VPA pada kluster ACK serverless, VPA secara otomatis menetapkan batas resource untuk Pod berdasarkan penggunaan resource-nya. Hal ini memungkinkan kluster menjadwalkan Pod pada node yang memiliki resource mencukupi. VPA juga mempertahankan rasio antara permintaan dan batas resource dari definisi kontainer aslinya. Topik ini menjelaskan cara menggunakan file YAML untuk menerapkan vertical pod autoscaling.

Prasyarat

Pastikan prasyarat berikut terpenuhi:

Informasi latar belakang

Penting

Fitur vertical pod autoscaling bersifat eksperimental. Gunakan dengan hati-hati.

  • Memperbarui konfigurasi resource Pod yang sedang berjalan merupakan fitur eksperimental VPA. Operasi ini akan membuat ulang dan merestart Pod, yang mungkin dijadwalkan ke node berbeda.

  • VPA tidak mengeluarkan (evict) Pod yang tidak dikelola oleh ReplicationController. Untuk Pod tersebut, mode Auto setara dengan mode Initial.

  • Saat ini, VPA tidak dapat dijalankan secara bersamaan dengan Horizontal Pod Autoscaler (HPA) yang memantau metrik CPU dan memori. Satu-satunya pengecualian adalah jika HPA hanya memantau metrik kustom atau eksternal lainnya.

  • VPA menggunakan admission webhook sebagai kontrol admisinya. Jika terdapat admission webhook lain di kluster, pastikan tidak terjadi konflik dengan webhook VPA. Urutan eksekusi admission controller ditentukan dalam parameter konfigurasi API Server.

  • VPA menangani sebagian besar event out-of-memory (OOM), tetapi efektivitasnya tidak dijamin dalam semua skenario.

  • Kinerja VPA belum diuji pada kluster berskala besar.

  • Nilai permintaan resource yang dimodifikasi oleh VPA dapat melebihi batas resource, seperti batas resource node, resource yang tersedia, atau kuota sumber daya. Hal ini dapat menyebabkan Pod masuk ke status Pending dan gagal dijadwalkan. Anda dapat menggunakan Cluster Autoscaler untuk mengatasi masalah ini.

  • Jika beberapa VPA cocok dengan Pod yang sama, hal ini dapat menyebabkan perilaku yang tidak terdefinisi.

Instal Vertical Pod Autoscaler

  1. Jalankan perintah berikut untuk membuat file izin Role-Based Access Control (RBAC).

    kubectl apply -f rbac.yaml

    Perluas untuk melihat file YAML

    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 memperluas kemampuan Kubernetes. Untuk informasi selengkapnya, lihat Perluas API Kubernetes dengan CustomResourceDefinitions.

    kubectl apply -f crd.yaml

    Definisi crd.yaml untuk versi kluster sebelum 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 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: false

    Definisi crd.yaml untuk versi kluster 1.22 dan seterusnya

    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 checkpoint 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. Info 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 resource REST yang diwakili objek ini. Server dapat menyimpulkan hal ini dari endpoint tempat klien mengirim permintaan. Tidak dapat diperbarui. Dalam CamelCase. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                type: string
              metadata:
                type: object
              spec:
                description: 'Spesifikasi checkpoint. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.'
                properties:
                  containerName:
                    description: Nama kontainer yang di-checkpoint.
                    type: string
                  vpaObjectName:
                    description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint.
                    type: string
                type: object
              status:
                description: Data checkpoint.
                properties:
                  cpuHistogram:
                    description: Checkpoint 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 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 saat status terakhir diperbarui.
                    format: date-time
                    nullable: true
                    type: string
                  memoryHistogram:
                    description: Checkpoint 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 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 checkpoint 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. Info 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 resource REST yang diwakili objek ini. Server dapat menyimpulkan hal ini dari endpoint tempat klien mengirim permintaan. Tidak dapat diperbarui. Dalam CamelCase. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                type: string
              metadata:
                type: object
              spec:
                description: 'Spesifikasi checkpoint. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.'
                properties:
                  containerName:
                    description: Nama kontainer yang di-checkpoint.
                    type: string
                  vpaObjectName:
                    description: Nama objek VPA yang menyimpan objek VerticalPodAutoscalerCheckpoint.
                    type: string
                type: object
              status:
                description: Data checkpoint.
                properties:
                  cpuHistogram:
                    description: Checkpoint 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 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 saat status terakhir diperbarui.
                    format: date-time
                    nullable: true
                    type: string
                  memoryHistogram:
                    description: Checkpoint 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 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 vertical pod autoscaler, yang secara otomatis mengelola resource Pod berdasarkan pemanfaatan resource historis dan real time.
            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. Info 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 resource REST yang diwakili objek ini. Server dapat menyimpulkan hal ini dari endpoint tempat klien mengirim permintaan. Tidak dapat diperbarui. Dalam CamelCase. Info 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. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.'
                properties:
                  recommenders:
                    description: Recommender yang bertanggung jawab menghasilkan rekomendasi untuk objek ini. Daftar harus kosong (maka recommender default akan menghasilkan rekomendasi) atau berisi tepat satu recommender.
                    items:
                      description: VerticalPodAutoscalerRecommenderSelector mengarah ke Vertical Pod Autoscaler recommender tertentu. Di masa depan, ini mungkin akan pass parameter ke recommender.
                      properties:
                        name:
                          description: Nama recommender yang bertanggung jawab menghasilkan rekomendasi untuk objek ini.
                          type: string
                      required:
                      - name
                      type: object
                    type: array
                  resourcePolicy:
                    description: Mengontrol bagaimana autoscaler menghitung resource yang direkomendasikan. Kebijakan resource dapat digunakan untuk menetapkan batasan pada rekomendasi untuk kontainer individual. Jika tidak ditentukan, autoscaler menghitung resource yang direkomendasikan untuk semua kontainer dalam Pod, tanpa batasan tambahan.
                    properties:
                      containerPolicies:
                        description: Kebijakan resource per kontainer.
                        items:
                          description: ContainerResourcePolicy mengontrol bagaimana autoscaler menghitung resource yang direkomendasikan untuk kontainer tertentu.
                          properties:
                            containerName:
                              description: Nama kontainer atau DefaultContainerResourcePolicy, di mana kebijakan digunakan oleh kontainer yang tidak memiliki kebijakan sendiri.
                              type: string
                            controlledResources:
                              description: Menentukan jenis rekomendasi yang akan dihitung (dan mungkin diterapkan) oleh VPA. Jika tidak ditentukan, nilai default [ResourceCPU, ResourceMemory] akan digunakan.
                              items:
                                description: ResourceName adalah nama yang mengidentifikasi berbagai resource dalam ResourceList.
                                type: string
                              type: array
                            controlledValues:
                              description: Menentukan nilai resource mana yang harus dikontrol. Nilai default 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 resource yang akan direkomendasikan untuk kontainer. Nilai default adalah tanpa 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 resource yang akan direkomendasikan untuk kontainer. Nilai default adalah tanpa minimum.
                              type: object
                            mode:
                              description: Apakah autoscaler diaktifkan untuk kontainer. Nilai default adalah "Auto".
                              enum:
                              - Auto
                              - "Off"
                              type: string
                          type: object
                        type: array
                    type: object
                  targetRef:
                    description: TargetRef mengarah ke controller yang mengelola kumpulan Pod untuk dikontrol oleh autoscaler—misalnya Deployment, StatefulSet. VerticalPodAutoscaler dapat ditargetkan pada controller yang mengimplementasikan subresource scale (kumpulan Pod diambil dari ScaleStatus controller) atau beberapa controller terkenal (misalnya untuk DaemonSet, kumpulan Pod dibaca dari spesifikasi controller). Jika VerticalPodAutoscaler tidak dapat menggunakan target yang ditentukan, kondisi ConfigUnsupported akan dilaporkan. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi lengkap subresource scale—tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah pemilih label yang mencocokkan Pod yang dikelompokkan oleh resource target.
                    properties:
                      apiVersion:
                        description: Versi API dari referensi
                        type: string
                      kind:
                        description: 'Jenis referensi; Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"'
                        type: string
                      name:
                        description: 'Nama referensi; Info 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 ke Pod. Jika tidak ditentukan, semua bidang dalam `PodUpdatePolicy` diatur ke nilai default-nya.
                    properties:
                      minReplicas:
                        description: Jumlah minimal replika yang harus aktif agar Updater mencoba eviction Pod (menunggu pemeriksaan lain seperti PDB). Hanya nilai positif yang diizinkan. Menggantikan flag global '--min-replicas'.
                        format: int32
                        type: integer
                      updateMode:
                        description: Mengontrol kapan autoscaler menerapkan perubahan ke resource Pod. Nilai default 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 kumpulan kondisi yang diperlukan agar autoscaler ini dapat 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 berpindah 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 tersebut
                          type: string
                        reason:
                          description: reason adalah alasan transisi terakhir kondisi tersebut.
                          type: string
                        status:
                          description: status adalah status kondisi tersebut (True, False, Unknown)
                          type: string
                        type:
                          description: type menggambarkan kondisi saat ini
                          type: string
                      required:
                      - status
                      - type
                      type: object
                    type: array
                  recommendation:
                    description: Jumlah resource terbaru yang direkomendasikan oleh autoscaler untuk Pod yang dikontrol.
                    properties:
                      containerRecommendations:
                        description: Resource yang direkomendasikan oleh autoscaler untuk setiap kontainer.
                        items:
                          description: RecommendedContainerResources adalah rekomendasi resource yang dihitung oleh autoscaler untuk kontainer tertentu. Menghormati kebijakan resource 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 minimal resource yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup agar aplikasi beroperasi secara stabil, namun menjalankan dengan resource kurang dari ini kemungkinan besar 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 resource 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 resource terbaru yang direkomendasikan oleh autoscaler untuk Pod yang dikontrol, berdasarkan hanya pada penggunaan resource aktual, tanpa mempertimbangkan ContainerResourcePolicy. Dapat berbeda dari Rekomendasi jika penggunaan resource aktual menyebabkan target melanggar ContainerResourcePolicy (lebih rendah dari MinAllowed atau lebih tinggi dari MaxAllowed). Hanya digunakan sebagai indikasi status, tidak akan memengaruhi alokasi resource 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 resource yang direkomendasikan. Mengamati ContainerResourcePolicy. Resource apa pun yang dialokasikan melebihi nilai ini kemungkinan besar terbuang. Nilai ini mungkin lebih besar dari jumlah maksimum yang sebenarnya dapat dikonsumsi 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 tidak digunakan lagi
        name: v1beta2
        schema:
          openAPIV3Schema:
            description: VerticalPodAutoscaler adalah konfigurasi untuk vertical pod autoscaler, yang secara otomatis mengelola resource Pod berdasarkan pemanfaatan resource historis dan real time.
            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. Info 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 resource REST yang diwakili objek ini. Server dapat menyimpulkan hal ini dari endpoint tempat klien mengirim permintaan. Tidak dapat diperbarui. Dalam CamelCase. Info 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. Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.'
                properties:
                  resourcePolicy:
                    description: Mengontrol bagaimana autoscaler menghitung resource yang direkomendasikan. Kebijakan resource dapat digunakan untuk menetapkan batasan pada rekomendasi untuk kontainer individual. Jika tidak ditentukan, autoscaler menghitung resource yang direkomendasikan untuk semua kontainer dalam Pod, tanpa batasan tambahan.
                    properties:
                      containerPolicies:
                        description: Kebijakan resource per kontainer.
                        items:
                          description: ContainerResourcePolicy mengontrol bagaimana autoscaler menghitung resource yang direkomendasikan untuk kontainer tertentu.
                          properties:
                            containerName:
                              description: Nama kontainer atau DefaultContainerResourcePolicy, di mana kebijakan digunakan oleh kontainer yang tidak memiliki kebijakan sendiri.
                              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 resource yang akan direkomendasikan untuk kontainer. Nilai default adalah tanpa 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 resource yang akan direkomendasikan untuk kontainer. Nilai default adalah tanpa minimum.
                              type: object
                            mode:
                              description: Apakah autoscaler diaktifkan untuk kontainer. Nilai default adalah "Auto".
                              enum:
                              - Auto
                              - "Off"
                              type: string
                          type: object
                        type: array
                    type: object
                  targetRef:
                    description: TargetRef mengarah ke controller yang mengelola kumpulan Pod untuk dikontrol oleh autoscaler—misalnya Deployment, StatefulSet. VerticalPodAutoscaler dapat ditargetkan pada controller yang mengimplementasikan subresource scale (kumpulan Pod diambil dari ScaleStatus controller) atau beberapa controller terkenal (misalnya untuk DaemonSet, kumpulan Pod dibaca dari spesifikasi controller). Jika VerticalPodAutoscaler tidak dapat menggunakan target yang ditentukan, kondisi ConfigUnsupported akan dilaporkan. Perhatikan bahwa VerticalPodAutoscaler tidak memerlukan implementasi lengkap subresource scale—tidak akan menggunakannya untuk memodifikasi jumlah replika. Satu-satunya hal yang diambil adalah pemilih label yang mencocokkan Pod yang dikelompokkan oleh resource target.
                    properties:
                      apiVersion:
                        description: Versi API dari referensi
                        type: string
                      kind:
                        description: 'Jenis referensi; Info lebih lanjut: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"'
                        type: string
                      name:
                        description: 'Nama referensi; Info 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 ke Pod. Jika tidak ditentukan, semua bidang dalam `PodUpdatePolicy` diatur ke nilai default-nya.
                    properties:
                      updateMode:
                        description: Mengontrol kapan autoscaler menerapkan perubahan ke resource Pod. Nilai default 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 kumpulan kondisi yang diperlukan agar autoscaler ini dapat 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 berpindah 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 tersebut
                          type: string
                        reason:
                          description: reason adalah alasan transisi terakhir kondisi tersebut.
                          type: string
                        status:
                          description: status adalah status kondisi tersebut (True, False, Unknown)
                          type: string
                        type:
                          description: type menggambarkan kondisi saat ini
                          type: string
                      required:
                      - status
                      - type
                      type: object
                    type: array
                  recommendation:
                    description: Jumlah resource terbaru yang direkomendasikan oleh autoscaler untuk Pod yang dikontrol.
                    properties:
                      containerRecommendations:
                        description: Resource yang direkomendasikan oleh autoscaler untuk setiap kontainer.
                        items:
                          description: RecommendedContainerResources adalah rekomendasi resource yang dihitung oleh autoscaler untuk kontainer tertentu. Menghormati kebijakan resource 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 minimal resource yang direkomendasikan. Mengamati ContainerResourcePolicy. Jumlah ini tidak dijamin cukup agar aplikasi beroperasi secara stabil, namun menjalankan dengan resource kurang dari ini kemungkinan besar 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 resource 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 resource terbaru yang direkomendasikan oleh autoscaler untuk Pod yang dikontrol, berdasarkan hanya pada penggunaan resource aktual, tanpa mempertimbangkan ContainerResourcePolicy. Dapat berbeda dari Rekomendasi jika penggunaan resource aktual menyebabkan target melanggar ContainerResourcePolicy (lebih rendah dari MinAllowed atau lebih tinggi dari MaxAllowed). Hanya digunakan sebagai indikasi status, tidak akan memengaruhi alokasi resource 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 resource yang direkomendasikan. Mengamati ContainerResourcePolicy. Resource apa pun yang dialokasikan melebihi nilai ini kemungkinan besar terbuang. Nilai ini mungkin lebih besar dari jumlah maksimum yang sebenarnya dapat dikonsumsi 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.

    Komponen Vertical Pod Autoscaler mencakup admission-controller, recommender, dan updater.

    Catatan

    Sebelum menginstal komponen admission-controller, gunakan skrip ini untuk menghasilkan sertifikat untuk webhook.

    • Definisi YAML untuk versi kluster sebelum 1.22

      Instal komponen 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 komponen 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 komponen 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

    • Definisi YAML untuk versi kluster 1.22 dan seterusnya

      Instal komponen 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 komponen 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 komponen 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 instalasi VPA

  1. Gunakan definisi YAML berikut untuk membuat deployment bernama nginx-deployment-basic dan resource VPA bernama nginx-deployment-basic-vpa.

    Perluas untuk melihat file YAML

    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 permintaan serta batas resource dalam deployment kosong.

  2. Jalankan perintah berikut untuk mengkueri VPA guna mendapatkan nilai permintaan resource CPU dan memori yang direkomendasikan untuk deployment tersebut.

    Catatan

    Setelah menjalankan perintah, tunggu sekitar dua menit hingga VPA mengembalikan nilai yang direkomendasikan.

    kubectl describe vpa nginx-deployment-basic-vpa

    Setelah menjalankan perintah, nilai rekomendasi berikut dikembalikan.

    Perluas 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 menggunakan nilai rekomendasi tersebut untuk mengonfigurasi permintaan resource untuk deployment. VPA terus memantau penggunaan resource aplikasi dan memberikan saran optimasi.