Daemonset là gì? Cách hoạt động và sử dụng Daemonset cơ bản

Đã kiểm duyệt nội dung
Đánh giá
DaemonSet là giải pháp thực tế để đảm bảo mỗi node trong cluster đều chạy đúng một pod theo yêu cầu. Trong quá trình triển khai, việc sử dụng DaemonSet giúp tránh tình trạng thiếu dịch vụ trên một số node, đặc biệt với các hệ thống logging, monitoring hoặc security. Bài viết dưới đây sẽ giúp bạn hiểu rõ cách DaemonSet hoạt động và cách áp dụng hiệu quả trong môi trường thực tế.
Những điểm chính
Đối với mình, Kubernetes không chỉ là công cụ điều phối container mà còn là nền tảng giúp tối ưu vận hành hệ thống ở quy mô lớn. Để giúp bạn hiểu rõ hơn, bài viết dưới đây sẽ cung cấp các nội dung gồm:
- Khái niệm: Hiểu rõ DaemonSet là một controller Kubernetes, giúp đảm bảo mỗi node trong cụm luôn chạy một bản sao pod để triển khai các dịch vụ hạ tầng như agent log, monitoring.
- Cách hoạt động: Nắm được cơ chế tự động tạo và xóa pod khi node thay đổi, giúp hiểu cách DaemonSet duy trì trạng thái triển khai nhất quán trên toàn cụm.
- Đặc điểm chính: Nắm được các đặc điểm cốt lõi như tự động đồng bộ khi node thay đổi và hỗ trợ giám sát, giúp nhận biết các kịch bản phù hợp để triển khai agent log, monitoring và dịch vụ hệ thống.
- Cách sử dụng: Nắm vững các bước định nghĩa manifest, triển khai bằng kubectl và cấu hình phạm vi node, giúp tự tin áp dụng DaemonSet để triển khai các agent giám sát và dịch vụ hạ tầng.
- So sánh: Phân biệt rõ sự khác biệt giữa DaemonSet, Deployment và StatefulSet, giúp lựa chọn đúng controller Kubernetes cho từng loại workload.
- Biết thêm Vietnix là nhà cung cấp dịch vụ hosting, VPS và cloud uy tín, chất lượng dành cho doanh nghiệp.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến DaemonSet trong Kubernetes.

DaemonSet trong Kubernetes là gì?
DaemonSet trong Kubernetes là một nhóm pod chuyên cung cấp các dịch vụ cục bộ cho từng node, có thể là thành phần cốt lõi của hạ tầng (như công cụ hỗ trợ mạng) hoặc các add on như agent monitoring, log collector. Khác với Deployment có thể tạo nhiều bản sao pod phân tán trên một số node bất kỳ, DaemonSet gắn chặt với số lượng node: mặc định mỗi node đủ điều kiện sẽ luôn có đúng một pod của DaemonSet chạy trên đó.

Trong quá trình triển khai DaemonSet, mình nhận ra rằng hiệu quả vận hành không chỉ phụ thuộc vào cấu hình Kubernetes mà còn nằm ở chất lượng hạ tầng phía dưới. Khi cluster cần đảm bảo độ ổn định cao, khả năng mở rộng linh hoạt và phân phối workload đồng đều trên nhiều node, việc lựa chọn nền tảng phù hợp là yếu tố quyết định. Nếu bạn đang tìm một giải pháp hạ tầng tối ưu để vận hành Kubernetes và DaemonSet ổn định, dịch vụ Cloud Server tại Vietnix sẽ là lựa chọn đáng cân nhắc với hiệu năng cao, tài nguyên linh hoạt và khả năng mở rộng theo nhu cầu thực tế. Liên hệ ngay để được tư vấn chi tiết!
Cách hoạt động của DaemonSet
DaemonSet vận hành dựa trên một quy trình kiểm soát vòng đời nghiêm ngặt, đảm bảo tính nhất quán của các dịch vụ nền trên toàn bộ hạ tầng cluster. Cách thức hoạt động chi tiết bao gồm các giai đoạn sau:
- Tự động triển khai khi mở rộng cluster: DaemonSet Controller liên tục giám sát trạng thái của hệ thống. Ngay khi một node mới được gia nhập vào cluster, Controller sẽ đối chiếu cấu hình
nodeSelectorhoặcaffinity. Nếu node thỏa mãn các điều kiện này, một bản sao pod sẽ được tự động khởi tạo và triển khai trên Node đó mà không cần bất kỳ can thiệp thủ công nào. - Tự động dọn dẹp khi thu hẹp hạ tầng: Trong trường hợp một node bị loại bỏ khỏi cluster hoặc không còn thỏa mãn điều kiện chạy ứng dụng, các pod tương ứng của DaemonSet sẽ được hệ thống tiến hành thu hồi và dọn dẹp (Garbage Collected) để tối ưu hóa tài nguyên cho node.
- Quản lý vòng đời đồng nhất: Khi người quản trị thực hiện xóa bỏ hoàn toàn đối tượng DaemonSet, hệ thống sẽ thực hiện lệnh gỡ bỏ đồng loạt tất cả các pod mà nó đang quản lý trên mọi node trong cụm, đảm bảo không để lại các tiến trình chạy ngầm gây lãng phí tài nguyên.

Đặc điểm chính của DaemonSet
Đặc điểm chính của DaemonSet là đảm bảo các pod đặc biệt luôn hiện diện trên từng node phù hợp trong cluster, giúp triển khai các tác vụ hạ tầng như log, monitoring, bảo mật một cách tự động và nhất quán:
- Đảm bảo Pod trên từng node: DaemonSet được thiết kế để mỗi node đủ điều kiện trong cluster luôn chạy ít nhất một bản sao pod do DaemonSet quản lý, hoặc chỉ trên một nhóm node được chọn thay vì toàn bộ cluster.
- Tự động đồng bộ khi thay đổi node: Khi một node mới gia nhập cluster, pod tương ứng sẽ được tạo tự động trên node đó, và khi node bị loại bỏ thì pod cũng được dọn dẹp, giúp trạng thái triển khai luôn khớp với danh sách node thực tế.
- Hỗ trợ thu thập log và giám sát: DaemonSet thường được dùng để triển khai các agent thu thập log và metric trên mọi node như các logging/observability agent, bảo đảm mỗi node đều được giám sát và gửi dữ liệu về hệ thống tập trung.
- Chạy dịch vụ hệ thống và bảo mật: Nhiều thành phần hệ thống cấp node hoặc công cụ bảo mật, giám sát mạng, phát hiện xâm nhập được triển khai dưới dạng DaemonSet để đảm bảo chúng luôn hiện diện trên từng node và hoạt động liên tục.
- Giới hạn node bằng cấu hình: Thông qua các trường như nodeSelector hoặc affinity trong spec của DaemonSet, quản trị viên có thể chỉ định pod chỉ chạy trên một tập node có nhãn/hardware nhất định, thay vì toàn bộ các node trong cluster.

Cách sử dụng DaemonSet cơ bản
1. Định nghĩa DaemonSet bằng manifest YAML
Ở mức cơ bản, bạn sử dụng DaemonSet bằng cách khai báo một manifest YAML với kind: DaemonSet, trong đó chỉ định tên, label và phần spec mô tả selector cùng template pod mà DaemonSet sẽ quản lý. Template pod này chứa định nghĩa container (image, cổng, volume, biến môi trường,…) giống như Deployment, nhưng thay vì nhân bản theo số replica, DaemonSet sẽ tự bảo đảm mỗi node phù hợp trong cluster luôn có một pod chạy theo cấu hình đó:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
app: example-daemon
template:
metadata:
labels:
app: example-daemon
spec:
containers:
- name: example-daemon
image: busybox
args:
- /bin/sh
- -c
- while true; do echo "daemonset running"; sleep 60; done2. Triển khai DaemonSet với kubectl
Sau khi có file YAML, bước sử dụng tiếp theo là triển khai DaemonSet bằng lệnh kubectl apply -f .yaml để Kubernetes tạo controller DaemonSet và sinh pod trên từng node. Tiếp đó, bạn có thể dùng kubectl get daemonset và kubectl get pods -o wide để kiểm tra số pod được tạo, bảo đảm mỗi node mục tiêu đều có một pod, và dùng kubectl delete -f .yaml khi muốn xóa DaemonSet cùng toàn bộ pod liên quan:
kubectl apply -f example-daemonset.yaml
kubectl get daemonset
kubectl get pods -o wide
kubectl delete -f example-daemonset.yaml
3. Cấu hình phạm vi node chạy DaemonSet
Trong thực tế, không phải lúc nào bạn cũng cần chạy pod của DaemonSet trên toàn bộ node, vì vậy manifest thường được cấu hình thêm nodeSelector hoặc affinity trong spec.template để giới hạn phạm vi. Cách làm phổ biến là gán nhãn trước cho nhóm node mong muốn, sau đó trong DaemonSet chỉ định selector/affinity để pod chỉ được tạo trên những node mang nhãn đó, vẫn giữ nguyên nguyên tắc “mỗi node một pod” nhưng chỉ trong tập node đã chọn:
spec:
template:
spec:
nodeSelector:
node-role.kubernetes.io/worker: "true"
4. Dùng DaemonSet cho log, monitoring và dịch vụ hạ tầng
Một cách sử dụng rất cơ bản nhưng quan trọng là triển khai các agent thu thập log, metric hoặc thành phần hạ tầng (storage daemon, networking helper, bảo mật,…) ở cấp node thông qua DaemonSet. Với mô hình này, thay vì phải tự chạy pod thủ công trên từng node, bạn chỉ cần một DaemonSet cho mỗi loại agent, Kubernetes sẽ tự động đảm bảo mọi node phù hợp đều có container log collector, monitoring agent hay driver hạ tầng hoạt động đồng nhất.

So sánh DaemonSet với StatefulSet và Deployment
| Tiêu chí | DaemonSet | Deployment | StatefulSet |
| Mục đích chính | Đảm bảo mỗi node (hoặc nhóm node) trong cluster luôn có một bản sao pod chạy, tập trung vào tác vụ cấp node. | Triển khai và quản lý ứng dụng (thường là stateless) khi không quan trọng pod chạy trên node nào, chủ yếu quan tâm số lượng bản sao. | Quản lý các ứng dụng stateful với yêu cầu danh tính pod cố định và thứ tự khởi tạo, gắn với tài nguyên lưu trữ bền vững. |
| Cách tạo pod | Controller DaemonSet trực tiếp đảm bảo trên mỗi node phù hợp luôn tồn tại một pod; số pod gắn với số lượng node. | Deployment tạo và quản lý ReplicaSet, ReplicaSet mới là đối tượng trực tiếp tạo và duy trì số lượng pod theo cấu hình replica. | Controller StatefulSet tự tạo pod, không thông qua ReplicaSet, mỗi pod được đặt tên duy nhất theo quy ước, ví dụ: counter-0, counter-1, counter-2. |
| Đặc điểm danh tính pod | Các pod của DaemonSet không tập trung vào danh tính riêng lẻ mà chỉ đảm bảo sự hiện diện một bản sao trên mỗi node. | pod trong Deployment có thể thay thế, không có danh tính cố định; khi scale hoặc update, pod cũ bị xóa và pod mới tạo lại tùy vị trí node. | Mỗi pod có danh tính duy nhất và ổn định theo tên, gắn với phiên bản lưu trữ riêng, nên có thể khởi động lại mà vẫn giữ nguyên identity. |
| Quản lý trạng thái / storage | Thường dùng cho tác vụ không lưu trạng thái ứng dụng, nếu dùng Persistent Volume thì nhiều pod có thể cùng chia sẻ. | Thường phục vụ ứng dụng stateless; có thể gắn Persistent Volume nhưng các pod chia sẻ chung một Volume, dữ liệu giữa chúng tương tự nhau. | Mỗi pod có PersistentVolumeClaim riêng; một StatefulSet với N replica sẽ tạo N pod và N Volume tương ứng, mỗi pod giữ trạng thái riêng biệt. |
| Hành vi khi mở rộng / thay đổi node | Số pod tự động thay đổi theo số node: thêm node thì tự tạo pod mới, xóa node thì pod tương ứng được xóa theo. | Scale bằng cách thay đổi số replica, Kubernetes không ràng buộc pod mới với node cụ thể, có thể chạy ở bất kỳ node còn tài nguyên. | Mở rộng bằng cách tăng replica theo thứ tự, pod mới được tạo tuần tự, gắn tên tăng dần và gắn với Volume riêng, bảo toàn thứ tự và trạng thái. |
| Trường hợp sử dụng tiêu biểu | Agent giám sát (Monitoring Exporters, Node-Exporter), thu thập log (Fluentd), các dịch vụ/agent cấp cụm chạy trên mọi node. | Ứng dụng web/service stateless, backend API, dịch vụ cần scale ngang dễ dàng, phía sau sử dụng database hoặc storage bên ngoài. | Cơ sở dữ liệu, hệ thống lưu trữ key value, hệ thống consensus/leader election hoặc bất kỳ kiến trúc nào phụ thuộc định danh pod và roll-out chậm. |
| Gắn với node cụ thể | Thiết kế để gắn chặt với node, mỗi node phù hợp sẽ có một pod và có thể bị ảnh hưởng bởi taint/toleration trên node. | Mặc định không ràng buộc node, có thể dùng nodeSelector hoặc cơ chế scheduler khác nếu cần gắn pod lên node có tài nguyên đặc biệt (GPU,…). | Không tập trung vào node cụ thể, mà tập trung vào danh tính pod và ánh xạ pod Volume, scheduler vẫn có thể quyết định node nhưng phải giữ thứ tự. |
Từ kinh nghiệm thực tế, việc chọn đúng Controller giúp hệ thống vận hành ổn định và tối ưu tài nguyên. DaemonSet là lựa chọn bắt buộc cho các tác vụ hạ tầng cấp node như thu thập log hay giám sát. Đối với ứng dụng web, Deployment mang lại sự linh hoạt cao nhất trong việc mở rộng quy mô. Riêng với cơ sở dữ liệu đòi hỏi định danh cố định, StatefulSet mới là giải pháp đảm bảo an toàn dữ liệu tốt nhất. Việc áp dụng đúng mô hình ngay từ đầu giúp bạn tối ưu quy trình quản trị hạ tầng lâu dài.
Vietnix – Nhà cung cấp dịch vụ hosting, VPS và cloud uy tín, chất lượng
Vietnix là nhà cung cấp dịch vụ web hosting, thuê máy chủ ảo và cloud phục vụ nhu cầu vận hành website và ứng dụng trên môi trường internet. Hệ thống chất lượng cao mang lại sự ổn định, đảm bảo hiệu năng và khả năng mở rộng linh hoạt theo từng giai đoạn phát triển. Bên cạnh đó, dịch vụ hỗ trợ kỹ thuật được duy trì liên tục, giúp người dùng xử lý các vấn đề phát sinh trong quá trình sử dụng. Đây là một trong những lựa chọn phù hợp cho cá nhân và doanh nghiệp khi cần triển khai và duy trì hệ thống online. Liên hệ ngay!
Thông tin liên hệ:
- Website: https://vietnix.vn/
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh
Câu hỏi thường gặp
DaemonSet k8s là gì?
DaemonSet là một đối tượng Kubernetes giúp đảm bảo mỗi node (hoặc một nhóm node) luôn chạy đúng một bản sao pod chỉ định, thường dùng cho logging, monitoring hoặc agent hệ thống.
Rollout DaemonSet là gì?
Rollout DaemonSet là quá trình triển khai hoặc cập nhật DaemonSet theo kiểu lần lượt thay thế các pod trên node, đảm bảo không dừng toàn bộ dịch vụ cùng lúc. Quá trình này giúp áp dụng image/config mới cho pod của DaemonSet trên tất cả node một cách an toàn và có thể theo dõi trạng thái.
Cách restart DaemonSet?
ó thể restart pod trong DaemonSet bằng lệnh kubectl rollout restart daemonset để Kubernetes lần lượt terminate và tạo lại pod trên tất cả node. Sau đó có thể kiểm tra trạng thái bằng kubectl get daemonset để xem số pod desired, current và available đã khớp chưa.
Chiến lược update của DaemonSet?
DaemonSet hỗ trợ chiến lược update kiểu RollingUpdate để thay thế pod dần dần, và OnDelete để chỉ cập nhật khi pod bị xóa thủ công. RollingUpdate giúp triển khai phiên bản mới một cách an toàn, trong khi OnDelete phù hợp khi muốn tự kiểm soát thời điểm restart pod.
Rollout restart DaemonSet là gì?
kubectl rollout restart daemonset kích hoạt một rolling restart cho toàn bộ pod thuộc DaemonSet mà không cần thay đổi YAML, thường dùng khi muốn reload config hoặc kéo image mới cùng tag. Lệnh này tạo annotation mới trên DaemonSet, khiến controller xem đó là thay đổi và lần lượt recreate pod trên các node.
DaemonSet YAML gồm những gì?
Một manifest DaemonSet YAML thường bao gồm apiVersion: apps/v1, kind: DaemonSet, metadata (name, labels), spec.selector và spec.template định nghĩa pod (container, image, tài nguyên,…). Ngoài ra có thể khai báo thêm updateStrategy, nodeSelector, tolerations hoặc affinity để kiểm soát cách update và phạm vi node được chạy pod.
DaemonSet là một thành phần quan trọng giúp tự động hóa việc triển khai các agent, dịch vụ hạ tầng trên mọi node, đảm bảo hệ thống Kubernetes luôn được giám sát và vận hành ổn định. Khi hiểu rõ cơ chế hoạt động, cách cấu hình YAML cũng như chiến lược cập nhật và rollback của daemonset, quản trị viên sẽ dễ dàng xây dựng cụm Kubernetes linh hoạt, an toàn và tối ưu tài nguyên hơn cho mọi bài toán triển khai thực tế.
THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM
Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày












