DaemonSet示例
DaemonSet是Kubernetes中的一种工作负载类型,专门用来确保集群中的每个(或指定的)节点上都运行一个Pod实例。它非常适用于需要在集群所有节点上提供服务的场景,比如日志收集、监控代理、或者网络插件。
以下是DaemonSet的创建示例:
定义YAML文件daemonset-demo.yml:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemon
template:
metadata:
labels:
app: my-daemon
spec:
containers:
- name: my-container
image: my-image
updateStrategy:
type: RollingUpdate # 或 OnDelete
使用kubectl apply
命令创建 DaemonSet
kubectl apply -f daemonset-demo.yml
查看 DaemonSet 的状态
kubectl get daemonset
DaemonSet作用
1.全节点部署:确保集群中的每个节点上都运行且只运行一个指定的Pod。
2.新节点自动部署:当有新节点加入集群时,DaemonSet会自动在新节点上调度和运行Pod。
3.指定节点调度:可以通过设置节点选择器(nodeselector)、节点亲和性(nodeaffinity)、污点和容忍(taintsandtolerations)来控制DaemonSet的Pod只在部分节点上运行。
应用场景:
集群级别的监控代理(如PrometheusNodeExporter)
日志收集(如Fluentd、Filebeat)
网络插件(如CNI插件)
DaemonSet更新
DaemonSet支持滚动更新策略(RollingUpdate)和删除后更新策略(OnDelete)。当配置变更时,滚动更新会逐个更新每个节点上的Pod。
滚动更新:
默认的更新策略,当DaemonSet的Pod模板变更时,会逐步终止旧的Pod并启动新的Pod,确保服务不中断。
手动更新:
OnDelete策略意味着只有在旧Pod被删除时才会创建新Pod,适用于需要更严格控制更新过程的场景。
回滚:
同Deployment一样,DaemonSet回滚方法比较简单
kubectl rollout history my-daemonset
此命令返回 DaemonSet 版本列表:
daemonsets "my-daemonset"
REVISION CHANGE-CAUSE
1 ...
2 ...
...
回滚到版本1
kubectl rollout history daemonset my-daemonset --revision=1