19|Daemonset:忠实可靠的看门狗
Chrono
你好,我是 Chrono。
上一次课里我们学习了 Kubernetes 里的一个新 API 对象 Deployment,它代表了在线业务,能够管理多个 Pod 副本,让应用永远在线,还能够任意扩容缩容。
虽然 Deployment 非常有用,但是,它并没有完全解决运维部署应用程序的所有难题。因为和简单的离线业务比起来,在线业务的应用场景太多太复杂,Deployment 的功能特性只覆盖了其中的一部分,无法满足其他场景的需求。
今天我们就来看看另一类代表在线业务 API 对象:DaemonSet,它会在 Kubernetes 集群的每个节点上都运行一个 Pod,就好像是 Linux 系统里的“守护进程”(Daemon)。
为什么要有 DaemonSet
想知道为什么 Kubernetes 会引入 DaemonSet 对象,那就得知道 Deployment 有哪些不足。
我们先简单复习一下 Deployment,它能够创建任意多个的 Pod 实例,并且维护这些 Pod 的正常运行,保证应用始终处于可用状态。
但是,Deployment 并不关心这些 Pod 会在集群的哪些节点上运行,在它看来,Pod 的运行环境与功能是无关的,只要 Pod 的数量足够,应用程序应该会正常工作。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes中的DaemonSet是一种新的API对象,类似于Linux系统中的“守护进程”,能够在集群的每个节点上运行一个Pod。相比于Deployment,DaemonSet更适用于特殊业务,如网络应用、监控应用、日志应用和安全应用。本文介绍了DaemonSet的特点和使用方法,以及解决相关问题的思路。文章还介绍了“污点”和“容忍度”的概念,以及如何在Kubernetes中使用DaemonSet。此外,还介绍了静态Pod的应用部署手段。总之,DaemonSet是为集群里的每个节点部署唯一的Pod,适用于监控、日志等业务,而“污点”和“容忍度”共同决定了Pod的调度策略。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 入门实战课》,新⼈⾸单¥59
《Kubernetes 入门实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(31)
- 最新
- 精选
- 鱼老师,我想问问如果给一个node加上污点,那么在上面运行的不能容忍该污点的pod会自动跑到其他node上吗。
作者回复: 已经调度过,运行在节点上的pod就不会再关心taint了,因为taint只在调度的时候生效,也可以自己试验一下。
2022-08-04归属地:北京417 - 许飞测试结论:当master节点去除污点时,pod会调度到master;master节点增加污点时,pod不会离开,手动删除后不会再增加
作者回复: good
2022-08-09归属地:北京13 - 郑海成Q1:1.原理上ds直接own所选择的pod,deploy则是own创建的rs,rs own pod;2.功能上deploy支持在线业务部署功能更多,比如滚动更新和回滚,快速扩缩副本,ds则副本数基本固定;3.使用上ds多用在提供平台侧的能力,deploy则多用在提供业务侧能力,当然平台侧也用得很多 Q2: taint和tolerence是和调度相关的概念,调度器调度pod是会考虑
作者回复: great
2022-08-08归属地:上海7 - dao老师,kubectl get ds -n kube-system 找不到 Flannel ds ,查看了 kube-flannel.yml ,发现名空间已经改到 kube-flannel 。所以要使用 kubectl get ds -n kube-flannel 查看网络插件 Flannel 。
作者回复: 可能是新版的flannel改了,注意下版本号吧,或者手动改一下flannel的YAML 。
2022-08-13归属地:北京5 - Sportscontroller-plane是不是为了向openshift看齐
作者回复: 这其中的关系就不了解了,不过现在IT界的趋势是避讳“master”“slave”,毕竟zzzq。
2022-08-03归属地:北京34 - Layne已实操 1.重新添加master污点信息后,master节点上的pod应用不会自动删除; 2.污点容忍配置路径位置:kubectl explain ds.spec.template.spec.tolerations
作者回复: great
2023-01-06归属地:上海3 - 戒贪嗔痴老师,是这样的,由于本人使用的k8s版本是v1.24.0,使用kubectl describe node master得到的结果是 Taints: node-role.kubernetes.io/control-plane:NoSchedule node-role.kubernetes.io/master:NoSchedule 因为刚开始不知道你最后那张图里说的新版本已经改为control-plane的这种写法了,导致按照教程操作下来2种方法都不能实现把pod调度到master上运行,所以请教下老师是不是taint和toleration都要改为control-plane的写法?
作者回复: 是的,因为1.24已经不再使用“master”了,要改成“control-plane”,Pod必须能够容忍control-plane上的所有污点才行。
2022-08-03归属地:北京23 - 极客酱酱如果未被忽略的污点中存在至少一个 effect 值为 NoExecute 的污点, 则 Kubernetes 不会将 Pod 调度到该节点(如果 Pod 还未在节点上运行), 或者将 Pod 从该节点驱逐(如果 Pod 已经在节点上运行)。
作者回复: good
2023-02-03归属地:四川2 - 朱雯请问老师,调度是在什么时候发生的呢,我想到一个问题,一个pod的node加上污点,正常运转的情况你在回答里说,不会跑到其他机器上,那假如pod死亡,会重新根据污点情况进行调度吗,还是按照原先的策略进行调度呢
作者回复: 1.apply YAML,把对象提交到apiserver调度就会开始。 2.会重新调度,做试验验证一下就知道了。
2022-08-17归属地:北京42 - Yangjing类似 Mysql 的适合部署到“静态 Pod”上吗?
作者回复: 感觉不适合,它不应该是守护进程类型的应用吧。
2022-08-03归属地:上海2
收起评论