Kubernetes 守护程序和部署之间的区别

Kubernetes 守护程序和部署之间的区别,kubernetes,Kubernetes,在Kelsey Hightower的《Kubernetes Up and Running》中,他给出了两个命令: kubectl获取守护程序--名称空间=kube系统kube代理 及 kubectl获取部署--名称空间=kube系统kube dns 为什么一个使用守护程序而另一个使用部署? 有什么不同呢?Kubernetes部署管理集群上运行的无状态服务(而不是管理有状态服务的状态集)。它们的目的是保持一组相同的吊舱运行,并以可控的方式升级它们。例如,您在部署定义中定义要运行应用程序的多少个副本

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

kubectl获取守护程序--名称空间=kube系统kube代理

kubectl获取部署--名称空间=kube系统kube dns

为什么一个使用守护程序而另一个使用部署?
有什么不同呢?

Kubernetes部署管理集群上运行的无状态服务(而不是管理有状态服务的状态集)。它们的目的是保持一组相同的吊舱运行,并以可控的方式升级它们。例如,您在部署定义中定义要运行应用程序的多少个副本(
pods
),kubernetes将使应用程序的多个副本分布在节点上。如果你说5个副本超过3个节点,那么一些节点会有多个应用程序的副本在运行

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

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

让我们举一个您在问题中提到的例子,为什么
kube-dns
是部署而
kube-proxy
是守护程序

这背后的原因是集群中的每个节点都需要
kube代理
来运行IP表,这样每个节点都可以访问每个pod,而不管它位于哪个节点上。因此,当我们创建
kube代理
a
daemonset
并在稍后将另一个节点添加到集群时,kube代理将自动在该节点上生成


Kube-dns
的职责是使用其名称发现服务IP,即使是
Kube-dns
的一个副本也足以将服务名称解析为其IP,因此我们进行
Kube-dns
a
部署
,因为我们不需要在每个节点上都使用
Kube-dns

我刚刚发现了这个答案用谷歌搜索这个。谢谢你这么精辟的解释。