7、K8S-daemonset控制器
K8S-daemonset控制器文章目录K8S-daemonset控制器一、 DaemonSet 概述DaemonSet 工作原理Daemonset 典型的应用场景DaemonSet 与 Deployment 的区别二、DaemonSet 资源清单文件编写技巧清单模版三、DaemonSet 使用案例一、 DaemonSet 概述DaemonSet 控制器能够确保 k8s 集群所有的节点都运行一个相同的 pod 副本当向 k8s 集群中增加 node 节点时这个 node 节点也会自动创建一个 pod 副本当 node 节点从 集群移除这些 pod 也会自动删除删除 Daemonset 也会删除它们创建的 podDaemonSet 工作原理daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象这些被监听的对象之变动就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象描述的状态进行演进。Daemonset 典型的应用场景在集群的每个节点上运行存储比如glusterd 或 ceph。 在每个节点上运行日志收集组件比如flunentd 、 logstash、filebeat 等。 在每个节点上运行监控组件比如Prometheus、 Node Exporter 、collectd 等。DaemonSet 与 Deployment 的区别Deployment 部署的副本 Pod 会分布在各个 Node 上每个 Node 都可能运行好几个副本。DaemonSet 的不同之处在于每个 Node 上最多只能运行一个副本。二、DaemonSet 资源清单文件编写技巧[rootk8s-master01 ~]# kubectl explain ds字段作用apiVersion当前资源使用的 api 版本跟 VERSION: apps/v1 保持 一致kind资源类型跟 KIND: DaemonSet 保持一致metadata元数据定义 DaemonSet 名字的spec定义容器的status状态信息不能改[rootk8s-master01 ~]# kubectl explain ds.spec字段作用minReadySeconds当新的 pod 启动几秒种后再 kill 掉旧的 pod。revisionHistoryLimit历史版本selector -required-用于匹配 pod 的标签选择器template -required-定义 Pod 的模板基于这个模板定义的所有 pod 是一样的updateStrategydaemonset 的升级策略[rootk8s-master01 ~]# kubectl explain ds.spec.template字段作用containers容器配置列表。每个元素都描述了一个要运行在Pod内的容器。initContainers化容器配置列表。这些容器在主容器之前运行用于设置环境或执行预备工作。ephemeralContainers临时容器配置列表。这些容器是临时的仅在Pod运行时存在。restartPolicyPod的重启策略。可以是Always、OnFailure或Never。terminationGracePeriodSeconds优雅终止周期以秒为单位。在强制终止Pod前系统将等待此周期内的终止。activeDeadlineSecondsPod活动的截止时间超过此时间系统将杀死Pod。dnsPolicyPod的DNS策略可以是ClusterFirst、ClusterFirstWithHostNet、Default或None。ContextPod的安全上下文用于设置Pod的安全相关属性如RBAC规则、SELinux标签等。schedulerName调度器名称用于指定用于调度Pod的特定调度器。tolerationsPod容忍的污点用于允许Pod调度到有特定污点的节点上。affinityPod的亲和性设置用于指定Pod偏好或必须运行的节点属性。hostNetwork如果设置为trueP将使用主机的网络命名空间。imagePullSecrets用于获取镜像的密钥这些密钥会被注入到Pod中。configMapConfigMap的名称和键值对列表用于注入配置数据到PodsecretSecret的名称和键值对列表用于注入敏感数据到Pod。volumeMounts卷挂载配置列表用于指定Pod中容器如何挂载卷。volumes卷配置列表为Pod中的容器存储卷。清单模版apiVersion:apps/v1kind:DaemonSetmetadata:#元数据定义 DaemonSet 名字的name:pod-controller# ds名称labels:# 给ds打标签controller:daemonset#控制器spec:revisionHistoryLimit:3# 保留历史版本数量默认为10updateStrategy:# Pod更新策略默认是RollingUpdatetype:RollingUpdate# 滚动更新策略。另一种是OnDelete其没有子属性配置参数rollingUpdate:# 当type为RollingUpdate的时候生效为其配置参数maxSurge:25%# 升级过程中可以超过期望的Pod的最大数量可以为百分比也可以为整数。默认是25%maxUnavailable:25%# 升级过程中最大不可用状态的Pod数量可以为百分比也可以为整数。默认是25%selector:# 选择器通过该控制器管理哪些podmatchLabels:# Labels匹配规则。和matchExpressions类似app:nginx-pod###或者matchExpressions:# Expressions匹配规则。和matchLabels类似-{key:app,operator:In,values:[nginx-pod]}template:# pod副本创建模板。属性和Pod的属性一样metadata:labels:app:nginx-podspec:containers:-name:nginximage:nginx:latestports:-name:nginx-portcontainerPort:80protocol:TCP三、DaemonSet 使用案例[rootk8s-master01 ~]# cat pod-controller.yamlapiVersion: apps/v1 kind: DaemonSet metadata: name: pod-controller labels: controller: daemonset spec: selector: matchLabels: app: nginx-pod template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:latest ports: - name: nginx-port containerPort:80protocol: TCP##查看[rootk8s-master01 ~]# kubectl apply -f pod-controller.yamldaemonset.apps/pod-controller createdprotocol: TCP##查看[rootk8s-master01 ~]# kubectl apply -f pod-controller.yamldaemonset.apps/pod-controller created