k8s学习记录,DaemonSet(九)
文章中资料参考来源2022 云原生Kubernetes全栈架构师
DaemonSet是什么
-
守护进程集,缩写为ds,在所有节点或者是匹配的节点上都部署一个Pod【在每个节点上都部署某个Pod,比如:CNI网络插件calico,节点日志的收集:fluentd或filebeat,节点的监控node exporter,服务暴露ingress nginx】
-
创建一个DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
annotations:
deprecated.daemonset.template.generation: "1"
creationTimestamp: "2021-05-13T09:17:51Z"
generation: 1
name: web
namespace: default
resourceVersion: "2606938"
uid: a44a5a62-7413-48a5-ad54-7db2db278123
spec:
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.15.3
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
name: web
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
updateStrategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
status:
currentNumberScheduled: 5
desiredNumberScheduled: 5
numberAvailable: 3
numberMisscheduled: 0
numberReady: 3
numberUnavailable: 2
observedGeneration: 1
updatedNumberScheduled: 5
- 我们也可以单独给node先打一个标签,方便后面直接根据标签在node上部署daemonset
kubectl label node k8s-node01.node k8s-node02.node ds=true
修改daemonset创建的yaml文件
修改完成后,我们可以replace一下,使用新的yaml文件来创建ds
#集群会把没有该labels的node上的Pod给删除
kubectl replace -f nginx-ds.yaml
#当我们给master03打上labels的时候,集群会自动根据nodeSelector中配置的标签,在master03上也部署对应的DaemonSet的Pod
kubectl label node master03 ds=true
kubectl get po -owide
DaemonSet的更新和回滚
- 滚动更新
updateStrategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1 #最大不可用数量,生产中不建议配置太大,影响范围太大了
type: RollingUpdate #滚动更新
kubectl set image ds nginx nginx=nginx:1.15.2
- 删除时更新
updateStrategy:
type: OnDelete #删除时再更新,和StatefulSet类似,建议使用这种策略,在不重要的节点上进行测试,测试通过后,再在其他节点上执行
先去在线编辑DaemonSet的yaml文件
kubectl edit ds nginx