DaemonSet 介绍
DaemonSet编排应用的方式
-
同Deployment相似,DaemonSet基于标签选择器管控一组Pod副本;
-
但是,DaemonSet用于确保 所有或选定的工作节点上 都运行有一个Pod副本
- 提示:DaemonSet的根本目标在于让每个节点一个 Pod
- 有符合条件的新节点进入时,DaemonSet会将Pod自动添加至相应节点;
- 而节点的移出,相应的Pod副本也将被回收;
-
DaemonSet不需要定义replicas(Pod副本数量)
-
rollingUpdate 仅支持先删除一个节点上的副本 然后再去更新下一个节点
常用场景
- 特定类型的系统化应用,例如kube-proxy,以及Calico网络插件的节点代理caliconode等
- 集群存储守护进程、集群日志收集守护进程以及节点监控守护进程等
DaemonSet的资源规范
与Deployment相似,DaemonSet对象也使用标签选择器和Pod模板
区别之处在于,DaemonSet不需要定义replicas(Pod副本数量), 其Pod数量随节点数量而定;
DaemonSet yaml示例
部署promethues node-exporter
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: daemonset-demo
namespace: default
labels:
app: prometheus
component: node-exporter
spec:
selector:
matchLabels:
app: prometheus
component: node-exporter
template:
metadata:
name: prometheus-node-exporter
labels:
app: prometheus
component: node-exporter
spec:
containers:
- image: prom/node-exporter:v1.5.0
name: prometheus-node-exporter
ports:
- name: prom-node-exp
containerPort: 9100
hostPort: 9100
livenessProbe:
tcpSocket:
port: prom-node-exp
initialDelaySeconds: 3
readinessProbe:
httpGet:
path: '/metrics'
port: prom-node-exp
scheme: HTTP
initialDelaySeconds: 5
hostNetwork: true
hostPID: true
共享宿主机的PID和网络空间 hostNetwork: true hostPID: true
发现pod的IP地址就是宿主机的IP地址
查看指标
curl 192.168.0.45:9100/metrics
查看DaemonSet状态
kubectl get daemonset
~$ kubectl get daemonsets/daemonset-demo
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset-demo 2 2 2 2 2 2m
~$ kubectl get pods -l app=prometheus -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
daemonset-demo-694mw 1/1 Running 0 3m 172.29.1.11 k8s-node01.magedu.com
daemonset-demo-lmnpd 1/1 Running 0 3m 172.29.1.12 k8s-node02.magedu.com
状态描述(示例集群中共有两个工作节点):
- DESIRED:期望存在的Pod副本数
- AVAILABLE:可用的Pod副本数
- CURRENT:当前已存在的Pod副本数
- NODE SELECTOR:节点选择器,表示未使用选择器,因而将适配到所有节点
- READY:当前已经转为就绪状态的Pod副本数
- AGE:资源已经创建的时长
- UP-TO-DATE :已经更新到期望版本的Pod副本数
kubectl describe daemonsets
待补充
daemonsets 更新策略
- rollingUpdate:滚动更新,自动触发
- onDelete:删除时更新,手动触发
rollingUpdate的参数
kubectl explain daemonsets.spec.updateStrategy.rollingUpdate
滚动更新
- 配置策略:rollingUpdate更新策略支持使用
- maxUnavailabl e参数来定义单批次允许更新的最大副本数量
- maxSurge