Linkerd 2.10: Tự động hóa triển khai Canary

Bằng cách kết hợp LinkerdFlagger, bạn có thể tự động triển khai canary dựa trên các chỉ số dịch vụ, giúp giảm thiểu rủi ro trong quá trình triển khai.

Cài đặt Flagger

Linkerd sẽ quản lý việc định tuyến lưu lượng, trong khi Flagger tự động tạo tài nguyên Kubernetes mới, theo dõi các chỉ số và dần dần chuyển lưu lượng đến phiên bản mới. Để cài đặt Flagger và cấu hình nó để hoạt động với Linkerd, hãy chạy:

kubectl apply -k github.com/fluxcd/flagger/kustomize/linkerd

Lệnh này sẽ thêm:

  • CRD (Custom Resource Definition) cho Canary để cấu hình cách triển khai.
  • RBAC (Role-Based Access Control) để cấp quyền cho Flagger thay đổi các tài nguyên cần thiết như deployment và service.
  • Controller được cấu hình để tương tác với mặt phẳng kiểm soát của Linkerd.

Để theo dõi quá trình cài đặt, bạn có thể sử dụng kubectl:

kubectl -n linkerd rollout status deploy/flagger

Thiết lập demo

Demo bao gồm ba thành phần: load generator, deployment, và frontend. Deployment sẽ tạo một pod trả về thông tin như tên. Bạn có thể sử dụng phản hồi để quan sát quá trình triển khai canary do Flagger điều khiển. Để thêm các thành phần này vào cụm và đưa chúng vào mặt phẳng dữ liệu của Linkerd, hãy chạy:

kubectl create ns test && \
  kubectl apply -f https://run.linkerd.io/flagger.yml

Để xác nhận rằng mọi thứ đã khởi động thành công, hãy chạy:

kubectl -n test rollout status deploy podinfo

Để kiểm tra frontend, hãy chuyển tiếp cổng dịch vụ frontend đến localhost:

kubectl -n test port-forward svc/frontend 8080

Ví dụ, để truy cập frontend, hãy mở trình duyệt và truy cập http://localhost:8080.

Cấu hình triển khai

Trước khi thực hiện bất kỳ thay đổi nào, bạn cần cấu hình cách triển khai nên được thực hiện trên cụm. Cấu hình này nằm trong định nghĩa Canary. Để áp dụng cấu hình này, hãy chạy:

cat <<EOF | kubectl apply -f -
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: podinfo
  namespace: test
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: podinfo
  service:
    port: 9898
  analysis:
    interval: 10s
    threshold: 5
    stepWeight: 10
    maxWeight: 100
    metrics:
    - name: request-success-rate
      thresholdRange:
        min: 99
      interval: 1m
    - name: request-duration
      thresholdRange:
        max: 500
      interval: 1m
EOF
</code>

Để theo dõi quá trình này, hãy chạy:

kubectl -n test get ev --watch

Bắt đầu triển khai

Trong ví dụ này, Flagger sẽ nhận thấy sự thay đổi trong spec của deployment và bắt đầu điều khiển triển khai canary. Để bắt đầu quá trình, hãy cập nhật image của deployment bằng lệnh sau:

kubectl -n test set image deployment/podinfo \
  podinfod=quay.io/stefanprodan/podinfo:1.7.1

Để theo dõi quá trình, hãy chạy:

kubectl -n test get ev --watch

Theo dõi tiến trình

Resource Canary sẽ cập nhật trạng thái và tiến trình, bạn có thể xem bằng lệnh:

watch kubectl -n test get canary

Để xem cách Flagger thay đổi lưu lượng giữa backend chính và backend canary, hãy chạy:

kubectl -n test get trafficsplit podinfo -o yaml

Theo dõi chỉ số

Để theo dõi các chỉ số trong CLI, hãy chạy:

watch linkerd viz -n test stat deploy --from deploy/load

Để xem trực quan hơn, hãy khởi động dashboard bằng lệnh:

linkerd viz dashboard

Truy cập qua trình duyệt

Truy cập http://localhost:8080 và làm mới trang để thấy sự thay đổi giữa các phiên bản.

Dọn dẹp

Để dọn dẹp, hãy xóa controller Flagger và namespace test bằng lệnh:

kubectl delete -k github.com/fluxcd/flagger/kustomize/linkerd && \
  kubectl delete ns test

Thẻ: Linkerd Flagger Kubernetes Canary Deployment Service Mesh

Đăng vào ngày 22 tháng 7 lúc 21:54