
文章插图
例如,CNI(Container Network Interface)插件负责为 Kubernetes 集群中的容器分配 IP 地址和路由信息,因此需要在每个节点上运行 。Kubernetes 官方提供的 CNI 插件就是以 DaemonSet 的形式运行在每个节点上的 。
下面是部署 CNI 插件的示例 YAML 文件:
apiVersion: apps/v1kind: DaemonSetmetadata:name: kube-flannel-ds-amd64namespace: kube-systemlabels:tier: nodeapp: flannelspec:selector:matchLabels:app: flannelupdateStrategy:type: RollingUpdatetemplate:metadata:labels:app: flannelspec:containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.14.0command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgr- --iface=enp0s8# 这里需要根据实际网络接口修改securityContext:privileged: trueenv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespacevolumeMounts:- name: flannel-cfgmountPath: /etc/kube-flannel/hostNetwork: truevolumes:- name: flannel-cfgconfigMap:name: kube-flannel-cfg在这个 YAML 文件中,我们使用 apps/v1 API 版本创建了一个名为 kube-flannel-ds-amd64 的 DaemonSet 。它的 selector 字段指定了需要运行这个 DaemonSet 的 Pod 的标签,updateStrategy 指定了更新策略,这里使用的是滚动更新 。template 字段定义了 Pod 的模板,包括容器、挂载的卷和命令参数等 。这个 YAML 文件中定义了一个名为 kube-flannel 的容器,使用 quay.io/coreos/flannel:v0.14.0 镜像,并将容器的网络接口设置为 enp0s8 。该容器还从 configMap 挂载了配置文件,并开启了特权模式 。
4、在节点上运行工具除了守护进程、普通容器和控制器之外,还可以使用 DaemonSet 在每个节点上运行工具 。这些工具通常用于调试、监控和诊断集群状态 。

文章插图
例如,使用 DaemonSet在每个节点上运行诊断工具的示例 YAML 文件如下所示:
apiVersion: apps/v1kind: DaemonSetmetadata:name: diagnostic-toolspec:selector:matchLabels:app: diagnostic-tooltemplate:metadata:labels:app: diagnostic-toolspec:containers:- name: diagnostic-toolimage: your-Docker-imagecommand:- sh- -c- |while true; do# do some diagnostic taskssleep 60donevolumeMounts:- name: host-var-runmountPath: /host/var/runreadOnly: truevolumes:- name: host-var-runhostPath:path: /var/run在这个 YAML 文件中,我们定义了一个名为 diagnostic-tool 的 DaemonSet 。该 DaemonSet 会在每个节点上运行一个名为 diagnostic-tool 的容器 。该容器使用一个自定义的 Docker 镜像,并执行一个 while 循环,在其中执行一些诊断任务 。此外,容器还将节点上的 /var/run 目录挂载到容器中的 /host/var/run 目录下,以便读取节点上的运行时信息 。
使用 DaemonSet 运行诊断工具可以快速定位节点和集群级别的问题,例如网络问题、存储问题和性能问题等 。
四、DaemonSet 对象详解1、DaemonSet的结构及其各个部分的作用DaemonSet 是 Kubernetes 中一种类型的控制器对象,用于在每个节点上运行一个 Pod 副本版本,确保每个节点上都有一个或多个 Pod 副本 。DaemonSet 控制器可以保证在新增节点时自动在新增的节点上创建 Pod 副本,同时在节点删除时,自动删除该节点上的 Pod 副本 。

文章插图
在 DaemonSet 对象中,有以下几个部分:
- metadata:元数据部分包含了对象的名称、命名空间、标签等信息 。
- spec:规格部分包含了 DaemonSet 对象的规格,如选择器、Pod 模板等 。
- status:状态部分包含了 DaemonSet 对象的当前状态信息,如运行中的 Pod 数量等 。
- selector:指定了哪些节点需要运行 Pod 副本 。可以使用节点标签选择器指定节点的标签,也可以使用节点名称选择器指定节点的名称 。
- template:指定了要运行在节点上的 Pod 模板 。模板中可以指定容器镜像、启动命令等信息 。
- updateStrategy:指定了 DaemonSet 的更新策略 。默认情况下,DaemonSet 会在每个节点上运行一个 Pod 副本,如果需要更新 Pod 版本,则会逐个节点进行更新 。可以使用 RollingUpdate 策略实现平滑的更新过程,也可以使用 OnDelete 策略实现在节点删除时更新 Pod 版本 。
推荐阅读
- 巴菲特谈AI:比尔·盖茨拉着我看过 但我现在想到的却是原子弹
- Spring MVC工作流程,你学会了吗?
- 世界冠军|万万没想到,27岁的郭麒麟,会以这种方式“翻车”
- 求职|40岁失业后我不想再找工作了
- 饮食|如果你想瘦快一点,又比较懒,那么就选择168饮食减肥法
- 袁冰妍|四部未播先火的网剧,周也、袁冰妍各有一部,你最想追哪部?
- 朱珠|39岁朱珠,远没有你想的那么“简单”
- 饵料|要想商品饵效果发挥到极致,需从四个方面入手来开制
- 宋喆|马蓉和新欢订婚?带婚戒出镜,曾被曝探监宋喆,花上千万想移民
- 纽约|想不到5月刚开始,郭麒麟就给娱乐圈许多演员,做了表率
