DaemonSet:守护进程集,缩写为ds,DaemonSet用于保证所有(或者一部分)节点都运行了一个指定的Pod副本,类似于守护进程,通常用于日志收集、系统监控等。DaemonSet具有以下特点:
(1)每个向集群中添加一个节点时,指定的Pod副本也将添加到该节点上。
(2)当节点从集群中移除时,Pod也就被一起删除了。
(3)删除一个DaemonSet可以清理所有由其创建的Pod。

DaemonSet常见的应用场景如下:
(1)运行集群存储:例如ceph、glusterd。
(2)CNI网络插件:例如calico。
(3)日志收集:例如Loki、filebeat。
(4)系统监控:例如Prometheus node exporter。
(5)服务暴露:例如ingress nginx。

1. 定义一个DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

DaemonSet的配置跟Deployment非常类似,只是kind不同而已。

2. 创建DaemonSet

kubectl apply -f 文件名.yml
kubectl create -f 文件名.yml

[root@k8s-master1 daemonSet]# kubectl apply -f 01-create-deamonset.yml 
daemonset.apps/nginx-ds created
[root@k8s-master1 daemonSet]# 

注:更新和删除操作与Deployment类似,比如更新可以用kubectl replace -f,删除可以用kubectl delete -f。

3. 查看DaemonSet

kubectl get daemonset
kubectl get ds

[root@k8s-master1 daemonSet]# kubectl get daemonset -A
NAMESPACE     NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
default       nginx-ds      2         2         1       2            1           <none>                   95s
kube-system   calico-node   2         2         2       2            2           kubernetes.io/os=linux   7d22h
[root@k8s-master1 daemonSet]# kubectl get ds -A
NAMESPACE     NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
default       nginx-ds      2         2         1       2            1           <none>                   101s
kube-system   calico-node   2         2         2       2            2           kubernetes.io/os=linux   7d22h

4. 通过标签指定节点进行更新

(1)给节点打标签
kubectl label node k8s-node1 ds=true
上面命令表示给k8s-node1节点打上标签:da=true

[root@k8s-master1 daemonSet]# kubectl label node k8s-node1 ds=true
node/k8s-node1 labeled
[root@k8s-master1 daemonSet]# kubectl get node --show-labels
NAME          STATUS   ROLES    AGE     VERSION   LABELS
k8s-master1   Ready    <none>   7d9h    v1.21.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master1,kubernetes.io/os=linux,node.kubernetes.io/node=
k8s-node1     Ready    <none>   7d23h   v1.21.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,ds=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node.kubernetes.io/node=
[root@k8s-master1 daemonSet]# 

(2)给DeamonSet添加node节点选择器

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-ds
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        ds: "true"
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80


如上面配置文件中,增加了.spec.template.spece.nodeSelector配置

(3)更新配置,并查看效果

[root@k8s-master1 daemonSet]# kubectl replace -f 01-create-deamonset.yml 
daemonset.apps/nginx-ds replaced
[root@k8s-master1 daemonSet]# kubectl get pods -owide
NAME             READY   STATUS        RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
nginx-ds-d5srg   0/1     Terminating   0          10m   172.16.36.127   k8s-node1   <none>           <none>
web-0            1/1     Running       0          85m   172.16.36.124   k8s-node1   <none>           <none>


打赏
支付宝 微信
上一篇 下一篇