DaemonSet trong Kubernetes là gì ?

12

DaemonSet trong Kubernetes là gì ?Cuongquach.com | Hôm nay chúng ta sẽ cùng tìm hiểu qua một trong những thành phần dịch vụ cơ bản của Kubernetes : DaemonSet . Vậy DaemonSet là gì ? Có những ứng dụng thực tế như thế nào trong hạ tầng Kubernetes ? Cách tạo, xoá, … DaemonSet ra sao ?

daemonset-kubernetes-la-gi

DaemonSet trong Kubernetes là gì ?

DaemonSet là một dạng dịch vụ quản lý các Pod hoạt động với chức năng khá là riêng biệt bằng cách đảm bảo Pod dịch vụ sẽ được chạy trên toàn bộ các Node trong một Kubernetes Cluster (hoặc trên một số Node cụ thể trong Kubernetes Cluster).

DaemonSet sử dụng Pod template, để định nghĩa các thông số cho pod dịch vụ mà bạn sẽ chạy như : sử dụng image gì, volume gì được mount, label, selectors,…

Khi mà bạn thêm một node mới vào Kubernetes Cluster, thì DaemonSet pod sẽ được tự động add vào node mới đó. Cũng tương tự ở chiều ngược lại, khi bạn xoá một node khỏi Kubernetes Cluster thì pod đó sẽ được xoá khỏi hệ thống Kubernetes.

DaemonSet trong Kubernetes là gì ?
DaemonSet trong Kubernetes là gì ?

Khi bạn xoá một DaemonSet đang chạy, thì đồng nghĩa bạn xoá tất cả các DaemonSet Pod đang tồn tại.

Sử dụng DaemonSet trong trường hợp nào ?

Hẳn bạn sẽ quan tâm các trường hợp ứng dụng thực tế phổ biến mà ta sẽ chạy dịch vụ ở dạng DaemonSet. :

  • Chạy dịch vụ để kết nối cluster storage ở mỗi Kubernetes Node như : glusterd, glusterfs, ceph,..
  • Chạy dịch vụ để thu thập log (log container hoặc log os node) ở mỗi Kubernetes Node như : fluentd, logstash, datadog agent,..
  • Chạy dịch vụ để giám sát hệ thống node ở mỗi Kubernetes Node như : prometheus node exporter, collectd, datadog agent, newrelic agent..

Nhìn chung thì ba trường hợp trên là ứng dụng thực tế phổ biến nhất đối với DaemonSet trong Kubernetes. Trong những hạ tầng công ty khác nhau, sẽ luôn có những nhu cầu đặc biệt ứng dụng mục đích khác nhau khi triển khai dịch vụ DaemonSet Kubernetes.

Bạn có thể chạy nhiều dịch vụ DaemonSet trong cùng một Node đấy, mỗi DaemonSet có thể đảm nhận chức năng khác nhau dù cùng một source ứng dụng.

Giao tiếp với DaemonSet như thế nào ?

Hm , bạn sẽ giao tiếp với DaemonSet như thế nào nhỉ ? Thì thực ra DaemonSet cũng chỉ là dịch vụ Pod chạy trên mỗi Node nên cách thức nói chuyện cũng sẽ quen thuộc như sau :

  • Push: ở cơ chế Push, thì các DaemonSet Pod thường được cấu hình để tự động thu thập dữ liệu và đẩy về 1 dịch vụ cố định. Nên cũng không có nhu cầu client nào giao tiếp hết.
  • NodeIP và known port: giống như khi deploy Prometheus Node Exporter, bạn sẽ cho DaemonSet Pods sử dụng hostPort và port IP cụ thể trên mỗi Node. Như vậy khi các service discovery sẽ lấy danh sách Kubernetes Node và giao tiếp với DaemonSet qua port mà bạn cấu hình.
  • DNS: bạn cũng có thể giao tiếp với DaemonSet qua DNS endpoint đấy.
  • Service: bạn cũng có thể cấu Service cho DaemonSet, từ đó client khi truy cập DaemonSet qua Service sẽ truy cập ngẫu nhiên một DaemonSet Pod trên ngẫu nhiên Node.

Nhìn chung theo trải nghiệm của mình thì với DaemonSet, người ta hay cấu hình dịch vụ thu thập log tự động hoặc sử dụng NodeIP & Port như Prometheus Node Exporter.

Một số thao tác quản trị với DaemonSet Kubernetes

Khởi tạo DaemonSet

Tạo một file Daemonset Manifest với vài lưu ý:

  • Bạn phải cấu hình Pod Template spec.template: để cấu hình các thông tin mà DaemonSet Pod sẽ chạy.
  • Bạn phải cấu hình Pod Selector spec.selector: để cấu hình cách thức lựa chọn Pod nào sẽ chạy, thường sẽ spec.selector.matchLabels sẽ match với label name của Pod ở spec.template.
  • Bạn có thể quy định DaemonSet Pod chỉ chạy trên một số Kubernetes Node cụ thể với .spec.template.spec.nodeSelector .

Khởi tạo DaemonSet fluentd nào.

Quản lý thông tin DaemonSet

Xem đang có bao nhiêu Kubernetes Node nào.

Giờ xem dịch vụ DaemonSet Fluentd có đang chạy không nhé.

Coi thông tin các DaemonSet Fluentd’s Pod. Ta có 2 Node thì sẽ là 2 pod .

Coi thông tin về DaemonSet Fluentd.

Xoá DaemonSet

Xoá DaemonSet cũng đơn giản.

Cũng khá đơn giản để hiểu vai trò của DaemonSet là gì trong Kubernetes phải không nào ? Ứng dụng DaemonSet sẽ tuỳ theo các nhu cầu đặc thù của mỗi môi trường dịch vụ,… Hy vọng cung cấp đủ kiến thức cơ bản về DaemonSet Kubernetes cho các bạn.

Nguồn: https://cuongquach.com/

LEAVE A REPLY

Please enter your comment!
Please enter your name here