守护程序集与部署之间的区别

Sno*_*ash 10 kubernetes

在Kelsey Hightower的Kubernetes Up and Running中,他给出了两个命令:

kubectl get daemonSets --namespace=kube-system kube-proxy

kubectl get deployments --namespace=kube-system kube-dns

为什么一个使用daemonSets而另一个使用呢?有什么区别?

Pra*_*dha 23

Kubernetes部署管理在您的集群上运行的无状态服务(与之相反,例如管理有状态服务的StatefulSet)。他们的目的是保持一组相同的Pod运行并以受控方式对其进行升级。例如,您pods在部署定义中定义了要运行的应用程序的复本()数,而kubernetes将使应用程序的复本散布在节点上。如果您说5个副本超过3个节点,则某些节点正在运行您的应用程序的多个副本。

DaemonSets管理复制的Pod组。但是,DaemonSets尝试在整个集群或节点子集上遵循每个节点一个Pod的模型。守护程序在每个节点上最多可以运行一个副本。使用Daemonset的另一个优点是,如果将节点添加到集群,则Daemonset将自动在该节点上生成Pod,而部署不会这样做。

DaemonSets对于部署正在进行的后台任务很有用,这些任务需要在所有或某些节点上运行,并且不需要用户干预。此类任务的示例包括存储守护程序(如)ceph,日志收集守护程序(如fluentd)和节点监视守护程序(如)collectd

让我们以您提到的问题为例,为什么kube-dns要部署并且kube-proxy是daemonset?

kube-proxy群集中的每个节点都需要运行它的原因来运行IP表,以便每个节点都可以访问每个Pod,无论它位于哪个节点上。因此,当我们创建kube-proxy一个daemonset节点并在稍后将另一个节点添加到集群时,会自动在该节点上生成kube-proxy。

Kube-dns责任是使用服务的名称来发现服务IP,甚至一个副本kube-dns也足以将服务名称解析为其IP,因此我们做kube-dns了一个,deployment因为我们不需要kube-dns每个节点。

  • 我在谷歌搜索后刚刚发现了这个答案。感谢您提供如此措辞良好的解释。 (4认同)