Bằng cách kết hợp Linkerd và Flagger, 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
Flaggerthay đổ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