1.DaemonSet基本概述
1.1 什么是DaemonSet
Kubernetes 中的 DaemonSet 是一种控制器,用于确保集群中的每个节点都运行一个 Pod 的副本。与 ReplicaSet 或 Deployment 不同,DaemonSet 中的 Pod 在每个节点上运行一个副本,而不是在整个集群中维护特定数量的副本。
当有节点加⼊集群时, 也会为他们新增⼀个 Pod。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
1.2 DaemonSet典型⽤法
- 在每个节点上运行集群存储守护进程,如:
GLuster、Ceph
- 在每个节点上运行日志收集守护进程,如:
fluentd、Filebeat、Logstash
- 在每个节点上运行监控守护进程,如:
PrometheusNodeExporter
- 在每个节点上运行网络插件为Pod提供网络服务,如:
fLannel、calico
1.3 DaemonSet常用参数
DaemonSet
是标准的API资源类型,它在spec字段中嵌套字段有selector、tempalte
,与Deployment用法基本相同,但DaemonSet 不管理Replicas,因为DaemonSet不是基于期望的副本数
,而是基于节点数量来控制Pod数量
。
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: <string> #资源名称
namespace: <string> #名称空间:DaemonSet资源⾪属于名称空间级别
spec:
minReadySeconds: <integer> #Pod就绪后多少秒内任一容器无崩溃方视为“就绪”
selector: #标签选择器,必须匹配tempLate字段中Pod模板的标签
matchLabels:
name: <string> #选择器标签,DaemonSet控制器⾃动选择符合标签的Pod作为目标
revisionHistoryLimit: <integer> #历史版本数量限制,超过限制的历史版本会被清理掉
updateStrategy:
type: <string> #更新策略,支持OnDelete、RollingUpdate两种类型
rollingUpdate: <Object> #滚动更新参数,专用于RolLingUpdate类型
maxSurge: <string> #最大超载,可以是绝对值(例如50%)或百分比(例如25%)
maxUnavailable: <string> #最大不可用,可以是绝对值(例如50%)或百分比(例如25%)
template: #Pod模板
metadata: #Pod元数据(Pod名称)
spec: #Pod规格(Pod详情)
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: <string> #资源名称
namespace: <string> #名称空间:DaemonSet资源⾪属于名称空间级别
spec:
minReadySeconds: <integer> #Pod就绪后多少秒内任一容器无崩溃方视为“就绪”
selector: #标签选择器,必须匹配tempLate字段中Pod模板的标签
matchLabels:
name: <string> #选择器标签,DaemonSet控制器⾃动选择符合标签的Pod作为目标
revisionHistoryLimit: <integer> #历史版本数量限制,超过限制的历史版本会被清理掉
updateStrategy:
type: <string> #更新策略,支持OnDelete、RollingUpdate两种类型
rollingUpdate: <Object> #滚动更新参数,专用于RolLingUpdate类型
maxSurge: <string> #最大超载,可以是绝对值(例如50%)或百分比(例如25%)
maxUnavailable: <string> #最大不可用,可以是绝对值(例如50%)或百分比(例如25%)
template: #Pod模板
metadata: #Pod元数据(Pod名称)
spec: #Pod规格(Pod详情)
2.DaemonSet部署实践
yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
spec:
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: http
containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 3
readinessProbe:
httpGet:
path: "/"
port: 80
scheme: HTTP
initialDelaySeconds: 3
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
spec:
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: http
containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 3
readinessProbe:
httpGet:
path: "/"
port: 80
scheme: HTTP
initialDelaySeconds: 3
3.DaemonSet更新策略
DaemonSet也⽀持更新策略,它⽀持 OnDelete
和 RollingUpdate
两种
- OnDelete:是在相应节点的Pod资源被删除后重建为新版本,从而允许用户手动编排更新过程
- RollingUpdate:滚动更新,工作逻辑和DepLoyment滚动更新类似