一、DaemonSet的作用与特点

DaemonSet(守护进程集,编写为ds)和守护进程类似,它在符合匹配条件的节点上均部署一个Pod。当有新节点加入集群时,也会为它们新增一个Pod,当节点从集群中移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod。

注意:DaemonSet的管理机制为直接管理 Pod,依赖 ControllerRevision

二、创建DaemonSet

2.1 DaemonSet部署过程

下面以创建名为nginx且副本数为x的DaemonSet文件为例,其部署过程图如下:

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>