【原文链接】
一、DaemonSet控制器简介
1.1 DaemonSet控制器简介
DaemonSet类型的控制器可以保证集群中的每一台(或者指定)节点上都运行一个副本,一般使用与日志收集节点监控等场景,也就是说,如果一个pod提供的功能是节点级别的(每个节点都需要且只需要一个),name这里pod就适合使用DaemonSet类型的控制器创建
DaemonSet控制器特点
- 每当向集群中添加一个节点是,指定的pod副本也将添加到该节点
- 当节点从集群中移除时,pod也就被垃圾回收了
1.2 DaemonSet控制资源文件
apiVersion: apps/v1 # 版本号
kind: DaemonSet # 类型
metadata: 元数据
name: # ds名称
namespace: # 所属命名空间
labels: # 标签
controller: daemonset
spec: # 详情描述
revisionHistoryLimit: 3 # 保留历史版本
updateStrategy: # 更新策略
type: RollingUpdate # 滚动更新策略
rollingUpdate: # 滚动更新
maxUnavailable: 1 # 最大不可用状态的Pod的最大值,可以为百分比,也可以为整数
selector: # 选择器,通过它指定该控制器管理哪些Pod
matchLabels: # Label匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
二、DaemonSet控制器实例演示
首先编辑pod_daemonset.yaml文件,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: pc-daemonset
namespace: dev
spec:
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
使用如下命令创建
[root@master pod_controller]# kubectl apply -f pod_daemonset.yaml
namespace/dev created
daemonset.apps/pc-daemonset created
[root@master pod_controller]#
如下,可以发现自动创建了个两个pod,即每个节点一个pod
[root@master pod_controller]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pc-daemonset-4rlpt 1/1 Running 0 113s 10.244.1.71 node1 <none> <none>
pc-daemonset-9px7p 1/1 Running 0 113s 10.244.2.87 node2 <none> <none>
[root@master pod_controller]#
使用如下命令删除
[root@master pod_controller]# kubectl delete -f pod_daemonset.yaml
namespace "dev" deleted
daemonset.apps "pc-daemonset" deleted
[root@master pod_controller]#