Bagikan melalui


Gunakan Autoscaler Pod Vertikal di Azure Kubernetes Service (AKS)

Artikel ini menunjukkan cara menggunakan Vertical Pod Autoscaler (VPA) pada kluster Azure Kubernetes Service (AKS). VPA secara otomatis menyesuaikan permintaan CPU dan memori untuk pod Anda agar sesuai dengan pola penggunaan beban kerja Anda. Fitur ini membantu mengoptimalkan performa aplikasi Anda dan mengurangi biaya menjalankan beban kerja Anda di AKS.

Untuk informasi selengkapnya, lihat gambaran umum Penskala Otomatis Pod Vertikal.

Sebelum Anda mulai

  • Jika Anda memiliki kluster AKS yang ada, pastikan kluster tersebut menjalankan Kubernetes versi 1.24 atau yang lebih tinggi.

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

  • Jika mengaktifkan VPA pada kluster yang ada, pastikan kubectl diinstal dan dikonfigurasi untuk terhubung ke kluster AKS Anda menggunakan az aks get-credentials perintah .

    az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
    

Menyebarkan Autoscaler Pod Vertikal pada kluster baru

  • Buat kluster AKS baru dengan VPA diaktifkan menggunakan az aks create perintah dengan --enable-vpa bendera .

    az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
    

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

Perbarui kluster yang ada untuk menggunakan Penskala Otomatis Pod Vertikal

  • Perbarui kluster yang ada untuk menggunakan VPA menggunakan az aks update perintah dengan --enable-vpa bendera .

    az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa 
    

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

Nonaktifkan Autoscaler Pod Vertikal pada kluster yang ada

  • Nonaktifkan VPA pada kluster yang ada menggunakan az aks update perintah dengan --disable-vpa bendera .

    az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
    

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

Menguji penginstalan Autoscaler Pod Vertikal

Dalam contoh berikut, kami membuat penyebaran dengan dua pod, masing-masing menjalankan satu kontainer yang meminta 100 millicore dan mencoba menggunakan sedikit di atas 500 miliore. Kami juga membuat konfigurasi VPA yang menunjuk pada penyebaran. VPA mengamati perilaku pod, dan setelah sekitar lima menit, memperbarui pod untuk meminta 500 millicore.

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

    apiVersion: "autoscaling.k8s.io/v1"
    kind: VerticalPodAutoscaler
    metadata:
      name: hamster-vpa
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind: Deployment
        name: hamster
      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
          containers:
            - name: hamster
              image: registry.k8s.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"
    
  2. Sebarkan hamster.yaml contoh Autoscaler Pod Vertikal menggunakan kubectl apply perintah .

    kubectl apply -f hamster.yaml
    

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

  3. Lihat pod yang sedang berjalan menggunakan kubectl get perintah .

    kubectl get pods -l app=hamster
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    hamster-78f9dcdd4c-hf7gk   1/1     Running   0          24s
    hamster-78f9dcdd4c-j9mc7   1/1     Running   0          24s
    
  4. Lihat reservasi CPU dan Memori pada salah satu pod menggunakan kubectl describe perintah . Pastikan Anda mengganti <example-pod> dengan salah satu ID pod yang dikembalikan dalam output Anda dari langkah sebelumnya.

    kubectl describe pod hamster-<example-pod>
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

     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 milikpu 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 lebih sedikit memori 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. Pantau pod menggunakan kubectl get perintah .

    kubectl get --watch pods -l app=hamster
    
  6. Ketika pod hamster baru dimulai, Anda dapat melihat reservasi CPU dan Memori yang diperbarui menggunakan kubectl describe perintah . Pastikan Anda mengganti <example-pod> dengan salah satu ID pod yang dikembalikan dalam output Anda dari langkah sebelumnya.

    kubectl describe pod hamster-<example-pod>
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    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. Lihat rekomendasi yang diperbarui dari VPA menggunakan kubectl describe perintah untuk menjelaskan informasi sumber daya hamster-vpa.

    kubectl describe vpa/hamster-vpa
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

     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 Vertikal

Objek VerticalPodAutoscaler secara otomatis mengatur permintaan sumber daya pada pod dengan updateMode dari Auto. Anda dapat menetapkan nilai yang berbeda tergantung pada kebutuhan dan pengujian Anda. Dalam contoh ini, kami membuat dan menguji manifes penyebaran dengan dua pod, masing-masing menjalankan kontainer yang meminta 100 miliCPU dan 50 MiB Memori, dan mengatur updateMode ke Recreate.

  1. 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"]
    
  2. Buat pod menggunakan kubectl create perintah .

    kubectl create -f azure-autodeploy.yaml
    

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

  3. Lihat pod yang sedang berjalan menggunakan kubectl get perintah .

    kubectl get pods
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    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
    
  4. Buat file bernama azure-vpa-auto.yaml dan salin dalam manifes berikut:

    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 setiap pod yang dikontrol oleh penyebaran bernama vpa-auto-deployment milik VerticalPodAutoscaler. Nilai updateMode Recreate berarti bahwa pengontrol Vertikal Pod Autoscaler dapat menghapus pod, menyesuaikan permintaan CPU dan Memori, lalu membuat pod baru.

  5. Terapkan manifes ke kluster menggunakan kubectl apply perintah .

    kubectl create -f azure-vpa-auto.yaml
    
  6. Tunggu beberapa menit lalu lihat pod yang sedang berjalan menggunakan kubectl get perintah .

    kubectl get pods
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    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
    
  7. Dapatkan informasi terperinci tentang salah satu pod yang sedang berjalan menggunakan kubectl get perintah . Pastikan Anda mengganti <pod-name> dengan nama salah satu pod dari output sebelumnya.

    kubectl get pod <pod-name> --output yaml
    

    Output Anda akan terlihat mirip dengan contoh output berikut, yang menunjukkan bahwa pengontrol VPA 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
    
  8. Dapatkan informasi terperinci tentang Autoscaler Pod Vertikal dan rekomendasinya untuk CPU dan Memori menggunakan kubectl get perintah .

    kubectl get vpa vpa-auto --output yaml
    

    Output Anda akan terlihat mirip dengan contoh output 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
    

    Dalam contoh ini, hasil dalam target atribut menentukan bahwa tidak perlu mengubah CPU atau target Memori agar kontainer berjalan optimal. Namun, hasilnya dapat bervariasi tergantung pada aplikasi dan pemanfaatan sumber dayanya.

    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

Pemberi Rekomendasi 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 dikustomisasi 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 VPU untuk menggunakan Pemberi Rekomendasi yang berbeda.

Dalam contoh berikut, kami membuat Pemberi Rekomendasi tambahan, berlaku untuk clust AKS yang ada, dan 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
          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 kubectl apply perintah .

    kubectl apply -f extra-recommender.yaml 
    

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

  3. Buat file bernama hamster-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 contoh ini, kami hanya mengatur CPU di controlledValues. controlledValues memungkinkan Anda untuk memilih apakah akan memperbarui permintaan sumber daya kontainer menggunakanRequestsOnly opsi , atau dengan permintaan sumber daya dan batas menggunakan RequestsAndLimits opsi . Nilai defaultnya adalah RequestsAndLimits. Jika Anda menggunakan opsi , RequestsAndLimits permintaan 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 menggunakan Auto mode dan rekomendasi komputasi untuk CPU dan Memori.

  4. Sebarkan hamster-extra-recomender.yaml contoh menggunakan kubectl apply perintah .

    kubectl apply -f hamster-extra-recommender.yaml
    
  5. Pantau pod Anda menggunakan [kubectl getperintah ]kubectl-get .

    kubectl get --watch pods -l app=hamster
    
  6. Saat pod hamster baru dimulai, lihat reservasi CPU dan Memori yang diperbarui menggunakan kubectl describe perintah . Pastikan Anda mengganti <example-pod> dengan salah satu ID pod Anda.

    kubectl describe pod hamster-<example-pod>
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    
  7. Lihat rekomendasi yang diperbarui dari VPA menggunakan kubectl describe perintah .

    kubectl describe vpa/hamster-vpa
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    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
    

Memecahkan masalah Autoscaler Pod Vertikal

Jika Anda mengalami masalah dengan Penskala Otomatis Pod Vertikal, Anda dapat memecahkan masalah komponen sistem dan definisi sumber daya kustom untuk mengidentifikasi masalah.

  1. Verifikasi bahwa semua komponen sistem berjalan menggunakan perintah berikut:

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

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

  2. Untuk setiap pod yang dikembalikan dalam output Anda sebelumnya, verifikasi bahwa komponen sistem mencatat kesalahan apa pun menggunakan perintah berikut:

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

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Langkah berikutnya

Untuk mempelajari selengkapnya tentang objek VPA, lihat referensi VERTICAL Pod Autoscaler API.