Kubernetes DaemonSet 基础实践指南
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
本文将详细介绍如何在 Kubernetes 集群中使用 DaemonSet 控制器,确保每个节点上都运行一个特定的 Pod 实例。我们将通过一个实际案例,展示如何创建基础 DaemonSet,并解释其核心组件的工作原理。
什么是 DaemonSet?
DaemonSet 是 Kubernetes 中的一种工作负载控制器,它确保集群中所有(或部分)节点上都运行一个 Pod 副本。当有新节点加入集群时,DaemonSet 会自动在新节点上创建 Pod;当节点从集群中移除时,对应的 Pod 也会被垃圾回收。
典型使用场景包括:
- 集群存储守护进程(如 glusterd、ceph)
- 日志收集守护进程(如 fluentd、logstash)
- 节点监控守护进程(如 Prometheus Node Exporter)
实践准备
在开始之前,请确保您已具备以下条件:
- 一个可用的 Kubernetes 集群
- 集群中至少有两个节点(一个控制平面节点和一个工作节点)
- 已配置 kubectl 命令行工具并能够与集群通信
创建基础 DaemonSet
我们将创建一个简单的 DaemonSet,它会在每个节点上运行一个 Pod,该 Pod 包含以下组件:
- init 容器:在 Pod 启动前执行,用于读取节点的
/etc/machine-id
文件内容并记录到日志 - 主容器:使用
pause
容器保持 Pod 运行 - hostPath 卷:将节点的
/etc/machine-id
文件挂载到 Pod 中
以下是完整的 YAML 清单文件:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
name: example-daemonset
template:
metadata:
labels:
name: example-daemonset
spec:
initContainers:
- name: init-log-machine-id
image: busybox
command: ["sh", "-c", "cat /etc/machine-id > /var/log/machine-id.log"]
volumeMounts:
- name: etc-machine-id
mountPath: /etc/machine-id
readOnly: true
- name: log-dir
mountPath: /var/log
containers:
- name: pause
image: k8s.gcr.io/pause
volumes:
- name: etc-machine-id
hostPath:
path: /etc/machine-id
- name: log-dir
hostPath:
path: /var/log
部署与验证
- 应用 DaemonSet 配置:
kubectl apply -f basic-daemonset.yaml
- 检查 DaemonSet 状态:
kubectl get daemonsets
- 查看 Pod 分布情况(每个节点应有一个 Pod):
kubectl get pods -o wide
- 检查 init 容器记录的日志内容:
kubectl exec <pod-name> -- cat /var/log/machine-id.log
关键组件解析
-
init 容器:
- 在 Pod 的主容器启动前运行
- 本例中用于读取主机文件并记录日志
- 必须成功完成才能启动主容器
-
hostPath 卷:
- 将节点文件系统挂载到 Pod 中
- 本例中挂载了
/etc/machine-id
(节点唯一标识文件) - 需要谨慎使用,可能带来安全风险
-
pause 容器:
- 轻量级容器,仅保持 Pod 运行
- 作为 Pod 的基础容器,维持命名空间
清理资源
完成实验后,删除 DaemonSet:
kubectl delete daemonset example-daemonset
进阶学习建议
掌握了基础 DaemonSet 后,您可以进一步探索:
- 滚动更新策略:学习如何安全地更新 DaemonSet 中的 Pod
- 节点选择器:控制 DaemonSet 在特定节点上运行
- 资源限制:为 DaemonSet Pod 设置资源请求和限制
- 污点和容忍度:在带有污点的节点上运行 DaemonSet Pod
通过本文的实践,您应该已经理解了 DaemonSet 的基本概念和使用方法。DaemonSet 是 Kubernetes 中管理节点级别工作负载的强大工具,合理使用可以简化集群管理任务。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考