DaemonSet介绍+更新回滚

介绍

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

DaemonSet 的一些应用场景:

  • 在每个节点上运行集群守护进程
  • 在每个节点上运行日志收集守护进程
  • 在每个节点上运行监控守护进程

比如部署:

  • 集群存储,ceph或者glusterd
  • K8S网络插件,calico
  • 节点日志的收集:fluentd或者是filebeat
  • 节点的监控:node exporter
  • 服务暴露:部署一个ingress nginx

特点和用途

  • 确保每个节点都有副本运行: 与 ReplicaSet 或 Deployment 不同,DaemonSet 保证集群中的每个节点都有一个(或多个)Pod 的副本在运行。这使得 DaemonSet 适用于在每个节点上运行系统级别的服务,以确保它们在整个集群中的覆盖范围。

  • 节点感知性: DaemonSet 能够感知节点的变化,例如节点的添加、删除或更新。当节点加入集群或者节点标签变化时,DaemonSet 会自动在新节点上调度 Pod,并确保每个节点上的 Pod 数量保持一致。

  • 用途广泛: DaemonSet 可用于运行各种类型的系统服务或守护进程,包括日志收集器、监控代理、网络插件、存储插件、安全代理等。这些服务通常需要在整个集群中运行,并且需要与节点的特定状态或资源进行交互。

  • 资源限制和节点亲和性: 可以通过 Kubernetes 的资源限制和节点亲和性来配置 DaemonSet。这样可以确保 DaemonSet 中的 Pod 不会消耗集群中的过多资源,并且可以将它们调度到适当的节点上,以满足特定的需求或策略。

总之,DaemonSet 是一种非常有用的 Kubernetes 控制器,可用于在整个集群中运行系统级别的服务或守护进程,并确保它们在每个节点上都有一个副本在运行。

部署DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

基于 YAML 文件创建 DaemonSet:

kubectl apply -f daemonset.yaml

更新 DaemonSet

DaemonSet 有两种更新策略:

  • OnDelete:使用 OnDelete 更新策略时,在更新 DaemonSet 模板后,只有当你手动删除老的 DaemonSet Pod 之后,新的 DaemonSet Pod 才会被自动创建。跟 Kubernetes 1.6 以前的版本类似。
  • RollingUpdate:这是默认的更新策略。使用 RollingUpdate 更新策略时,在更新 DaemonSet 模板后, 老的 DaemonSet Pod 将被终止,并且将以受控方式自动创建新的 DaemonSet Pod。 更新期间,最多只能有 DaemonSet 的一个 Pod 运行于每个节点上。

滚动更新参数

要启用 DaemonSet 的滚动更新功能,必须设置 .spec.updateStrategy.type 为 RollingUpdate。

默认参数:

  • .spec.updateStrategy.rollingUpdate.maxUnavailable(默认为 1),执行更新期间的最大不可用pod的数量,默认为1 的话就是允许最大不可用数量为1个pod。
  • .spec.minReadySeconds(默认为 0),用于指定在容器启动后应等待的最小秒数,以便将该容器标记为“准备就绪” ,设置为0秒时指不等待pod就会直接将流量发送到该pod。
  • .spec.updateStrategy.rollingUpdate.maxSurge (默认为 0),用于指定在进行 Deployment 的滚动更新时,可以同时创建的额外 Pod 的数量或百分比。例如,如果将 maxSurge 设置为 25%,则 Kubernetes 将允许在更新期间创建的 Pod 数量超出所需数量的 25%。这意味着在更新期间,可能会出现比原始副本数更多的 Pod,但是会在更新完成后将这些额外的 Pod 逐步删除。

更新方式:

修改yaml文件后更新

kubectl apply -f daemonset-update.yaml

Edit命令更新

edit方式更新适合所有K8S资源类型

# ds 是 daemonset 缩写
kubectl edit ds fluentd-elasticsearch 

更新容器镜像

# --re cored 参数好像是要废弃了 可以设置文更新以后用annotate 添加注释。
kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 --record

# 添加注释 双引号里面的随便填写
kubectl annotate ds fluentd-elasticsearch kubernetes.io/change-cause="kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0"

查看更新进度

kubectl rollout status ds fluentd-elasticsearch

回滚 DaemonSet

列出 DaemonSet 的所有版本:

kubectl rollout history daemonset fluentd-elasticsearch

此命令返回 DaemonSet 版本列表:

daemonset.apps/calico-node 
REVISION  CHANGE-CAUSE
1         <none>
2         kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 --record
3         kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.7.0 --record

回滚到指定版本

# 在 --to-revision 中指定你从步骤 1 中获取的修订版本
kubectl rollout undo daemonset fluentd-elasticsearch --to-revision=2

查看回滚进度

kubectl rollout status ds fluentd-elasticsearch
  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值