Tuyển dụng
Viettel IDC

Topology Spread Constraints là gì? Cơ chế phân tán Pod trong Kubernetes

03/08/2026

Khi ứng dụng được triển khai trên nhiều node hoặc Availability Zone, các Pod có thể tập trung vào cùng một miền lỗi và làm tăng nguy cơ gián đoạn. Kubernetes cần một cơ chế kiểm soát mức độ phân tán workload để duy trì tính sẵn sàng khi hạ tầng gặp lỗi hoặc số lượng replica thay đổi. Cùng Viettel IDC tìm hiểu Topology Spread Constraints là gì và cách cơ chế này phân bổ Pod trong Kubernetes.

Topology Spread Constraints là gì?

Topology Spread Constraints là cơ chế lập lịch trong Kubernetes, cho phép kiểm soát cách các Pod được phân bổ giữa nhiều miền topology như node, Availability Zone, region hoặc miền do người dùng tự định nghĩa. Cơ chế này giúp hạn chế tình trạng nhiều Pod cùng tập trung trong một miền lỗi, từ đó nâng cao tính sẵn sàng và khả năng chịu lỗi của workload.

Ví dụ, một cluster có ba node và Deployment gồm ba replica. Thay vì để cả ba Pod cùng chạy trên một node, Topology Spread Constraints trong Kubernetes có thể được thiết lập để mỗi Pod nằm trên một node khác nhau hoặc được phân chia tương đối đồng đều giữa các node.

Topology Spread Constraints là gì?

Cách hoạt động của Topology Spread Constraints trong Kubernetes

Cơ chế của Topology Spread Constraints dựa trên nhãn của node, nhóm Pod cần theo dõi và mức chênh lệch được cho phép giữa các topology domain. Khi một Pod mới cần được triển khai, kube-scheduler sẽ đánh giá trạng thái hiện tại của cluster trước khi lựa chọn vị trí phù hợp.

Trước tiên, topologyKey xác định phạm vi cần phân tán. Những node có cùng giá trị nhãn được xem là thuộc một domain. Tiếp theo, labelSelector giúp Scheduler nhận diện các Pod thuộc cùng nhóm cần tính toán. Hệ thống sẽ đếm số lượng bản sao phù hợp trong từng domain, xác định nơi đang có ít nhất và so sánh độ lệch với maxSkew.

Cách hoạt động của Topology Spread Constraints trong Kubernetes

Ví dụ, ba zone đang có số replica lần lượt là 2–2–1. Với maxSkew: 1, Pod mới nên được đưa vào zone chỉ có một replica để tạo tỷ lệ 2–2–2. Nếu đặt vào zone đang có hai bản sao, độ lệch sẽ vượt giới hạn.

Cách xử lý tiếp theo phụ thuộc vào whenUnsatisfiable. DoNotSchedule giữ Pod ở trạng thái Pending khi không còn vị trí phù hợp, còn ScheduleAnyway vẫn cho phép lập lịch nhưng ưu tiên domain giúp giảm độ chênh lệch.

Quá trình diễn ra theo trình tự:

- Xác định node có nhãn phù hợp với topologyKey.

- Lọc nhóm Pod bằng labelSelector.

- Đếm số replica trong từng topology domain.

- Tính độ lệch và so sánh với maxSkew.

- Lựa chọn node theo whenUnsatisfiable.

Khi Pod khai báo nhiều ràng buộc, kube-scheduler kết hợp chúng theo logic AND. Node được chọn phải đồng thời đáp ứng toàn bộ điều kiện đã thiết lập.

Vì sao Kubernetes cần Topology Spread Constraints?

Số lượng replica lớn chưa chắc giúp ứng dụng chịu lỗi tốt hơn nếu các bản sao vẫn tập trung trong cùng một miền hạ tầng. Topology Spread Constraints cho phép Kubernetes kiểm soát vị trí triển khai, hạn chế điểm lỗi tập trung và duy trì trạng thái ổn định khi hệ thống mở rộng.

Hạn chế nhiều Pod tập trung trên một node

Kubernetes Scheduler thường chọn node dựa trên tài nguyên còn trống và các điều kiện lập lịch đã thiết lập. Khi không có ràng buộc về topology, nhiều replica của cùng một ứng dụng dễ được đưa lên một máy chủ nếu CPU và bộ nhớ vẫn đáp ứng.

Ví dụ, một Deployment gồm bốn replica chạy trên cluster có bốn node, nhưng ba bản sao cùng nằm tại node-1. Nếu máy chủ này ngừng hoạt động, phần lớn năng lực phục vụ của ứng dụng sẽ mất đi cùng lúc. Hệ thống dễ rơi vào trạng thái quá tải trong thời gian Kubernetes khởi tạo các replica thay thế.

Khi sử dụng kubernetes.io/hostname làm topologyKey, Scheduler ưu tiên những node đang chứa ít bản sao hơn. Cách bố trí này giúp ứng dụng tránh phụ thuộc quá nhiều vào một điểm hạ tầng duy nhất.

Phân tán workload giữa các Availability Zone

Tách các replica sang nhiều node vẫn chưa đủ nếu toàn bộ máy chủ cùng thuộc một Availability Zone. Lỗi mạng, mất điện hoặc gián đoạn tại khu vực đó vẫn ảnh hưởng đến toàn bộ dịch vụ.

Giả sử một ứng dụng có sáu replica chạy trên ba node nhưng tất cả đều nằm trong zone-a. Khi cluster mở rộng sang zone-b và zone-c, Pod Topology Spread Constraints cho phép chia các bản sao theo tỷ lệ hai replica tại mỗi khu vực thông qua nhãn topology.kubernetes.io/zone.

Mô hình đa zone còn phù hợp với hệ thống phục vụ người dùng tại nhiều khu vực. Lưu lượng được định tuyến đến instance gần nguồn truy cập hơn sẽ góp phần giảm độ trễ, đồng thời hạn chế chi phí truyền dữ liệu giữa các Availability Zone.

Duy trì phân bố cân bằng khi scale

Số lượng replica thường thay đổi theo lưu lượng thực tế, đặc biệt khi ứng dụng sử dụng Horizontal Pod Autoscaler. Nếu thiếu quy tắc kiểm soát, các bản sao mới dễ tiếp tục được đặt vào miền đang chứa nhiều instance, làm độ chênh lệch ngày càng lớn.

Ví dụ, một ứng dụng ban đầu có ba replica và được chia đều như sau:

Availability Zone

Số replica

zone-a

1

zone-b

1

zone-c

1

Khi mở rộng lên sáu replica, trạng thái hợp lý là mỗi khu vực có hai bản sao. Với maxSkew: 1, Scheduler ưu tiên miền đang có số lượng thấp hơn để giữ độ lệch trong giới hạn cho phép.

Cần lưu ý rằng ràng buộc này chủ yếu tác động tại thời điểm lập lịch replica mới. Sau khi Deployment scale down, các bản sao còn lại dễ rơi vào trạng thái mất cân bằng. Khi đó, quản trị viên cần dùng Descheduler hoặc chủ động sắp xếp lại workload.

Cải thiện khả năng sử dụng tài nguyên

Topology Spread Constraints không trực tiếp chia đều CPU hoặc RAM, nhưng góp phần hạn chế tình trạng một nhóm node phải xử lý phần lớn tải trong khi các máy chủ còn lại chưa được khai thác hiệu quả.

Chẳng hạn, ba node có cấu hình tương đương nhưng bốn trong năm replica đều chạy trên node-1. Máy chủ này nhanh chóng tiến gần giới hạn tài nguyên, trong khi node-2 và node-3 vẫn còn nhiều năng lực trống. Cách bố trí theo tỷ lệ 2–2–1 tạo ra mức sử dụng hợp lý hơn và tăng dư địa tiếp nhận lưu lượng.

Vì sao Kubernetes cần Topology Spread Constraints?

Các thành phần trong topologySpreadConstraints

Trường topologySpreadConstraints gồm nhiều tham số giúp kube-scheduler xác định phạm vi phân tán, nhóm Pod cần tính toán, mức chênh lệch cho phép và cách xử lý khi không thể đáp ứng ràng buộc. Trong đó, maxSkew, topologyKey, whenUnsatisfiable và labelSelector là các thành phần cốt lõi; những trường còn lại hỗ trợ kiểm soát sâu hơn trong các kịch bản phức tạp.

Thành phần

Vai trò

maxSkew

Quy định mức chênh lệch tối đa về số Pod giữa các topology domain

minDomains

Xác định số lượng domain đủ điều kiện tối thiểu khi tính độ lệch

topologyKey

Chỉ định node label dùng để chia hạ tầng thành các topology domain

whenUnsatisfiable

Quy định giữ Pod ở trạng thái Pending hoặc vẫn tiếp tục lập lịch

labelSelector

Xác định nhóm Pod được đưa vào phép tính phân tán

matchLabelKeys

Bổ sung giá trị label của Pod mới vào điều kiện lựa chọn

nodeAffinityPolicy

Quy định cách tính các node chịu ảnh hưởng bởi Node Affinity hoặc Node Selector

nodeTaintsPolicy

Quy định cách xử lý node taint trong quá trình tính skew

So sánh Pod Topology Spread và Pod Anti-Affinity

Pod Topology Spread vs Pod Anti-Affinity đều hỗ trợ kiểm soát vị trí triển khai của các Pod trong cluster, nhưng mục tiêu và cách vận hành có nhiều khác biệt. Pod Topology Spread hướng đến duy trì mức phân bố hợp lý giữa các miền topology, còn Pod Anti-Affinity tập trung ngăn những Pod nhất định nằm trong cùng một domain.

Tiêu chí

Topology Spread Constraints

Pod Anti-Affinity

Mục tiêu

Kiểm soát mức độ phân bố Pod

Tránh đặt các Pod nhất định gần nhau

Cách hoạt động

Dựa trên số lượng Pod và độ lệch

Dựa trên quan hệ khớp hoặc không khớp

Mức kiểm soát

Linh hoạt qua maxSkew

Thường mang tính tách biệt cứng hoặc ưu tiên

Khả năng scale

Phù hợp workload có nhiều replica

Có thể phức tạp khi số replica tăng

Trường hợp phù hợp

Cân bằng Pod giữa node hoặc zone

Ngăn các Pod cụ thể nằm cùng domain

Hướng dẫn cấu hình Topology Spread Constraints

Để minh họa rõ cách thiết lập ràng buộc phân tán, ví dụ dưới đây sử dụng một cluster gồm sáu node trải trên ba Availability Zone. Deployment có bảy replica và yêu cầu số Pod giữa các zone không chênh lệch quá một.

Bước 1: Xác định topology domain trong cluster

Giả sử hạ tầng được chia như sau:

+----------------+----------------+----------------+
|     zone-a     |     zone-b     |     zone-c     |
+--------+-------+--------+-------+--------+-------+
| node-1 | node-2| node-3 | node-4| node-5 | node-6|
+--------+-------+--------+-------+--------+-------+

Mỗi node cần có nhãn topology.kubernetes.io/zone tương ứng. Quản trị viên kiểm tra nhanh bằng lệnh:

kubectl get nodes -L topology.kubernetes.io/zone

Ví dụ kết quả:

NAME     STATUS   ZONE
node-1   Ready    zone-a
node-2   Ready    zone-a
node-3   Ready    zone-b
node-4   Ready    zone-b
node-5   Ready    zone-c
node-6   Ready    zone-c

Các node thiếu nhãn trên sẽ không được đưa vào phạm vi tính toán của constraint.

Bước 2: Khai báo topologySpreadConstraints trong Deployment

Giả sử bảy replica hiện được phân phối theo tỷ lệ 3–2–2 giữa ba zone. Manifest dưới đây giữ mức chênh lệch tối đa ở một Pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 7
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: DoNotSchedule
          labelSelector:
            matchLabels:
              app: web
      containers:
        - name: web
          image: nginx:1.27

Trong cấu hình trên, topology.kubernetes.io/zone chia cluster thành ba miền độc lập. maxSkew: 1 cho phép số Pod giữa zone nhiều nhất và zone ít nhất lệch tối đa một, còn DoNotSchedule ngăn lập lịch nếu không tìm được vị trí phù hợp.

Khi Deployment tăng lên tám replica, Scheduler sẽ ưu tiên zone-b hoặc zone-c thay vì tiếp tục đưa Pod vào zone-a. Kết quả hợp lý là 3–3–2 hoặc 3–2–3, đều nằm trong giới hạn đã đặt.

Bước 3: Triển khai và kiểm tra kết quả

Lưu manifest thành web-deployment.yaml, sau đó áp dụng:

kubectl apply -f web-deployment.yaml

Kiểm tra vị trí của từng Pod:

kubectl get pods -o wide

Nếu cluster đã gắn nhãn chính xác và còn đủ tài nguyên, các replica sẽ được trải tương đối đồng đều giữa ba Availability Zone. Khi một Pod ở trạng thái Pending, dùng lệnh sau để xem nguyên nhân:

kubectl describe pod <pod-name>

Các lỗi thường gặp gồm node thiếu topologyKey, labelSelector không khớp nhãn của Pod, tài nguyên không đủ hoặc nhiều constraint cùng áp dụng nhưng không có node nào thỏa toàn bộ điều kiện.

Muốn phân tán theo từng node thay vì theo zone, đổi giá trị:

topologyKey: kubernetes.io/hostname

Khi đó, mỗi node trở thành một topology domain riêng và kube-scheduler sẽ tính mức chênh lệch ở cấp máy chủ.

Kết luận

Topology Spread Constraints là gì có thể hiểu là cơ chế giúp Kubernetes kiểm soát mức độ phân tán Pod giữa các node, Availability Zone hoặc miền topology khác. Khi lựa chọn đúng, doanh nghiệp sẽ hạn chế điểm lỗi tập trung, duy trì tính sẵn sàng và mở rộng workload ổn định hơn.

Viettel Dedicated Kubernetes Service (vDKS) cung cấp nền tảng Kubernetes được triển khai trên hạ tầng Viettel IDC, hỗ trợ doanh nghiệp xây dựng, quản lý và mở rộng ứng dụng container theo nhu cầu thực tế. Dịch vụ giúp rút ngắn quá trình khởi tạo cluster, giảm áp lực vận hành hạ tầng và tạo nền tảng thuận lợi để áp dụng các cơ chế lập lịch như Topology Spread Constraints.

Tham khảo chi tiết tại: https://viettelidc.com.vn/viettel-kubernetes-service

Để được hỗ trợ tư vấn và tìm hiểu các dịch vụ của Viettel, bạn có thể liên hệ trực tiếp tới Viettel IDC qua các kênh:

- Hotline: 1800 8088 (miễn phí cước gọi)

- Fanpage: https://www.facebook.com/viettelidc  

Bình luận ()

Đăng nhập | Đăng ký
để gửi bình luận
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Ý kiến của bạn sẽ được xét duyệt trước khi đăng.
Xem thêm bình luận

Tin liên quan

28/09/2026

Trigger là gì trong DBMS? Cách hoạt động, các loại phổ biến và ứng dụng

Trigger là gì trong DBMS? Tìm hiểu cách trigger hoạt động, các loại phổ biến, ví dụ minh họa, ưu nhược điểm và khi nào nên sử dụng.

28/09/2026

Figma là gì? Nền tảng thiết kế và cộng tác trực tuyến

Figma là gì, có những tính năng nổi bật nào? Tìm hiểu Vector Network, Auto Layout, Dev Mode và vị thế hiện tại của Figma trong ngành thiết kế.

28/09/2026

Camera Cloud cần tốc độ mạng bao nhiêu? Cách tính băng thông cần thiết

Camera Cloud cần tốc độ mạng bao nhiêu? Tìm hiểu mức băng thông cần thiết, cách tính upload và các yếu tố ảnh hưởng đến tốc độ khi sử dụng Camera Cloud.

28/09/2026

Camera Cloud có bị hack không? Nguyên nhân và cách bảo mật

Camera Cloud có bị hack không? Tìm hiểu các rủi ro bảo mật, nguyên nhân bị xâm nhập và cách bảo vệ camera, tài khoản cùng dữ liệu hiệu quả.

28/09/2026

Viettel IDC: Nhà cung cấp VMware Sovereign Cloud duy nhất tại Đông Nam Á

Tại VMware Explore 2026 ở Las Vegas, Broadcom đã giới thiệu nhóm 57 nhà cung cấp dịch vụ đám mây chủ quyền trên nền tảng VMware Cloud Foundation. Viettel IDC là đơn vị duy nhất tại Đông Nam Á có tên trong danh sách này, đánh dấu bước tiến mới của doanh nghiệp Việt Nam trên thị trường hạ tầng cloud khu vực.

25/09/2026

Ghidra là gì? Chức năng và ứng dụng trong reverse engineering

Ghidra là gì? Tìm hiểu công cụ reverse engineering mã nguồn mở của NSA, các chức năng chính, ứng dụng thực tế và điểm khác biệt với IDA Pro.

25/09/2026

10 công cụ tối ưu hóa website theo từng mục tiêu

Tổng hợp 10 công cụ tối ưu hóa web cho tốc độ, SEO, trải nghiệm người dùng và chuyển đổi, kèm bảng so sánh và gợi ý lựa chọn theo nhu cầu.

25/09/2026

So sánh WHOIS và DNS Lookup: Điểm khác nhau và khi nào nên sử dụng

WHOIS và DNS Lookup khác nhau thế nào? Tìm hiểu định nghĩa, bảng so sánh, vai trò của RDAP thay thế WHOIS, và khi nào nên dùng công cụ nào.

25/09/2026

Cách test tải hệ thống: Quy trình và công cụ phổ biến

Cách test tải hệ thống hiệu quả gồm những bước nào? Tìm hiểu quy trình, chỉ số cần đo và công cụ phổ biến như JMeter, k6.

16/01/2025

Cloud Monitoring là gì? So sánh Hybrid Cloud và Multi Cloud Monitoring

Cloud Monitoring là quá trình theo dõi, quản lý và đánh giá hiệu suất của các tài nguyên và dịch vụ đám mây, bao gồm giám sát máy chủ, cơ sở dữ liệu, ứng dụng và hệ thống mạng