Hi,大家好,欢迎大家和我一起学 K8S,这是系列第 9 篇。
和上文中的 Deployment 一样,DaemonSet 也是一种副本管理机制,和 Deployment 可以在每个 Node 上运行好几个 Pod 副本不同的是,DaemonSet 始终保证每个 Node 最多只会运行一个副本,就像它的名称一样,作为一只看门狗(Daemon)守护在主人家里。
那么,哪些应用适合用 DaemonSet 的方式来部署呢?
主要有以下几类:
其中,系统管理类的应用主要是 K8S 自身的一些系统组件,我们可以通过 kubectl get daemonset --namespace=kube-system
查看到:
DaemonSet kube-proxy
和 kube-flannel-ds
有 3 个副本,分别负责在每个节点上运行 kube-proxy 和 flannel 组件。
kube-proxy 前面的文章讲过,它有负载均衡的功能,主要将外部对 Service 的访问导向后端的 Pod 上。显然,一个 Node 运行一个负载均衡器足矣。
我们可以通过 kubectl edit daemonset kube-proxy --namespace=kube-system
来查看 kube-proxy 的 yaml 配置文件。
可以看到它的 kind 是 DaemonSet。
接着再来看 kube-flannel-ds,这是一个网络插件组件,主要用于构建 K8S 的集群网络,这里大家不懂可以跳过,不影响本文的理解,后面在讲到 K8S 网络的时候会重点讲这个网络方案。
这里我们只需要知道,各个 Pod 间的网络连通就是 flannel 来实现的。
这是一个第三方的插件,我们可以直接下载它的 yaml 文件进行安装,执行下面的命令:
wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
得到 kube-flannel.yml 文件:
这里只列出了一部分内容,kind 类型是 DaemonSet。
其实 DaemonSet 配置文件的语法和结构和 Deployment 几乎完全一样,不同就在于将 kind 设为 DaemonSet。