DaemonSet:在每个Node上都调度一个Pod
daemonset是k8s 1.2版本新增的一种资源对象,用于管理在集群中每个Node上仅运行一份Pod的副本实例。这种用法适合有以下需求的应用:在每个node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程。在每个node上都运行一个日志采集程序,例如Fluentd或者Logstach。在每个node上都运行一个性能监控程序,采集该node的运行性能数据...
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”:
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: fluentd-cloud-logging
namespace: kube-system
labels:
k8s-app: fluentd-cloud-logging
spec:
template:
metadata:
namespace: kube-system
labels:
k8s-app: fluentd-cloud-logging
spec:
containers:
- name: fluentd-cloud-logging
image: ist0ne/fluentd-elasticsearch
resources:
limits:
cpu: 100m
memory: 200Mi
env:- name: FLUENTD_ARGS
value: -q
volumeMounts: - name: varlog
mountPath: /var/log
readOnly: false - name: containers
mountPath: /var/lib/docker/containers
readOnly: false
volumes:
- name: FLUENTD_ARGS
- name: containers
hostPath:
path: /var/lib/docker/containers - name: varlog
hostPath:
path: /var/log
在k8s 1.6以后的版本中,daemonset也能执行滚动升级了,即在更新一个daemonset模板的时候,旧的pod副本会被自动删除,同时新的pod副本会被自动创建,此时daemonset的更新策略(updateStrategy)为RollingUpdate,如下所示:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: goldpinger
spec:
updateStrategy:
type: RollingUpdate
updateStrategy 的另外一个值是OnDelete,即只有手动删除了DaemonSet创建的pod副本,新的Pod副本才会被创建出来。如果不设置updateStrategy的值,则在k8s 1.6之后的版本中会被默认设置为RollingUpdate。
更多推荐
所有评论(0)