3.3控制器之DaemonSet


DaemonSet可以確保每個node節點或者指定的節點上運行一個Pod副本。當集羣中增加node節點時,就會爲node節點創建一個副本pod,當節點從集羣中移除時,Pod也會被回收。刪除DaemonSet會刪除他創建的所有DaemonSet。
作用:DaemonSet適合在每個節點上運行一個pod,運行日誌收集器或者資源管理器監控的工作。

1、在集羣中所有node節點上創建一個pod副本

以如下yaml爲例,在每個節點上創建一個pod運行mynginx應用

apiVersion: apps/v1  			#版本
kind: DaemonSet  				#控制器類型
metadata:   					#DaemonSet的元數據
  name: mydaemonset  			#DaemonSet的名稱爲mydaemonset
  labels:   					#DaemonSet控制器的標籤爲app: mydaemonset
    app: mydaemonset
spec:   						#DaemonSet控制器的描述
  selector:  					#DaemonSet控制器的選擇器
    matchLabels:  				#DaemonSet控制器pod標籤匹配
      name: mydaemonset-pod 	#DaemonSet控制器只管理標籤爲name: mydaemonset-pod 的pod
  template:
    metadata:
      labels:
        name: mydaemonset-pod	#DaemonSet創建標籤爲name: mydaemonset-pod的標籤
    spec:
      containers:  				#容器描述
      - name: mynginx 			#容器的名字
        image: mynginx:v0.2 	#容器中的鏡像
#創建mydaemonset
[root@k8s-master01 daemonset_work]# kubectl create -f daemonset.yaml 
daemonset.apps/mydaemonset created

#發現分別在k8s-node01和k8s-node02上創建一個pod副本
[root@k8s-master01 daemonset_work]# kubectl get pod -o wide
NAME                READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
mydaemonset-5kbcr   1/1     Running   0          9s    10.244.1.94   k8s-node01   <none>           <none>
mydaemonset-mbjv7   1/1     Running   0          9s    10.244.2.97   k8s-node02   <none>           <none>

2、在集羣中指定的node上創建一個pod副本

可以在集羣中node節點上給節點打上不同的標籤,然後根據不同的標籤選擇節點進行部署pod副本。
示例如下,首先在上述yaml中添加選擇的節點標籤

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: mydaemonset
  labels:
    app: mydaemonset
spec:
  selector:
    matchLabels:
      name: mydaemonset-pod
  template:
    metadata:
      labels:
        name: mydaemonset-pod
    spec:
      nodeSelector: 			#只在標籤爲disk=mynginx-node的節點上部署一個pod副本
        disk: mynginx-node
      containers:
      - name: mynginx
        image: mynginx:v0.2
#首先創建DeamonSet
[root@k8s-master01 daemonset_work]# kubectl create -f daemonset_node.yaml 
daemonset.apps/mydaemonset created

#查看創建的DeamonSet,還沒有符合的節點創建pod
[root@k8s-master01 daemonset_work]# kubectl get daemonset
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR       AGE
mydaemonset   0         0         0       0            0           disk=mynginx-node   34s

#查看節點
[root@k8s-master01 daemonset_work]# kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
k8s-master01   Ready    master   33d   v1.15.1
k8s-node01     Ready    <none>   33d   v1.15.1
k8s-node02     Ready    <none>   33d   v1.15.1

#給k8s-node01節點打標籤disk=mynginx-node
[root@k8s-master01 daemonset_work]# kubectl label node k8s-node01 disk=mynginx-node
node/k8s-node01 labeled

#再次查看pod,發現已經創建了一個pod副本
[root@k8s-master01 daemonset_work]# kubectl get pod
NAME                READY   STATUS    RESTARTS   AGE
mydaemonset-9pt7g   1/1     Running   0          13s

#給k8s-node02節點打標籤disk=mynginx-node
[root@k8s-master01 daemonset_work]# kubectl label node k8s-node02 disk=mynginx-node
node/k8s-node02 labeled

#再次查看pod,發現已創建兩個pod
[root@k8s-master01 daemonset_work]# kubectl get pod
NAME                READY   STATUS    RESTARTS   AGE
mydaemonset-9pt7g   1/1     Running   0          2m50s
mydaemonset-npbkk   1/1     Running   0          5s

#修改k8s-node02節點標籤disk=no-mynginx-node
[root@k8s-master01 daemonset_work]# kubectl label node k8s-node02 disk=no-mynginx-node --overwrite
node/k8s-node02 labeled

#由於節點的標籤修改了,符合選擇器的標籤的node節點還一個
[root@k8s-master01 daemonset_work]# kubectl get pod
NAME                READY   STATUS    RESTARTS   AGE
mydaemonset-9pt7g   1/1     Running   0          3m39s

本文參考《kubenetes in action》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章