全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan readiness gates untuk memperbarui pod secara mulus

更新时间:Jul 02, 2025

Saat menggunakan Layanan LoadBalancer untuk mengekspos pod backend, kecepatan pembaruan bergulir pod mungkin lebih cepat daripada kecepatan pemasangan grup server backend dari load balancer. Hal ini dapat menyebabkan gangguan akses ke pod. Anda dapat mengonfigurasi readiness gates untuk memastikan pembaruan pod berjalan dengan lancar. Topik ini menjelaskan cara menggunakan readiness gates untuk mencapai pembaruan pod yang mulus.

Prasyarat

Catatan penggunaan

Jika Anda menggunakan Layanan LoadBalancer untuk mengekspos pod backend, layanan tersebut mungkin mengalami gangguan selama pembaruan bergulir pod.

  • Penyebab

    Selama pembaruan bergulir pod, kecepatan startup pod baru mungkin lebih cepat daripada kecepatan pembaruan pod backend melalui Layanan LoadBalancer. Lalu lintas permintaan diarahkan ke pod yang sedang dihapus, sehingga menyebabkan kegagalan akses sementara.

  • Solusi

    Anda dapat mengonfigurasi readiness gates dalam file YAML pod untuk mengontrol status pod menggunakan kondisi kustom. Readiness gates memungkinkan Anda menentukan kondisi kustom, seperti kondisi kustom service.readiness.alibabacloud.com/<Service Name> yang terkait dengan Layanan LoadBalancer. Ketika semua kondisi yang ditentukan dalam readiness gates terpenuhi, status pod berubah menjadi Ready dan lalu lintas diteruskan ke pod. Jika beberapa load balancer dipasang pada pod, Anda dapat mengonfigurasi beberapa readiness gates untuk pod tersebut.

  • Prosedur

Langkah 1: Buat instance CLB atau NLB

  1. Buat file bernama my-svc.yaml untuk membuat instance Classic Load Balancer (CLB) atau Network Load Balancer (NLB) berdasarkan template YAML berikut.

    CLB

    apiVersion: v1
    kind: Service
    metadata:
      name: my-svc
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: nginx
      type: LoadBalancer

    NLB

    apiVersion: v1
    kind: Service
    metadata:
      name: my-svc
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # Contoh: cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321.
    spec:
      loadBalancerClass: alibabacloud.com/nlb # Atur ke NLB.
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: nginx
      type: LoadBalancer
  2. Jalankan perintah berikut untuk membuat Layanan uji:

    kubectl apply -f my-svc.yaml
  3. Jalankan perintah berikut untuk memeriksa status Layanan uji:

    kubectl get service my-svc

    Setelah <alamat IP> muncul, instance CLB atau NLB yang sesuai telah dibuat.

    NAME     TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
    my-svc   LoadBalancer   192.XX.XX.215   <alamat IP>     80:30493/TCP   8s

Langkah 2: Buat Deployment uji

  1. Gunakan template YAML berikut untuk membuat file bernama my-nginx.yaml, dan atur parameter conditionType dari readiness gate menjadi service.readiness.alibabacloud.com/my-svc.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx    # Nama Deployment.
      labels:
        app: nginx
    spec:
      replicas: 2       # Jumlah replika pod.
      selector:
        matchLabels:
          app: nginx     # Anda harus menentukan nilai yang sama dalam pemilih Layanan yang digunakan untuk mengekspos Deployment.
      template:
        metadata:
          labels:
            app: nginx
        spec:
          readinessGates:
          - conditionType: service.readiness.alibabacloud.com/my-svc # Konfigurasikan readiness gates untuk Layanan bernama my-svc.
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80                                # Port yang ingin Anda ekspos dalam Layanan.
  2. Jalankan perintah berikut untuk menyebarkan Deployment uji:

    kubectl apply -f my-nginx.yaml
  3. Jalankan perintah berikut untuk memeriksa status pod dan readiness gates:

    kubectl get pod -owide -l app=nginx

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE   IP               NODE                         NOMINATED NODE   READINESS GATES
    my-nginx-d9f95dcf9-8dhwj   1/1     Running   0          14s   172.XX.XXX.188   cn-hangzhou.172.XX.XXX.174   <none>           0/1
    my-nginx-d9f95dcf9-z9hjm   1/1     Running   0          14s   172.XX.XXX.182   cn-hangzhou.172.XX.XXX.174   <none>           0/1

    Setelah menjalankan perintah beberapa kali, status readiness gates pod berubah dari 0 menjadi 1. Ini menunjukkan bahwa pod telah dipasang ke grup server instance CLB atau NLB.

Langkah 3: Lakukan pembaruan bergulir pada pod

  1. Jalankan perintah berikut untuk menerapkan ulang pod uji:

    kubectl rollout restart deployment my-nginx

    Output yang diharapkan:

    deployment.apps/my-nginx restarted
  2. Jalankan perintah berikut untuk memeriksa status pod dan readiness gates:

    kubectl get pod -owide -l app=nginx

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE    IP               NODE                         NOMINATED NODE   READINESS GATES
    my-nginx-d9f95dcf9-8dhwj   1/1     Running   0          113s   172.XX.XXX.188   cn-hangzhou.172.XX.XXX.174   <none>           1/1
    my-nginx-df5c9cf7d-6p5jc   1/1     Running   0          6s     172.XX.XXX.182   cn-hangzhou.172.XX.XXX.174   <none>           0/1
    my-nginx-df5c9cf7d-7dh2v   1/1     Running   0          15s    172.XX.XXX.189   cn-hangzhou.172.XX.XXX.174   <none>           1/1

    Ketika perintah dijalankan beberapa kali, pod menunggu status readiness gates berubah dari 0 menjadi 1 selama proses pembaruan bergulir. Setelah status readiness gates berubah menjadi 1, pod dipasang ke grup server instance CLB atau NLB, dan pembaruan bergulir dilanjutkan.