DaemonSet概念及常用操作
DaemonSet(在全部节点运行pod副本)
参考: https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/
DaemonSet功能:
- 在每个Node上运行一个Pod
- 在新加入的Node上也同样会自动运行一个Pod
- 应用场景:
- 后台支撑服务集(守护应用):
- CNI网络插件
- 监控Agent
- 日志Agent
- 分布式存储;
例如: K8S集群中的CNI插件.
长期伺服型和批处理型服务的核心在业务应用,可能有些节点运行多个同类业务的Pod,有些节点上又没有这类Pod运行;而后台支撑型服务的核心关注点在K8s集群中的节点(物理机或虚拟机),要保证每个节点上都有一个此类Pod运行。节点可能是所有集群节点也可能是通过nodeSelector选定的一些特定节点。典型的后台支撑型服务包括,存储,日志和监控等在每个节点上支撑K8s集群运行的服务。
创建DaemonSet
参考: 创建DaemonSet
DaemonSet默认不容忍污点,有污点
的Node上默认不会运行pod
DaemonSet不需要配置副本数
# 创建DaemonSet
kubectl create daemonset 应用名 --image=镜像名 -oyaml --dry-run > d1.yaml
DaemonSet的yaml示例
参考: 什么是 terminationGracePeriodSeconds
DaemonSet不需要配置副本数
注意!!!
想让pod在有污点的node上运行,需要容忍
所有effect值
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:
# 容忍
tolerations:
# 容忍所有effect值
# 容忍所有effect值为NoSchedule的污点
- effect: NoSchedule
operator: Exists
# 容忍所有effect值为PreferNoSchedule的污点
- effect: PreferNoSchedule
operator: Exists
# 容忍所有effect值为NoExecute的污点
- effect: NoExecute
operator: Exists
# 关闭程序前的缓冲时间
terminationGracePeriodSeconds: 30
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
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