25、k8s-pod的控制器-第四种-DaemonSet(DS)-有几个node就自动创建几个pod
概念:DaemonSet类型的控制器可以保证集群中的每一台(或指定)节点上都运行一个副本、一般适用于日志收集、节点监控场景等、也就是说、如果一个pod
提供的功能是节点级别的(每个节点都需要且只需要一个)、那么这类pod就适合使用DaemonSet类型的控制器创建
DaemonSet的特点:
·每当向集群中添加一个node节点时、DS控制器指定的pod副本就会自动往该新增的node节点上新增pod
·当节点从集群中移除时、pod也就被回收了
DamonSet的yaml清单:
--------------------------------------------------------------------
apiVersion: apps/v1
king: DaemonSet
metadata:
name: daemonset
namespace: dev
labels:
app: nginx-pod
spec:
revisionHistoryLimit: 3 #保留的历史版本
updataStrategy: #更新策略(重建更新、滚动更新、金丝雀发布)
type: RollingUpdata #滚动更新
roolingUpdata:
maxUnavailable: 1 #最大不可用状态的pod的最大值、可以为百分比、也可以为整数
selector: #选择器
matchLabels: #标签匹配规则
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
port:
- containerPort: 80
-------------------------------------------------------------------------------------------------------------------
案例
1、创建ds的yanml文件:
----------------------------------------------------
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
------------------------------------------------------
2、创建ds控制器: kubectl create -f pc-daemonset.yaml
3、查看ds:kubectl get ds -ndev
--------------------------------------------------------------------------------------
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
pc-daemonset 1 1 1 1 1 <none> 49s
#注意由于这里只有一个node节点所以ds指创建了一个pod、如果有多个node节点ds就会自动创建对应的pod
#ds会保证每一个node上都运行一个pod
---------------------------------------------------------------------------------------------------
4、删除ds:kubectl delete -f pc-daemonset.yaml