k8s控制器之DaemonSet

网友投稿 312 2022-09-09

k8s控制器之DaemonSet

DaemonSet介绍

DaemonSet概述

DaemonSet确保全部node上运行一个Pod的副本。当有node节点加入集群时,也会为他们新增一个Pod 。当有node节点从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。在每一个node节点上只调度一个Pod,因此无需指定replicas的个数,比如:在每个node上都运行一个日志采集程序,负责收集node节点本身和node节点之上的各个Pod所产生的日志,在每个node上都运行一个性能监控程序,采集该node的运行性能数据。

DaemonSet应用场景

在集群的每个节点上运行存储,比如:glusterd、ceph。 在每个节点上运行日志收集组件,比如:flunentd 、logstash、filebeat等。 在每个节点上运行监控组件,比如:Prometheus。

DaemonSet和Deployment区别

DaemonSet默认会在每个节点上运行有且只有一个pod(不考虑调度策略的情况下)。而Deployment可以在每个节点运行0到多个pod。

DaemonSet应用实践

apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-ds labels: app: nginx-ds spec: template: metadata: name: nginx-pod labels: app: nginx-pod spec: containers: - name: nginx-c image: nginx:1.21.5 imagePullPolicy: IfNotPresent restartPolicy: Always selector: matchLabels: app: nginx-pod

运行DaemonSet并查看pod信息

kubectl apply -f daemonset.yaml #查看pod信息,发现只有master节点不会创建 kubectl get pod -o wide

通过运行上面的DaemonSet资源文件,发现在所有工作节点都创建了pod,但是master节点没有,因为master节点默认设置了污点,不允许pod调度到该节点,如果业务需要在master节点部署pod的话(例如像监控信息),那么需要修改DaemonSet的资源文件,添加污点容忍度,修改如下:

apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-ds labels: app: nginx-ds spec: template: metadata: name: nginx-pod labels: app: nginx-pod spec: tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: nginx-c image: nginx:1.21.5 imagePullPolicy: IfNotPresent restartPolicy: Always selector: matchLabels: app: nginx-pod

再次运行发现在master节点也创建了pod,这样所有节点都运行了一个pod。如果我们删除某个节点的pod,会马上在该节点创建一个新的pod,以保证每个节点都运行一个pod。

DaemonSet滚动更新

DaemonSet有两种更新策略类型:

OnDelete:这是向后兼容性的默认更新策略。使用OnDelete更新策略,在更新DaemonSet模板后,只有在手动删除旧的DaemonSet pod时才会创建新的DaemonSet pod。这与Kubernetes1.5或更早版本中DaemonSet的行为相同。 RollingUpdate:使用RollingUpdate更新策略,在更新DaemonSet模板后,旧的DaemonSet pod将被终止,并且将以受控方式自动创建新的DaemonSet pod;默认类型是RollingUpdate。

kubectl edit ds nginx-ds

编辑DaemonSet,修改镜像版本,保存退出,这时各节点的pod将会自动更新成新的镜像。

DaemonSet版本回滚

更新之后,查看更新记录

kubectl rollout history ds nginx-ds

REVISION CHANGE-CAUSE 1 2

根据版本号可以回滚到指定版本:

#根据版本号查看版本的内容 kubectl rollout history ds nginx-ds --revision=1 kubectl rollout history ds nginx-ds --revision=2 #根据版本号回滚到指定版本 kubectl rollout undo ds nginx-ds --to-revision=1

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s控制器之StatefulSet
下一篇:DoMarketing-营销智库:腾讯游戏的帝国裂缝:为什么没能诞生《原神》?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~