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》

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