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>
打赏