DaemonSet(DS)
DaemonSet类型的控制器可以保证集群中的每一台(或指定)节点都运行一个副本,一般适用于日志收集、节点监控等常见。也就是说,如果一个pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建。
DaemonSet控制器的特点
- 每当向集群中添加一个节点,指定的pod副本也将添加到该节点上
- 当节点从集群中移除时,pod也被垃圾回收了
下面先来看一下DaemonSet的资源清单文件
apiVersion: apps/v1 版本号
kind: DaemonSet 类型
metadata: 元数据
name: pc-daemonset rs名称
namespace: dev 命名空间
labels: 标签
controller: daemonset
spec: 详情
revisionHistoryLimit: 3 保留历史版本
updateStrategy: 更新策略
type: RollingUpdate 滚动更新策略
rollingUpdate: 滚动更新
maxUnavaiable: 1 最大不可用状态的Pod的最大值,可以为百分比,也可以为整数
selector: 选择器,通过它指定该控制器管理哪些pod
matchLabels: Labels匹配规则
app: nginx-pod
matchExpresssions: Expressions匹配规则
- {
key: app, operator: In, values:[nginx-pod]}
template: 模板,当副本数量不足时,会格局下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- image: nginx:1.17.1
name: nginx
ports:
- containerPort: 80
对资源清单的主体部分的解释
创建pc-daemonset.yaml
apiVersion: apps/v1 版本好
kind: DaemonSet 类型
metadata: 元数据
name: pc-daemonset rs名称
namespace: dev 命名空间
spec: 详情
selector: 选择器,通过它指定该控制器管理哪些pod
matchLabels: Labels匹配规则
app: nginx-pod
template: 模板,当副本数量不足时,会格局下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- image: nginx:1.17.1
name: nginx
创建daemonset
kubectl create -f pc-daemonset.yaml
#查看ds详情,可以看到ds启动了两个pod
kubectl get ds pc-daemonset -n dev
#查看pod详情,可以看到node1和node2各启动了一个pod
kubectl get pod -n dev -o wide
可以发现node1和node2都生成了pod。
暂停调度和驱逐
node1和node2节点,事先对node2节点执行暂停调度,但是DS依然可以将pod部署到node2上面,DS可以无视cordon的暂停调度。同时执行drain驱逐pod,DS部署的pod依然可以无视驱逐,依然running在node2上面。