Chuyển tới nội dung chính

Cập nhật Load Balancer nhanh hơn cho Service nhiều port

Mỗi port của Service type: LoadBalancer tương ứng với một pool trên Load Balancer. Khi node trong cluster thay đổi (thêm node, bớt node, autoscale, nâng cấp node pool), danh sách backend của mọi pool phải được cập nhật lại.

Mặc định, các pool được cập nhật lần lượt từng pool một. Service càng nhiều port thì thời gian cập nhật càng dài. Khi bật annotation batch-update-strategy, backend của tất cả các pool được cập nhật cùng lúc trong một lần. Load Balancer chỉ áp dụng cấu hình mới một lần, nên thời gian để backend trên Load Balancer khớp với node mới giảm đáng kể với Service nhiều port.

Khi nào nên bật?​

Nên bật khi:

  • Service có nhiều port (từ vài port trở lên), và
  • Cluster thường xuyên thay đổi node (bật autoscaler, scale node pool, nâng cấp định kỳ).

Không cần bật khi Service chỉ có 1 port: không có khác biệt đáng kể.

Cách bật​

Thêm annotation với giá trị "true" vào Service:

apiVersion: v1
kind: Service
metadata:
name: web
annotations:
loadbalancer.fptcloud.com/batch-update-strategy: "true"
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8443

Hoặc bật trên Service đang chạy:

kubectl annotate service web loadbalancer.fptcloud.com/batch-update-strategy="true" --overwrite
ghi chú
  • Chỉ đúng chuỗi "true" (chữ thường) mới bật tính năng. Các giá trị như "True", "yes", "1" được coi là tắt.
  • Không cần tạo lại Service hay Load Balancer. Thay đổi có hiệu lực từ lần cập nhật kế tiếp của Load Balancer.
  • Bật hoặc tắt annotation không làm xóa hay tạo lại backend hiện có, không gây gián đoạn.

Cách tắt​

Gỡ annotation, hoặc đặt giá trị "false":

kubectl annotate service web loadbalancer.fptcloud.com/batch-update-strategy-

Service quay về cách cập nhật từng pool như mặc định.

Kiểm tra​

Xem event của Service:

kubectl describe service web

Khi mọi thứ bình thường, không có event cảnh báo liên quan. Các event có thể gặp:

Event (Warning)Ý nghĩaBạn cần làm gì
LoadBalancerBatchUpdateSkippedAnnotation bị bỏ qua, Service vẫn được cập nhật theo cách mặc định. Thường do Load Balancer đang được dùng chung bởi nhiều ServiceKhông bắt buộc. Tính năng chỉ áp dụng cho Load Balancer dùng riêng cho một Service
LoadBalancerBatchUpdateFallbackKhu vực (region) hoặc Load Balancer hiện chưa hỗ trợ cập nhật cùng lúc. Hệ thống tự chuyển sang cách cập nhật từng pool ngay trong lần đó và thử lại sauKhông cần làm gì. Backend vẫn được cập nhật bình thường
LoadBalancerBatchUpdateEmptyMembersKhông xác định được địa chỉ IP của node để làm backend. Hệ thống giữ nguyên backend hiện tại để tránh mất kết nối và tự thử lạiKiểm tra trạng thái node (kubectl get nodes -o wide). Nếu kéo dài, liên hệ hỗ trợ
LoadBalancerBatchUpdateFailedLoad Balancer gặp lỗi khi áp dụng cấu hình mới. Hệ thống tự thử lạiNếu event lặp lại liên tục, liên hệ hỗ trợ FPT Cloud kèm tên Service và namespace

Lưu ý​

  • Tính năng chỉ ảnh hưởng tới cách cập nhật backend của Load Balancer đã tồn tại. Cấu hình listener, health check, IP của Load Balancer không thay đổi.
  • Kết quả cuối cùng giống hệt cách cập nhật mặc định: cùng danh sách backend, cùng thuộc tính.
  • Service không gắn annotation hoạt động như trước, không bị ảnh hưởng.
  • Load Balancer dùng chung cho nhiều Service (annotation loadbalancer.fptcloud.com/load-balancer-id) không áp dụng tính năng này.
  • Tạo mới Service vốn đã tạo đầy đủ backend trong một lần, nên annotation chỉ có tác dụng từ các lần cập nhật sau.

Câu hỏi thường gặp​

Bật annotation có làm gián đoạn ứng dụng không? Không. Backend đang chạy được giữ nguyên, chỉ những node thay đổi mới được thêm hoặc gỡ.

Gõ sai giá trị annotation thì sao? Mọi giá trị khác "true" được coi là tắt. Service tiếp tục cập nhật theo cách mặc định, không có rủi ro mất backend.

Region của tôi chưa hỗ trợ thì sao? Hệ thống tự chuyển về cách mặc định, backend vẫn được cập nhật. Bạn có thể giữ annotation, khi region được hỗ trợ tính năng sẽ tự có hiệu lực.

Cần quyền gì để bật? Quyền update hoặc patch Service trong namespace, như khi sửa Service thông thường.