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

再查看下当前未修改的Pod image版本,为1.15.2

接着,再修改DaemonSet的image版本为1.15.3,查看Pod的image版本还未修改

接着,删除该Pod,再次查看新创建起来的Pod对应的image版本号

posted @ 2021-05-14 22:03  Hei蛋炒饭  阅读(295)  评论(0编辑  收藏  举报