2、DaemonSet 的生命周期
文章插图
DaemonSet 的生命周期包括以下几个阶段:
- 创建 DaemonSet:使用 kubectl apply 或 kubectl create 命令创建一个 DaemonSet 对象 。
- DaemonSet 控制器创建 Pod:当 DaemonSet 被创建时,DaemonSet 控制器会根据 Pod 模板创建 Pod 副本,并在每个节点上运行一个 Pod 副本 。
- 新节点加入集群:当新的节点加入集群时,DaemonSet 控制器会自动在新节点上创建一个 Pod 副本,确保每个节点上都有一个 Pod 副本 。
- 节点被删除:当一个节点被删除时,DaemonSet 控制器会自动删除该节点上的 Pod 副本,以确保每个节点上都有一个 Pod 副本 。
- 更新 DaemonSet:当需要更新 DaemonSet 时,可以使用 kubectl apply 或 kubectl edit 命令修改 DaemonSet 对象的配置 。这会导致 DaemonSet 控制器创建新的 Pod 副本,并逐步替换旧的 Pod 副本,以确保每个节点上都有一个新的 Pod 副本 。
- 删除 DaemonSet:当不再需要 DaemonSet 时,可以使用 kubectl delete 命令删除 DaemonSet 对象 。此时,DaemonSet 控制器会删除所有的 Pod 副本 。
以下是一个示例 DaemonSet YAML 文件,其中使用标签选择器来确定在哪些节点上运行该 DaemonSet 的 Pod 副本:
apiVersion: apps/v1kind: DaemonSetmetadata:name: my-daemonsetlabels:app: my-appspec:selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: my-imagecommand: [ "sh", "-c", "echo Hello from the DaemonSet pod && sleep 3600" ]nodeSelector:disktype: ssd
在这个示例中,我们使用 nodeSelector 来指定只在磁盘类型为 ssd 的节点上运行该 DaemonSet 的 Pod 副本 。4、DaemonSet 的更新策略更新策略用于确定如何更新 DaemonSet 对象的 Pod 副本 。在 Kubernetes 中,有以下三种更新策略可供选择:
- RollingUpdate:滚动更新 。这是默认的更新策略 。它允许您将 DaemonSet 的 Pod 副本版本逐个更新 。即首先更新一个节点上的 Pod,然后等待它的更新成功后再更新下一个节点上的 Pod,以此类推 。这种策略确保了在更新期间至少有一个 Pod 副本可用,从而最小化了服务的中断时间 。
- OnDelete:当 DaemonSet 对象的 Pod 副本有更新时,不会自动对旧的 Pod 副本进行更新 。相反,旧的 Pod 副本将在删除后自动被新的 Pod 副本替换 。这种策略适用于不需要连续更新的应用程序 。
- Pause:暂停更新 。这种策略将停止 DaemonSet 的自动更新,直到您手动恢复更新 。这种策略适用于需要手动控制更新过程的应用程序 。
apiVersion: apps/v1kind: DaemonSetmetadata:name: nginx-daemonsetspec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestterminationGracePeriodSeconds: 30updateStrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1
在这个 YAML 文件中,我们定义了一个名为 nginx-daemonset 的 DaemonSet 。该 DaemonSet 会在每个节点上运行一个名为 nginx 的容器 。该容器使用了最新版本的 Nginx 镜像 。容器在终止时有 30 秒的 grace period,以确保正在进行的请求可以完成 。
该 DaemonSet 对象使用 RollingUpdate 策略,并指定了 maxUnavailable 选项,该选项指定了在更新期间最多允许一个 Pod 副本不可用 。这确保了在更新期间始终有至少一个 Pod 副本可用 。
五、DaemonSet 的常见问题及解决方案1、容器无法在节点上创建(1)问题描述当您创建 DaemonSet 时,您可能会遇到以下错误:
Error creating: pods "XXX" is forbidden: node "YYY" cannot be used because it is unschedulable
这个错误消息表示,调度程序无法在某个节点上安排 DaemonSet Pod 的运行 。通常,这是因为节点处于不可调度的状态,例如它被标记为“已维护”或“故障” 。(2)解决方案
推荐阅读
- 巴菲特谈AI:比尔·盖茨拉着我看过 但我现在想到的却是原子弹
- Spring MVC工作流程,你学会了吗?
- 世界冠军|万万没想到,27岁的郭麒麟,会以这种方式“翻车”
- 求职|40岁失业后我不想再找工作了
- 饮食|如果你想瘦快一点,又比较懒,那么就选择168饮食减肥法
- 袁冰妍|四部未播先火的网剧,周也、袁冰妍各有一部,你最想追哪部?
- 朱珠|39岁朱珠,远没有你想的那么“简单”
- 饵料|要想商品饵效果发挥到极致,需从四个方面入手来开制
- 宋喆|马蓉和新欢订婚?带婚戒出镜,曾被曝探监宋喆,花上千万想移民
- 纽约|想不到5月刚开始,郭麒麟就给娱乐圈许多演员,做了表率