一、DaemonSet的作用与特点¶
DaemonSet(守护进程集,编写为ds)和守护进程类似,它在符合匹配条件的节点上均部署一个Pod。当有新节点加入集群时,也会为它们新增一个Pod,当节点从集群中移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod。
注意:DaemonSet的管理机制为直接管理 Pod,依赖 ControllerRevision
二、创建DaemonSet¶
2.1 DaemonSet部署过程¶
下面以创建名为nginx且副本数为x的DaemonSet文件为例,其部署过程图如下:

1.使用kubectl创建一个DaemonSet文件 2.在执行kubectl create命令时,提交给api-server 3.api-server持久化实例 4.假设在Default命名空间创建DaemonSet nginx文件,在符合标签的节点上都会启动一个nginx-xxx实例
2.2 创建一个DaemonSet¶
1.定义一个yaml文件
$ vim nginx-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
name: nginx
2.创建一个DaemonSet
$ k create -f nginx-ds.yaml
3.详细查看pod节点,观察到每个节点都已完成部署
$ k get po -owide
nginx-2sl2b 1/1 Running 0 2m47s 172.25.244.220 k8s-master01 <none> <none>
nginx-d6l5d 1/1 Running 0 2m47s 172.27.14.208 k8s-node02 <none> <none>
nginx-grq8p 1/1 Running 0 2m47s 172.17.125.35 k8s-node01 <none> <none>
nginx-hdmh8 1/1 Running 0 2m47s 172.25.92.93 k8s-master02 <none> <none>
nginx-mj9jp 1/1 Running 0 2m47s 172.18.195.33 k8s-master03 <none> <none>
2.3 指定节点部署DaemonSet¶
1.给k8s-node01和k8s-node02打上ssd的标签
$ k label node k8s-node01 k8s-node02 disktype=ssd
node/k8s-node01 labeled
node/k8s-node02 labeled
补充:如果想取消上面操作:
$ k label node k8s-node01 k8s-node02 disktype-
2.定义一个yaml文件
$ vim nginx-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: nginx
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
disktype: ssd
containers:
- image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
name: nginx
3.创建一个DaemonSet
$ k create -f nginx-ds.yaml
4.查看pod状态,观察到只有打过标签的才会被部署pod
$ k get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6qbfv 1/1 Running 0 21s 172.27.14.209 k8s-node02 <none> <none>
nginx-884t5 1/1 Running 0 21s 172.17.125.36 k8s-node01 <none> <none>