k8s教程(pod篇)-DaemonSet(每个node上只调度一个pod)

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

DaemonSetKubernetes1.2 版本新增的一种资源对象,用于管理在集群中的每个Node上仅运行一份Pod的副本实例,如下图所示:
在这里插入图片描述

02 DaemonSet

2.1 应用场景

下面举例DaemonSet的一些使用场景:

  • 在每个Node上都运行一个GlusterFS存储或者Ceph存储的Daemon进程;
  • 在每个Node上都运行一个日志采集程序,例如Fluentd或者Logstach
  • 在每个Node上都运行一个性能监控程序,采集该Node的运行性能数据, 例如Prometheus Node ExportercollectdNew Relic agent或者Ganglia gmond 等。

DaemonSet的Pod调度策略与RC类似,除了使用系统内置的算法在每个Node上进行调度,也可以在Pod的定义中使用NodeSelector或NodeAffinity来指定满足条件的Node范围进行调度

2.2 举例

下面的例子定义了为在每个Node上都启动一个fluentd容器,配置文件 fluentd-ds.yaml的内容如下 (其中挂载了物理机的两个目录"/var/log"和 “/var/lib/docker/containers”):

apiVersion: apps/v1
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: gcr.io/google containers/fluentd-elasticsearch:1.17 
		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: containers
	hostPath:
		path: /var/lib/docker/containers 
	- name: varlog
	hostPath:
		path: /var/log

使用kubectl create命令创建该DaemonSet:

kubectl create -f fluentd-ds.yaml 
daemonset "fluentd-cloud-logging"created

查看创建好的DaemonSetPod,可以看到在每个Node上都创建了一个
Pod
在这里插入图片描述

2.3 注意事项

DaemonSet调度不同于普通的Pod调度,所以没有用默认的Kubernetes Scheduler进行调度,而是通过专有的DaemonSet Controller进行调度。但是随着Kubernetes版本的改进和调度特性不断丰富,产生了一些难以解决的矛盾,最主要的两个矛盾如下:

  • 普通的Pod是在Pending状态触发调度并被实例化的,DaemonSet Controller并不是在这个状态调度Pod的,这种不一致容易误导和迷惑用户
  • Pod优先级调度是被Kubernetes Scheduler执行的,而DaemonSet
    Controller并没有考虑到Pod优先级调度的问题,也产生了不一致的结果

Kubernetes 1.8开始,DaemonSet的调度默认切换到Kubernetes Scheduler进行,从而一劳永逸地解决了以上问题及未来可能的新问题,因为默认切换到了Kubernetes Scheduler统一调度Pod,因此DaemonSet也能正确处理TaintsTolerations的问题。

03 文末

本文主要讲解DaemonSet的概念已经使用场景,希望能帮助到到家,谢谢大家的阅读,本文完!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值