二、DaemonSet控制器
2.1、DaemonSet:服务守护进程,它的主要作用是在Kubernetes集群的所有节点中运行我们部署的守护进程,相当于在集群节点上分别部署Pod副本,如果有新节点加入集群,Daemonset会自动的在该节点上运行我们需要部署的Pod副本,相反如果有节点退出集群,Daemonset也会移除掉部署在旧节点的Pod副本。
2.2 DaemonSet的主要特征:
- 这个 Pod 运行在 Kubernetes 集群里的每一个节点(Node)上;
- 每个节点上只会运行一个这样的 Pod 实例;
- 如果新的节点加入 Kubernetes 集群后,该 Pod 会自动地在新节点上被创建出来;
- 而当旧节点被删除后,它上面的 Pod 也相应地会被回收掉。
2.3 .Daemon Pods的调度特性
默认情况下,Pod被分配到具体哪一台Node上运行是由Scheduler(负责分配调度Pod到集群内的Node上,它通过监听ApiServer,查询还未分配Node的Pod,然后根据调度策略为这些Pod分配Node)决定的。但是,DaemonSet对象创建的Pod却拥有一些特殊的特性:
Node的 unschedulable属性会被DaemonSet Controller忽略。
即使Scheduler还未启动,DaemonSet Controller也能够创建并运行Pod。
2.4 DaemonSet常用场景
- 网络插件的 Agent 组件,如(Flannel,Calico)需要运行在每一个节点上,用来处理这个节点上的容器网络;
- 存储插件的 Agent 组件,如(Ceph,Glusterfs)需要运行在每一个节点上,用来在这个节点上挂载F远程存储目录
- 监控系统的数据收集组件,如(Prometheus Node Exporter,Cadvisor)需要运行在每一个节点上,负责这个节点上的监控信息搜集。
- 日志系统的数据收集组件,如(Fluent,Logstash)需要运行在每一个节点上,负责这个节点上的日志信息搜集。
2.5 创建daemonset控制器
下面的资源清单,定义一个DaemonSet资源:
DaemonSet必须使用selector来匹配Pod模板中指定的标签,而且它也支持matchLabels和matchExpressions两种标签选择器。
创建资源对象
$ kubectl apply -f filebeat-ds.yaml
查看资源信息
2.6 更新DaemonSet对象
DaemonSet支持更新机制,相关配置定义在spec.update-Strategy嵌套字段中。目前,它支持RollingUpdate(滚动更新)和OnDelete(删除时更新)两种更新策略,滚动更新为默认的更新策略,工作逻辑类似于Deployment控制,不过仅支持使用maxUnavailabe属性定义最大不可用Pod资源副本数(默认值为1),而删除时更新的方式则是在删除相应节点的Pod资源后重建并更新为新版本。
将此前创建的filebeat-ds中Pod模板中的容器镜像升级
$ kubectl set image daemonsets filebeat-daemonset filebeat=192.168.10.110/k8s/filebeat:5.6.6
查看镜像信息
$ kubectl get pod -o custom-columns=pod_name:metadata.name,pod_image:spec.containers[0].image