How We Upgrade Kubernetes on GKE
Bài tóm tắt Gojek 2020 3. Quy mô lớn Độ khó: Trung bình
Gojek · 2020 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Kubernetes ra một bản minor mỗi quý; team Engineering Platform của Gojek phải theo kịp trên nhiều cụm GKE.
- Cụm tạo bằng Terraform + GitOps: module tạo cụm trong repo riêng, plan và apply chạy trong CI.
Thay đổi chính (quy trình nâng cấp)
- Mặc định cụm regional: control plane có bản sao ở nhiều zone, nâng cấp master không làm mất api-server (theo tác giả, chưa thấy suy giảm nào khi master regional tự nâng cấp).
- Thứ tự: master trước, rồi node pool. Node chạy chậm hơn master được, khuyến nghị lệch tối đa 2 minor; thử đúng bộ phiên bản trên cụm staging trước. Đọc release note, changelog mỗi lần (thường có API bị xoá).
- Node pool: nâng từng zone; dùng surge upgrade (tạo node mới, đợi kubelet Ready, rồi drain và cordon node cũ); tắt autoscaling trong lúc nâng. Không nâng nhiều node pool cùng lúc được; không hạ phiên bản node pool được (chỉ tạo pool mới).
- Release channel (stable cho production) và maintenance window để giới hạn lúc GKE tự nâng.
- Bẫy: từ 1.14, traffic từ pod tới dải IP nội bộ không còn được NAT, có thể bị chặn nếu chưa whitelist dải pod; thêm
ip-masq-agent. - Tránh downtime cho service: replica ≥ số zone, pod anti-affinity theo zone; service 1 replica sẽ down khi node bị drain. PodDisruptionBudget có
minAvailablebằng số pod đang chạy sẽ chặn luôn việc nâng cấp. StatefulSet có thể phải chấp nhận down ngắn. - Đã tự động hoá: script xuất bảng trạng thái pod (replica, tuổi, pending/crashloop, CPU/RAM node) kèm team sở hữu tra từ service registry; CLI cho các bước nâng master, tắt/bật surge và autoscale, nâng node pool, đặt release channel. Bước sau: tự động hoá cả trình tự.
- Luân phiên người làm: mỗi tuần một người mới vào roster, người tuần trước dẫn việc nâng cấp và truyền bối cảnh; theo playbook, mỗi tuần ra thêm một cải tiến, automation hay tài liệu; có thời gian dev dành riêng trong sprint.
Vì sao
- Theo tác giả: managed Kubernetes cho nền ổn định để team tập trung xây nền tảng; tự vận hành cụm (đã từng làm) cần người chuyên giữ cụm.
- Việc nâng cấp nhàm nhưng không tránh được; làm đều theo playbook trước, rồi tự động hoá dần những gì lặp lại.
Bài học cho SWE
- Nâng cấp nền tảng là việc định kỳ; làm thành quy trình có playbook, luân phiên người, rồi tự động hoá (Tự động hoá vận hành và auto-remediation).
- Mặc định của nền tảng (replica tối thiểu 3, anti-affinity) quyết định nâng cấp có làm down service không (Nền tảng nội bộ cho service (đường ray chung)).
- PDB vừa bảo vệ vừa có thể chặn mọi bảo trì nếu đặt sai (Deploy và release an toàn).
Liên quan
Tự động hoá vận hành và auto-remediationDeploy và release an toànNền tảng nội bộ cho service (đường ray chung)
#Kubernetes#GKE#Upgrade#Regional cluster#Surge upgrade#PodDisruptionBudget#Terraform#Playbook#Rotation
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (2)