Autoscaling Pod Vertikal di Azure Kubernetes Service (AKS)

Artikel ini memberikan gambaran umum tentang Vertical Pod Autoscaler (VPA) di Azure Kubernetes Service (AKS), yang didasarkan pada versi sumber terbuka Kubernetes. Saat dikonfigurasi, kontainer secara otomatis menetapkan permintaan dan batasan sumber daya pada kontainer per beban kerja berdasarkan penggunaan sebelumnya. VPA membebaskan CPU dan Memori untuk pod lain dan membantu memanfaatkan kluster AKS Anda secara efektif.

Penskalaan otomatis Pod Vertikal memberikan rekomendasi untuk penggunaan sumber daya dari waktu ke waktu. Untuk mengelola peningkatan penggunaan sumber daya secara tiba-tiba, gunakan Horizontal Pod Autoscaler, yang menskalakan jumlah replika pod sesuai kebutuhan.

Keuntungan

Penskala Otomatis Pod Vertikal memberikan manfaat berikut:

  • Ini menganalisis dan menyesuaikan sumber daya prosesor dan memori untuk mengukur aplikasi Anda dengan tepat. VPA tidak hanya bertanggung jawab untuk meningkatkan skala, tetapi juga untuk menurunkan skala berdasarkan penggunaan sumber daya mereka dari waktu ke waktu.

  • Sebuah pod dikeluarkan jika perlu mengubah permintaan sumber dayanya jika mode penskalaannya diatur ke otomatis atau dibuat ulang.

  • Mengatur batasan CPU dan memori untuk kontainer individual dengan menentukan kebijakan sumber daya

  • Memastikan simpul memiliki sumber daya yang benar untuk penjadwalan pod

  • Pengelogan yang dapat dikonfigurasi dari setiap penyesuaian pada sumber daya prosesor atau memori yang dibuat

  • Meningkatkan pemanfaatan sumber daya kluster dan membebaskan CPU dan memori untuk pod lain.

Pembatasan

  • Penskalaan otomatis Pod Vertikal mendukung maksimum 1.000 pod yang terkait dengan VerticalPodAutoscaler objek per kluster.

  • VPA mungkin merekomendasikan lebih banyak sumber daya daripada yang tersedia di kluster. Akibatnya, ini mencegah pod ditetapkan ke simpul dan berjalan, karena simpul tidak memiliki sumber daya yang memadai. Anda dapat mengatasi batasan ini dengan mengatur LimitRange ke sumber daya maksimum yang tersedia per namespace, yang memastikan pod tidak meminta lebih banyak sumber daya daripada yang ditentukan. Selain itu, Anda dapat mengatur rekomendasi sumber daya maksimum yang diizinkan per pod dalam objek VerticalPodAutoscaler . Ketahuilah bahwa VPA tidak dapat sepenuhnya mengatasi masalah sumber daya simpul yang tidak memadai. Rentang batas diperbaiki, tetapi penggunaan sumber daya simpul diubah secara dinamis.

  • Kami tidak merekomendasikan penggunaan Vertical Pod Autoscaler dengan Horizontal Pod Autoscaler, yang menskalakan berdasarkan metrik penggunaan CPU dan memori yang sama.

  • Pemberi Rekomendasi VPA hanya menyimpan hingga delapan hari data historis.

  • VPA tidak mendukung beban kerja berbasis JVM karena visibilitas terbatas ke penggunaan memori aktual beban kerja.

  • Tidak disarankan atau didukung untuk menjalankan implementasi VPA Anda sendiri bersama implementasi VPA terkelola ini. Memiliki pemberi rekomendasi tambahan atau disesuaikan didukung.

  • Kontainer AKS Windows tidak didukung.

Sebelum Anda mulai

  • Kluster AKS menjalankan Kubernetes versi 1.24 dan yang lebih tinggi.

  • Azure CLI versi 2.52.0 atau yang lebih baru diinstal dan dikonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

  • kubectl harus terhubung ke kluster yang ingin Anda instal VPA.

Gambaran umum VPA

Objek API

Penskala Otomatis Pod Vertikal adalah sumber daya API dalam grup API penskalan otomatis Kubernetes. Versi yang didukung adalah 0.11 dan lebih tinggi, dan dapat ditemukan di repositori autoscaler Kubernetes.

Objek VPA terdiri dari tiga komponen:

  • Pemberi rekomendasi - ini memantau konsumsi sumber daya saat ini dan sebelumnya dan, berdasarkan itu, memberikan nilai yang direkomendasikan untuk cpu kontainer dan permintaan/batas memori. Pemberi Rekomendasi memantau riwayat metrik, peristiwa Kehabisan Memori (OOM), dan spesifikasi penyebaran VPA, dan menyarankan permintaan yang adil. Dengan menyediakan permintaan sumber daya dan konfigurasi batas yang tepat, batas dinaikkan dan diturunkan.

  • Updater - memeriksa pod terkelola mana yang memiliki sumber daya yang benar yang ditetapkan dan, jika tidak, membunuhnya sehingga dapat dibuat ulang oleh pengontrol mereka dengan permintaan yang diperbarui.

  • Pengontrol Penerimaan VPA - ini mengatur permintaan sumber daya yang benar pada pod baru (dibuat atau dibuat ulang oleh pengontrol mereka karena aktivitas Updater).

Pengontrol penerimaan VPA

Pengontrol penerimaan VPA adalah biner yang mendaftarkan dirinya sebagai Webhook Penerimaan Bermutasi. Dengan setiap pod yang dibuat, ia mendapatkan permintaan dari apiserver dan mengevaluasi apakah ada konfigurasi VPA yang cocok, atau menemukan yang sesuai dan menggunakan rekomendasi saat ini untuk mengatur permintaan sumber daya di pod.

Pekerjaan mandiri berjalan di luar pengontrol penerimaan VPA, yang disebut overlay-vpa-cert-webhook-check. overlay-vpa-cert-webhook-check digunakan untuk membuat dan memperbarui sertifikat, dan mendaftarkan pengontrol penerimaan VPA sebagai MutatingWebhookConfiguration.

Untuk ketersediaan tinggi, AKS mendukung dua replika pengontrol penerimaan.

Mode operasi objek VPA

Sumber daya Penskala Otomatis Pod Vertikal dimasukkan untuk setiap pengontrol yang ingin Anda komputasi persyaratan sumber daya secara otomatis. Ini adalah penyebaran yang paling umum. Ada empat mode di mana VPU beroperasi:

  • Auto - VPA menetapkan permintaan sumber daya selama pembuatan pod dan memperbarui pod yang ada menggunakan mekanisme pembaruan pilihan. Saat ini, Auto setara dengan Recreate, dan juga merupakan mode default. Setelah pembaruan permintaan pod gratis ("di tempat") tersedia, pembaruan tersebut dapat digunakan sebagai mekanisme pembaruan yang disukai oleh Auto mode . Saat menggunakan Recreate mode, VPA mengeluarkan pod jika perlu mengubah permintaan sumber dayanya. Ini dapat menyebabkan pod dimulai ulang sekaligus, sehingga menyebabkan inkonsistensi aplikasi. Anda dapat membatasi restart dan mempertahankan konsistensi dalam situasi ini dengan menggunakan PodDisruptionBudget.
  • Recreate - VPA menetapkan permintaan sumber daya selama pembuatan pod serta memperbarui pod yang ada dengan mengeluarkannya ketika sumber daya yang diminta berbeda secara signifikan dari rekomendasi baru (sehubungan dengan Anggaran Gangguan Pod, jika ditentukan). Mode ini jarang digunakan, hanya jika Anda perlu memastikan bahwa pod dimulai ulang setiap kali permintaan sumber daya berubah. Jika tidak, Auto mode lebih disukai, yang dapat memanfaatkan pembaruan bebas hidupkan ulang setelah tersedia.
  • Initial - VPA hanya menetapkan permintaan sumber daya selama pembuatan pod dan tidak pernah berubah setelahnya.
  • Off - VPA tidak secara otomatis mengubah persyaratan sumber daya pod. Rekomendasi dihitung dan dapat diperiksa di objek VPA.

Pola penyebaran selama pengembangan aplikasi

Pola penyebaran umum yang direkomendasikan untuk Anda jika Anda tidak terbiasa dengan VPA adalah melakukan langkah-langkah berikut selama pengembangan aplikasi untuk mengidentifikasi karakteristik pemanfaatan sumber daya uniknya, menguji VPA untuk memverifikasi bahwa VPA berfungsi dengan baik, dan menguji bersama komponen Kubernetes lainnya untuk mengoptimalkan pemanfaatan sumber daya kluster.

  1. Atur UpdateMode = "Off" di kluster produksi Anda dan jalankan VPA dalam mode rekomendasi sehingga Anda dapat menguji dan mendapatkan keakraban dengan VPA. UpdateMode = "Off" dapat menghindari pengenalan kesalahan konfigurasi yang dapat menyebabkan pemadaman.

  2. Tetapkan pengamatan terlebih dahulu dengan mengumpulkan telemetri pemanfaatan sumber daya aktual selama periode waktu tertentu. Ini membantu Anda memahami perilaku dan tanda-tanda gejala atau masalah dari sumber daya kontainer dan pod yang dipengaruhi oleh beban kerja yang berjalan pada mereka.

  3. Kenali data pemantauan untuk memahami karakteristik performa. Berdasarkan wawasan ini, atur permintaan/batas yang diinginkan sesuai dan kemudian dalam penyebaran atau peningkatan berikutnya

  4. Atur updateMode nilai ke Auto, Recreate, atau Initial tergantung pada kebutuhan Anda.

Menyebarkan, meningkatkan, atau menonaktifkan VPA pada kluster

Di bagian ini, Anda menyebarkan, meningkatkan, atau menonaktifkan Penskala Otomatis Pod Vertikal pada kluster Anda.

  1. Untuk mengaktifkan VPA pada kluster baru, gunakan --enable-vpa parameter dengan perintah az aks create .

    az aks create -n myAKSCluster -g myResourceGroup --enable-vpa
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  2. Secara opsional, untuk mengaktifkan VPA pada kluster yang ada, gunakan --enable-vpa dengan perintah [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update].

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa 
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  3. Secara opsional, untuk menonaktifkan VPA pada kluster yang ada, gunakan --disable-vpa dengan perintah [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update].

    az aks update -n myAKSCluster -g myResourceGroup --disable-vpa
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  4. Untuk memverifikasi bahwa pod Penskala Otomatis Pod Vertikal telah berhasil dibuat, gunakan perintah kubectl get .

kubectl get pods -n kube-system

Output perintah mencakup hasil berikut khusus untuk pod VPA. Pod harus menunjukkan status berjalan.

NAME                                        READY   STATUS    RESTARTS   AGE
vpa-admission-controller-7867874bc5-vjfxk   1/1     Running   0          41m
vpa-recommender-5fd94767fb-ggjr2            1/1     Running   0          41m
vpa-updater-56f9bfc96f-jgq2g                1/1     Running   0          41m

Menguji penginstalan Vertical Pod Autoscaler Anda

Langkah-langkah berikut membuat penyebaran dengan dua pod, masing-masing menjalankan satu kontainer yang meminta 100 milimeter dan mencoba menggunakan sedikit di atas 500 miliore. Juga konfigurasi VPA dibuat, menunjuk pada penyebaran. VPA mengamati perilaku pod, dan setelah sekitar lima menit, mereka diperbarui dengan permintaan CPU yang lebih tinggi.

  1. Buat file bernama hamster.yaml dan salin dalam manifes berikut dari contoh Vertical Pod Autoscaler dari repositori GitHub kubernetes/autoscaler .

  2. Sebarkan hamster.yaml contoh Penskala Otomatis Pod Vertikal menggunakan perintah kubectl apply dan tentukan nama manifes YAML Anda:

    kubectl apply -f hamster.yaml
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  3. Jalankan perintah kubectl get berikut untuk mendapatkan pod dari aplikasi contoh hamster:

    kubectl get pods -l app=hamster
    

    Contoh output menyerupai berikut ini:

    hamster-78f9dcdd4c-hf7gk   1/1     Running   0          24s
    hamster-78f9dcdd4c-j9mc7   1/1     Running   0          24s
    
  4. Gunakan perintah kubectl describe pada salah satu pod untuk melihat reservasi CPU dan memorinya. Ganti "exampleID" dengan salah satu ID pod yang dikembalikan dalam output Anda dari langkah sebelumnya.

    kubectl describe pod hamster-exampleID
    

    Contoh output adalah cuplikan informasi tentang kluster:

     hamster:
        Container ID:  containerd://
        Image:         k8s.gcr.io/ubuntu-slim:0.1
        Image ID:      sha256:
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Wed, 28 Sep 2022 15:06:14 -0400
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        100m
          memory:     50Mi
        Environment:  <none>
    

    Pod memiliki 100 milicpu dan 50 Mibibyte memori yang dicadangkan dalam contoh ini. Untuk aplikasi sampel ini, pod membutuhkan kurang dari 100 milikpu untuk dijalankan, sehingga tidak ada kapasitas CPU yang tersedia. Pod juga mencadangkan memori yang jauh lebih sedikit daripada yang diperlukan. Penyebaran vertical Pod Autoscaler vpa-recommender menganalisis pod yang menghosting aplikasi hamster untuk melihat apakah persyaratan CPU dan memori sesuai. Jika penyesuaian diperlukan, vpa-updater akan menjalankan kembali pod dengan nilai yang diperbarui.

  5. Tunggu hingga vpa-updater meluncurkan pod hamster baru, yang seharusnya memakan waktu beberapa menit. Anda dapat memantau pod menggunakan perintah kubectl get .

    kubectl get --watch pods -l app=hamster
    
  6. Ketika pod hamster baru dimulai, jelaskan pod yang menjalankan perintah kubectl describe dan lihat reservasi CPU dan memori yang diperbarui.

    kubectl describe pod hamster-<exampleID>
    

    Contoh output adalah cuplikan informasi yang menjelaskan pod:

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

    Pada output sebelumnya, Anda dapat melihat bahwa reservasi CPU meningkat menjadi 587 milikpu, yang lebih dari lima kali nilai asli. Memori meningkat menjadi 262.144 Kilobyte, yaitu sekitar 250 Mibibyte, atau lima kali nilai asli. Pod ini kurang bersumber daya, dan Penskala Otomatis Pod Vertikal mengoreksi perkiraan dengan nilai yang jauh lebih tepat.

  7. Untuk melihat rekomendasi yang diperbarui dari VPA, jalankan perintah kubectl describe untuk menjelaskan informasi sumber daya hamster-vpa.

    kubectl describe vpa/hamster-vpa
    

    Contoh output adalah cuplikan informasi tentang pemanfaatan sumber daya:

     State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

Mengatur permintaan Penskala Otomatis Pod

Autoscaling Pod Vertikal menggunakan VerticalPodAutoscaler objek untuk secara otomatis mengatur permintaan sumber daya pada pod ketika updateMode diatur ke Auto. Anda dapat menetapkan nilai yang berbeda tergantung pada kebutuhan dan pengujian Anda. Dalam contoh ini, updateMode diatur ke Recreate.

  1. Aktifkan VPA untuk kluster Anda dengan menjalankan perintah berikut. Ganti nama myAKSCluster kluster dengan nama kluster AKS Anda dan ganti myResourceGroup dengan nama grup sumber daya tempat kluster dihosting.

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
    
  2. Buat file bernama azure-autodeploy.yaml, dan salin dalam manifes berikut.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vpa-auto-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: vpa-auto-deployment
      template:
        metadata:
          labels:
            app: vpa-auto-deployment
        spec:
          containers:
          - name: mycontainer
            image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
            resources:
              requests:
                cpu: 100m
                memory: 50Mi
            command: ["/bin/sh"]
            args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
    

    Manifes ini menjelaskan penyebaran yang memiliki dua pod. Setiap pod memiliki satu kontainer yang meminta memori 100 miliCPU dan 50 MiB.

  3. Buat pod dengan perintah kubectl create , seperti yang ditunjukkan pada contoh berikut:

    kubectl create -f azure-autodeploy.yaml
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  4. Jalankan perintah kubectl get berikut untuk mendapatkan pod:

    kubectl get pods
    

    Output menyerupai contoh berikut yang menunjukkan nama dan status pod:

    NAME                                   READY   STATUS    RESTARTS   AGE
    vpa-auto-deployment-54465fb978-kchc5   1/1     Running   0          52s
    vpa-auto-deployment-54465fb978-nhtmj   1/1     Running   0          52s
    
  5. Buat file bernama azure-vpa-auto.yaml, dan salin dalam manifes berikut yang menjelaskan VerticalPodAutoscaler:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-auto
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       vpa-auto-deployment
      updatePolicy:
        updateMode: "Recreate"
    

    Nilai targetRef.name menentukan bahwa pod apa pun yang dikontrol oleh penyebaran bernama vpa-auto-deployment milik VerticalPodAutoscaler. Nilai updateModeRecreate berarti bahwa pengontrol Vertikal Pod Autoscaler dapat menghapus pod, menyesuaikan permintaan CPU dan memori, lalu membuat pod baru.

  6. Terapkan manifes ke kluster menggunakan perintah kubectl apply :

    kubectl create -f azure-vpa-auto.yaml
    
  7. Tunggu beberapa menit, dan lihat pod yang sedang berjalan lagi dengan menjalankan perintah kubectl get berikut:

    kubectl get pods
    

    Output menyerupai contoh berikut yang menunjukkan nama pod telah berubah dan status pod:

    NAME                                   READY   STATUS    RESTARTS   AGE
    vpa-auto-deployment-54465fb978-qbhc4   1/1     Running   0          2m49s
    vpa-auto-deployment-54465fb978-vbj68   1/1     Running   0          109s
    
  8. Dapatkan informasi terperinci tentang salah satu pod yang sedang berjalan dengan menggunakan perintah Kubectl get . Ganti podName dengan nama salah satu pod yang anda ambil pada langkah sebelumnya.

    kubectl get pod podName --output yaml
    

    Output menyerupai contoh berikut, menunjukkan bahwa pengontrol Penskala Otomatis Pod Vertikal telah meningkatkan permintaan memori menjadi 262144k dan permintaan CPU menjadi 25 miliCPU.

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        vpaObservedContainers: mycontainer
        vpaUpdates: 'Pod resources updated by vpa-auto: container 0: cpu request, memory
          request'
      creationTimestamp: "2022-09-29T16:44:37Z"
      generateName: vpa-auto-deployment-54465fb978-
      labels:
        app: vpa-auto-deployment
    
    spec:
      containers:
      - args:
        - -c
        - while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        command:
        - /bin/sh
        image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        imagePullPolicy: IfNotPresent
        name: mycontainer
        resources:
          requests:
            cpu: 25m
            memory: 262144k
    
  9. Untuk mendapatkan informasi terperinci tentang Penskala Otomatis Pod Vertikal dan rekomendasinya untuk CPU dan memori, gunakan perintah kubectl get :

    kubectl get vpa vpa-auto --output yaml
    

    Output menyerupai contoh berikut:

     recommendation:
      containerRecommendations:
      - containerName: mycontainer
        lowerBound:
          cpu: 25m
          memory: 262144k
        target:
          cpu: 25m
          memory: 262144k
        uncappedTarget:
          cpu: 25m
          memory: 262144k
        upperBound:
          cpu: 230m
          memory: 262144k
    

    Hasilnya menunjukkan target atribut menentukan bahwa agar kontainer berjalan secara optimal, tidak perlu mengubah CPU atau target memori. Hasil Anda dapat bervariasi di mana rekomendasi CPU dan memori target lebih tinggi.

    Autoscaler Pod Vertikal menggunakan lowerBound atribut dan upperBound untuk memutuskan apakah akan menghapus pod dan menggantinya dengan pod baru. Jika pod memiliki permintaan yang kurang dari batas bawah atau lebih besar dari batas atas, Penskala Otomatis Pod Vertikal menghapus pod dan menggantinya dengan pod yang memenuhi atribut target.

Pemberi Rekomendasi Tambahan untuk Autoscaler Pod Vertikal

Di VPA, salah satu komponen inti adalah Pemberi Rekomendasi. Ini memberikan rekomendasi untuk penggunaan sumber daya berdasarkan konsumsi sumber daya real time. AKS menyebarkan pemberi rekomendasi saat kluster mengaktifkan VPA. Anda dapat menyebarkan pemberi rekomendasi yang disesuaikan atau pemberi rekomendasi tambahan dengan gambar yang sama dengan yang default. Manfaat memiliki pemberi rekomendasi yang disesuaikan adalah Anda dapat menyesuaikan logika rekomendasi Anda. Dengan pemberi rekomendasi tambahan, Anda dapat mempartisi VPA ke beberapa pemberi rekomendasi jika ada banyak objek VPA.

Contoh berikut adalah pemberi rekomendasi tambahan yang Anda terapkan ke kluster AKS yang ada. Anda kemudian mengonfigurasi objek VPA untuk menggunakan pemberi rekomendasi tambahan.

  1. Buat file bernama extra_recommender.yaml dan salin dalam manifes berikut:

    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: extra-recommender 
      namespace: kube-system 
    spec: 
      replicas: 1 
      selector: 
        matchLabels: 
          app: extra-recommender 
      template: 
        metadata: 
          labels: 
            app: extra-recommender 
        spec: 
          serviceAccountName: vpa-recommender 
          securityContext: 
            runAsNonRoot: true 
            runAsUser: 65534 # nobody 
          containers: 
          - name: recommender 
            image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0 
            imagePullPolicy: Always 
            args: 
              - --recommender-name=extra-recommender 
            resources: 
              limits: 
                cpu: 200m 
                memory: 1000Mi 
              requests: 
                cpu: 50m 
                memory: 500Mi 
            ports: 
            - name: prometheus 
              containerPort: 8942 
    
  2. Sebarkan extra-recomender.yaml contoh Autoscaler Pod Vertikal menggunakan perintah kubectl apply dan tentukan nama manifes YAML Anda.

    kubectl apply -f extra-recommender.yaml 
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  3. Buat file bernama hamnster_extra_recommender.yaml dan salin dalam manifes berikut:

    apiVersion: "autoscaling.k8s.io/v1" 
    kind: VerticalPodAutoscaler 
    metadata: 
      name: hamster-vpa 
    spec: 
      recommenders:  
        - name: 'extra-recommender' 
      targetRef: 
        apiVersion: "apps/v1" 
        kind: Deployment 
        name: hamster 
      updatePolicy: 
        updateMode: "Auto" 
      resourcePolicy: 
        containerPolicies: 
          - containerName: '*' 
            minAllowed: 
              cpu: 100m 
              memory: 50Mi 
            maxAllowed: 
              cpu: 1 
              memory: 500Mi 
            controlledResources: ["cpu", "memory"] 
    --- 
    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: hamster 
    spec: 
      selector: 
        matchLabels: 
          app: hamster 
      replicas: 2 
      template: 
        metadata: 
          labels: 
            app: hamster 
        spec: 
          securityContext: 
            runAsNonRoot: true 
            runAsUser: 65534 # nobody 
          containers: 
            - name: hamster 
              image: k8s.gcr.io/ubuntu-slim:0.1 
              resources: 
                requests: 
                  cpu: 100m 
                  memory: 50Mi 
              command: ["/bin/sh"] 
              args: 
                - "-c" 
                - "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done" 
    

    Jika memory tidak ditentukan dalam controlledResources, Pemberi Rekomendasi tidak merespons peristiwa OOM. Dalam hal ini, Anda hanya mengatur CPU di controlledValues. controlledValues memungkinkan Anda untuk memilih apakah akan memperbarui permintaan sumber daya kontainer berdasarkan RequestsOnly opsi, atau permintaan dan batas sumber daya menggunakan RequestsAndLimits opsi . Nilai defaultnya adalah RequestsAndLimits. Jika Anda menggunakan opsi , RequestsAndLimitspermintaan dihitung berdasarkan penggunaan aktual, dan batasan dihitung berdasarkan rasio permintaan dan batas pod saat ini.

    Misalnya, jika Anda memulai dengan pod yang meminta 2 CPU dan membatasi 4 CPU, VPA selalu menetapkan batas menjadi dua kali lipat dari permintaan. Prinsip yang sama berlaku untuk memori. Saat Anda menggunakan mode ini RequestsAndLimits , mode ini dapat berfungsi sebagai cetak biru untuk permintaan dan batas sumber daya aplikasi awal Anda.

Anda dapat menyederhanakan objek VPA dengan menggunakan mode Otomatis dan rekomendasi komputasi untuk CPU dan Memori.

  1. Sebarkan hamster_extra-recomender.yaml contoh menggunakan perintah kubectl apply dan tentukan nama manifes YAML Anda.

    kubectl apply -f hamster_customized_recommender.yaml
    
  2. Tunggu hingga vpa-updater meluncurkan pod hamster baru, yang seharusnya memakan waktu beberapa menit. Anda dapat memantau pod menggunakan perintah kubectl get .

    kubectl get --watch pods -l app=hamster
    
  3. Ketika pod hamster baru dimulai, jelaskan pod yang menjalankan perintah kubectl describe dan lihat reservasi CPU dan memori yang diperbarui.

    kubectl describe pod hamster-<exampleID>
    

    Contoh output adalah cuplikan informasi yang menjelaskan pod:

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    
  4. Untuk melihat rekomendasi yang diperbarui dari VPA, jalankan perintah kubectl describe untuk menjelaskan informasi sumber daya hamster-vpa.

    kubectl describe vpa/hamster-vpa
    

    Contoh output adalah cuplikan informasi tentang pemanfaatan sumber daya:

    State:          Running
     Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    Spec:
      recommenders:
        Name: customized-recommender
    

Pemecahan Masalah

Untuk mendiagnosis masalah dengan penginstalan VPA, lakukan langkah-langkah berikut.

  1. Periksa apakah semua komponen sistem berjalan menggunakan perintah berikut:

    kubectl --namespace=kube-system get pods|grep vpa
    

Output harus mencantumkan tiga pod - pemberi rekomendasi, updater, dan admission-controller semuanya dengan status yang menunjukkan status Running.

  1. Konfirmasikan apakah komponen sistem mencatat kesalahan apa pun. Untuk setiap pod yang dikembalikan oleh perintah sebelumnya, jalankan perintah berikut:

    kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
    
  2. Konfirmasikan bahwa definisi sumber daya kustom dibuat dengan menjalankan perintah berikut:

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Langkah berikutnya

Artikel ini menunjukkan kepada Anda cara menskalakan pemanfaatan sumber daya secara otomatis, seperti CPU dan memori, node kluster agar sesuai dengan persyaratan aplikasi.

  • Anda juga dapat menggunakan autoscaler pod horizontal untuk menyesuaikan jumlah pod yang menjalankan aplikasi Anda secara otomatis. Untuk langkah-langkah menggunakan autoscaler pod horizontal, lihat Menskalakan aplikasi di AKS.

  • Lihat Vertical Pod Autoscaler [referensi API] untuk mempelajari selengkapnya tentang definisi untuk objek VPA terkait.