2、DaemonSet控制器工作原理
DaemonSet控制器会监听K8s的daemonset对象、pod对象、node对象,如果这些被监听的对象变动,就会触发syncLoop循环,让K8s集群朝着daemonset对象描述的状态进行演进。
3、DaemonSet典型应用场景
- 日志和指标收集:在每个节点上运行日志和指标收集器,比如flunentd 、 logstash、filebeat等。
- 数据存储:在每个节点上运行数据存储,比如glusterd 、ceph等。
- 监控组件:在每个节点上运行监控组件,比如prometheus、node_exporter、collectd等。
4、DaemonSet与Deployment的区别
- deployment创建出来的Pod,会分布在各个Node节点,每个节点都可能运行好几个副本。
- daemonset创建出来的Pod,每个Node节点上最多只能运行一个Pod副本,通常用来运行后台服务和守护进程应用程序。
因此,一般情况下,如果要部署后台服务和守护进程等单节点应用程序,可以使用DaemonSet;如果需要部署复杂的应用程序,如Web服务等,那就需要使用deployment了。
二、案例:DaemonSet控制器实战演示
1、使用DaemonSet部署日志收集组件
部署 fluentd 日志收集组件(只简单演示DaemonSet使用,并非做ELK整体实验)YAML资源清单如下:
cat fluentd-daemonset.yaml
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: elasticsearch-fluentd
namespace: default
spec:
selector:
matchLabels:
app: elasticsearch-fluentd
template:
metadata:
labels:
app: elasticsearch-fluentd
spec:
tolerations: # 定义容忍度,运行在master节点运行(根据自己master的污点定义)
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
volumes: # 定义卷名称为 system-log
- name: system-log
hostPath:
path: /var/log
containers:
- name: elasticsearch-fluentd
image: qinziteng/fluentd:2.5.1
imagePullPolicy: IfNotPresent
resources: # 定义资源限制
requests:
cpu: 100m
memory: 300Mi
limits:
memory: 300Mi
volumeMounts:
- name: system-log # 使用system-log卷,挂载到容器/var/log目录
mountPath: /var/log
执行YAML文件:
kubectl apply -f fluentd-daemonset.yaml
查看Pod状态,如下图可以看到分包在K8s集群每个节点上创建Pod
kubectl get pods -o wide
2、DaemonSet管理Pod滚动更新
DaemonSet更新策略在 spec.updateStrategy 字段定义,目前支持两种更新策略:
- rollingUpdate:由于daemonset不支持一个节点运行多个Pod,所以rollingUpdate更新策略是先删除在更新。
- OnDelete:默认不做更新,需要手动删除后更新。
第一步:创建daemonset资源并使用 nginx:1.18.0 镜像,YAML 如下:
cat web-daemonset.yaml
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: web-daemonset
namespace: default
spec:
updateStrategy:
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
app: web-daemonset
template:
metadata:
labels:
app: web-daemonset
spec:
tolerations:
- effect: NoSchedule # 容忍度根据master 污点定义
key: node-role.kubernetes.io/control-plane
containers:
- name: web-daemonset
image: nginx:1.18.0
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 300Mi
limits:
memory: 300Mi
执行YAML 文件:
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化! 详情docs.qq.com/doc/DSmdCdUNwcEJDTXFK