ADaemonSet đảm bảo rằng tất cả các Node trong Kubernetes Cluster chạy một bản sao của Pod. Mỗi node sẽ có một bản sao của pod. Khi các node được thêm vào cluster, các Pod được thêm vào chúng và khi các node bị xóa khỏi cluster, các Pod sẽ bị xóa. Nếu chúng ta xóa một DaemonSet, nó sẽ dọn sạch các Pod mà nó đã tạo.
DaemonSet đảm bảo rằng tất cả các node chạy một bản sao của Pod. Thông thường, nút mà Pod chạy trên đó được bộ lập lịch chọn nhưng các pod DaemonSet được tạo và lập lịch bởi bộ điều khiển DaemonSet.
Daemonset có thể được sử dụng:
Trong bài viết này, chúng ta sẽ tạo một Daemonset của "fluentd_elasticsearch". Điều này sẽ tạo ra các Pod của "fluentd_elasticsearch" trên mỗi nút trong cụm. Tệp định nghĩa Daemonset của chúng ta sẽ có Toleration for Taint của các nút chính để cho phép Pod cũng được lên lịch trên nút chính.
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng có một số Daemonset khả dụng. Tất cả các Daemonset này dành cho các thành phần Cluster.
Bây giờ, hãy lấy các pod thuộc về không gian tên "kube-system".
Tất cả các pod được thấy trong ảnh chụp màn hình ở trên đều thuộc về Daemonset của các thành phần cluster.
Lấy danh sách các pod proxy.
Kiểm tra các controlproxy pod nào.
Lấy thông tin chi tiết về daemonset điều khiển các proxy pod.
Tạo một tệp có định nghĩa daemonset sau trong đó.
Trong định nghĩa trên, chúng ta có sự khoan dung đối với Taint của nút chính. Điều này cũng sẽ cho phép pod được đặt trên nút chính.
Tạo một daemonset bằng cách sử dụng tệp định nghĩa được tạo ở bước trên.
Deamont set này đã được tạo trong không gian tên "kube-system".
Mô tả daemonset mà chúng ta vừa tạo trong không gian tên "kube-system".
Trong ảnh chụp màn hình ở trên, có thể thấy rằng các Pod đã được triển khai trên 2 các nút.
Bây giờ, chúng ta có thể có được thông tin chi tiết về các pod được triển khai dưới dạng daemonset trên 2 nút.
Trong ảnh chụp màn hình ở trên, có thể thấy rằng các Pod đã được triển khai trên nút công nhân "node01" và nút chính "master". Lý do để có được pod được lên lịch trên nút chính là để dung thứ cho sự ô nhiễm của nút chính.
DaemonSet đảm bảo rằng tất cả các node chạy một bản sao của Pod. Thông thường, nút mà Pod chạy trên đó được bộ lập lịch chọn nhưng các pod DaemonSet được tạo và lập lịch bởi bộ điều khiển DaemonSet.
Daemonset có thể được sử dụng:
- Để chạy lưu trữ cụm trên mỗi nút, chẳng hạn như: glusterd, ceph
- Để chạy thu thập nhật ký trên mỗi nút, chẳng hạn như: fluentd, logstash
- Để chạy giám sát nút trên ever note, chẳng hạn như: Prometheus Node Exporter, collectd, Datadog agent
Trong bài viết này, chúng ta sẽ tạo một Daemonset của "fluentd_elasticsearch". Điều này sẽ tạo ra các Pod của "fluentd_elasticsearch" trên mỗi nút trong cụm. Tệp định nghĩa Daemonset của chúng ta sẽ có Toleration for Taint của các nút chính để cho phép Pod cũng được lên lịch trên nút chính.
Điều kiện tiên quyết
- Cụm Kubernetes có ít nhất 1 nút công nhân.
Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, hãy nhấp vào đây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu EC2 Instances.
Chúng ta sẽ làm gì?
- Tạo Daemonset
Tạo Daemonset
Kiểm tra xem có bất kỳ daemonset nào trên không gian tên mặc định và tất cả các không gian tên hay không.
Mã:
kubectl get daemonsets #Lấy daemonset từ không gian tên mặc định
Mã:
kubectl get daemonsets --all-namespaces#Lấy daemonset từ tất cả không gian tên bằng tùy chọn --all-namespace
Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng có một số Daemonset khả dụng. Tất cả các Daemonset này dành cho các thành phần Cluster.
Bây giờ, hãy lấy các pod thuộc về không gian tên "kube-system".
Mã:
kubectl get pods -n kube-system#Getpods từ không gian tên "kube-system"
Tất cả các pod được thấy trong ảnh chụp màn hình ở trên đều thuộc về Daemonset của các thành phần cluster.
Lấy danh sách các pod proxy.
Mã:
kubectl get pods -n kube-system | grep proxy#Getpodstừ không gian tên "kube-system" và grep forproxy
Mã:
kubectl describe pod kube-proxy-s5vzp -n kube-system #Mô tả pod từ không gian tên "kube-system"
Mã:
kubectl describe daemonset kube-proxy -n kube-system#Mô tả daemonset từ không gian tên "kube-system"
Tạo một tệp có định nghĩa daemonset sau trong đó.
Mã:
vim my-daemonset.yml
Mã:
apiVersion: apps/v1kind: DaemonSetmetadata: name: my-fluentd-elasticsearch-daemonset không gian tên: kube-system nhãn: k8s-app: fluentd-loggingspec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule container: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
Trong định nghĩa trên, chúng ta có sự khoan dung đối với Taint của nút chính. Điều này cũng sẽ cho phép pod được đặt trên nút chính.
Tạo một daemonset bằng cách sử dụng tệp định nghĩa được tạo ở bước trên.
Mã:
kubectl create -f my-daemonset.yml #Tạo một daemonset
Mã:
kubectl get daemonset -n kube-system #Lấy daemonset từ không gian tên "kube-system"
Deamont set này đã được tạo trong không gian tên "kube-system".
Mô tả daemonset mà chúng ta vừa tạo trong không gian tên "kube-system".
Mã:
kubectl describe daemonset my-fluentd-elasticsearch-daemonset -n kube-system #Mô tả daemonset từ không gian tên "kube-system"
Trong ảnh chụp màn hình ở trên, có thể thấy rằng các Pod đã được triển khai trên 2 các nút.
Bây giờ, chúng ta có thể có được thông tin chi tiết về các pod được triển khai dưới dạng daemonset trên 2 nút.
Mã:
kubectl get pods -n kube-system | grep my-fluentd-elasticsearch-daemonset #Lấy pod từ không gian tên "kube-system" và grep
Mã:
kubectl describe pod my-fluentd-elasticsearch-daemonset-4t9vs -n kube-system | grep Node#Mô tả pod từ không gian tên "kube-system" và grep
Mã:
kubectl describe pod my-fluentd-elasticsearch-daemonset-kxfjj -n kube-system | grep Node#Mô tả pod từ không gian tên "kube-system" và grep
Trong ảnh chụp màn hình ở trên, có thể thấy rằng các Pod đã được triển khai trên nút công nhân "node01" và nút chính "master". Lý do để có được pod được lên lịch trên nút chính là để dung thứ cho sự ô nhiễm của nút chính.