k8s中DaemonSet控制器
DaemonSet控制器确保k8s集群中,所有节点都运行一个相同的pod,当node节点增加时,新节点也会自动创建一个pod,当node节点从集群移除,对应的pod也会自动删除。删除DaemonSet也会删除创建的pod。
DaemonSet控制器会监听k8s的ds对象、pod对象、node对象,这些被监听的对象变动,就会出发syncLoop循环让k8s集群朝着ds对象魔术的状态进行演进。
应用场景:
在集群每个节点运行存储,如glusterd或ceph
在每个节点运行日志收集组件:如flunentd、logstash、filebeat
在每个节点运行监控组件,如Prometheus、NodeExporter、collectd
以fluntend测试
上传镜像fluentd到harbor
vi daemonset-flunted.yaml
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system # 定义命名空间
labels:
k8s-app: fluentd-logging # 定义标签
spec:
selector:
matchLabels:
name: fluentd-elasticsearch # 匹配标签,与pod一致
template:
metadata:
labels:
name: fluentd-elasticsearch # pod标签
spec:
tolerations: # 定义容忍度,因为要在master上部署
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule # 容忍度调度
containers:
- name: fluentd-elasticsearch
image: 172.16.80.140/fluented/fluented:v2.5.1 # harbor镜像地址
resources: # 资源配额
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts: # 挂载卷
- name: varlog
mountPath: /var/log # 监控/var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers # 监控容器日志
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
手工删除一个pod,ds就会自动创建一个新的pod