Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

19|Daemonset:忠实可靠的看门狗

你好,我是 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
立即购买
登录 后留言

全部留言(31)

  • 最新
  • 精选
  • 老师,我想问问如果给一个node加上污点,那么在上面运行的不能容忍该污点的pod会自动跑到其他node上吗。

    作者回复: 已经调度过,运行在节点上的pod就不会再关心taint了,因为taint只在调度的时候生效,也可以自己试验一下。

    2022-08-04归属地:北京
    4
    17
  • 许飞
    测试结论:当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
  • Sports
    controller-plane是不是为了向openshift看齐

    作者回复: 这其中的关系就不了解了,不过现在IT界的趋势是避讳“master”“slave”,毕竟zzzq。

    2022-08-03归属地:北京
    3
    4
  • 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归属地:北京
    2
    3
  • 极客酱酱
    如果未被忽略的污点中存在至少一个 effect 值为 NoExecute 的污点, 则 Kubernetes 不会将 Pod 调度到该节点(如果 Pod 还未在节点上运行), 或者将 Pod 从该节点驱逐(如果 Pod 已经在节点上运行)。

    作者回复: good

    2023-02-03归属地:四川
    2
  • 朱雯
    请问老师,调度是在什么时候发生的呢,我想到一个问题,一个pod的node加上污点,正常运转的情况你在回答里说,不会跑到其他机器上,那假如pod死亡,会重新根据污点情况进行调度吗,还是按照原先的策略进行调度呢

    作者回复: 1.apply YAML,把对象提交到apiserver调度就会开始。 2.会重新调度,做试验验证一下就知道了。

    2022-08-17归属地:北京
    4
    2
  • Yangjing
    类似 Mysql 的适合部署到“静态 Pod”上吗?

    作者回复: 感觉不适合,它不应该是守护进程类型的应用吧。

    2022-08-03归属地:上海
    2
收起评论
显示
设置
留言
31
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部