pod调度之DaemonSet
2020-07-18 09:07
113 查看
DaemonSet是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。
这种用法适合有以下需求的应用:
- 在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。
- 在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。
- 在每个node上都运行一个性能监控程序,采集该node的运行性能数据,例如prometheus node exporter、colletcd、new relic agent,或者ganglia gmond等。
DaemonSet的pod调度策略与rc类似,除了使用系统内置的算法在每个node上进行调度,也可以在pod的定义中使用NodeSelector或NodeAffinity来指定满足条件的node范围进行调度。
下面的例子定义为每个node上都启动一个fluentd容器,配置文件fluentd-ds.yaml的内容如下,其中挂载了物理机的两个目录“/var/log”和“/var/lib/docker/containers”:
vim fluentd-ds.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: containers: - name: fluentd-elasticsearch image: govtechsg/fluentd-elasticsearch resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
查看创建好的DaemonSet 和Pod ,可以看到在每个node上都创建了一个pod
[root@bogon ~]# kubectl get daemonset -A NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE kube-system fluentd-elasticsearch 2 2 2 2 2 <none> 17m
[root@bogon ~]# kubectl get pod -o wide --namespace=kube-system NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES fluentd-elasticsearch-758zp 1/1 Running 0 3m52s 172.17.0.6 kafka03 <none> <none> fluentd-elasticsearch-h4x6m 1/1 Running 0 19m 172.17.0.6 server01 <none> <none>
滚动更新
v1.6 + 支持 DaemonSet 的滚动更新,可以通过 .spec.updateStrategy.type 设置更新策略。目前支持两种策略:
- OnDelete:更新模板后,只有手动删除了旧的 Pod 后才会创建新的 Pod
- RollingUpdate:默认策略。更新 DaemonSet 模版后,自动删除旧的 Pod 并创建新的 Pod
在使用 RollingUpdate 策略时,还可以设置:
- spec.updateStrategy.rollingUpdate.maxUnavailable, 默认 1
- spec.minReadySeconds,默认 0
回滚
v1.7 + 还支持回滚
# 查询历史版本 $ kubectl rollout history daemonset <daemonset-name> # 查询某个历史版本的详细信息 $ kubectl rollout history daemonset <daemonset-name> --revision=1 # 回滚 $ kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision> # 查询回滚状态 $ kubectl rollout status ds/<daemonset-name>
相关文章推荐
- java的调度、优先级setPriority、yield、jion和守护线程setDaemon
- pod调度之StatefulSet
- [k8s]zookeeper集群在k8s的搭建(statefulset模式)-pod的调度
- How to Set Up an Rsync Daemon on Your Linux Server
- Python中threading的join和setDaemon的区别及用法[例子]
- join和setdaemon()初探
- Kubernetes1.6新特性:POD高级调度-亲和性/反亲和性特性
- pod调度之CrontJob:定时任务
- Java的Thread.setDaemon
- Thread.setDaemon设置说明
- 线程类Thread的API接口分析系列之守护线程setDaemon
- [Java] Thread.setDaemon(boolean) 后台进程
- join 和 setDaemon(Python)
- (set)列车调度
- Kubernetes之Pod调度
- Java线程--interrupt join yield setDaemon常用方法的使用
- Thread.setDaemon的用法
- Kubernetes1.6新特性:POD高级调度-污点和容忍特性/报告节点问题特性
- 【Java基础】Thread setDaemon 方法
- Python中threading的join和setDaemon的区别及用法[例子]