Rancher Agent
Rancher 纳管的集群部署有两种不同的 Agent:
有关 Rancher Server 如何设置集群并与之通信的概述,请参阅产品架构。
cattle-cluster-agent
cattle-cluster-agent
用于连接集群的Rancher 部署的 Kubernetes 集群的 Kubernetes API。cattle-cluster-agent
通过 Deployment 的方式部署。
cattle-node-agent
在执行集群操作时,cattle-node-agent
用于和Rancher 部署的 Kubernetes 集群中的节点进行交互。集群操作的示例包括升级 Kubernetes 版本、创建 etcd 快照和恢复 etcd 快照。cattle-node-agent
通过 DaemonSet 的方式部署,以确保其在每个节点上运行。当cattle-cluster-agent
不可用时,cattle-node-agent
将作为备选方案连接到Rancher 部署的 Kubernetes 集群中的 Kubernetes API。
注意: 在 Rancher v2.2.4 及以下版本中,
cattle-node-agent
pod 没有忍受所有的 taints,导致 Kubernetes 升级失败。Rancher v2.2.5 及更高版本中包含了对此问题的修复。
调度规则
v2.5.4
适用于 v2.5.4 及更高版本
从 Rancher v2.5.4 开始,cattle-cluster-agent
的容忍度从 operator:Exists
(允许所有污点)改为固定的容忍度(如下表所示,如果集群中没有可见的控制平面节点)或基于应用于控制平面节点的污点动态添加容忍度。做这个改动是为了让基于污点的驱逐能够对cattle-cluster-agent
正常工作。默认的容忍度描述如下。如果控制平面节点存在于集群中,容忍度将被替换为与 controlplane 节点上的污点相匹配的容忍度。
组件 | 节点亲和性和节点选择器 | 节点选择器 | 容忍 |
---|---|---|---|
cattle-cluster-agent | beta.kubernetes.io/os:NotIn:windows | none | 注意:这些是默认的容忍度,将由与应用于控制平面节点的污点相匹配的容忍度取代。effect:NoSchedule |
cattle-node-agent | beta.kubernetes.io/os:NotIn:windows | none | operator:Exists |
cattle-cluster-agent
部署有优先调度规则,使用preferredDuringSchedulingIgnoredDuringExecution
,倾向于在有controlplane
节点的节点上调度。当集群中没有可见的 controlplane 节点时(这通常是使用Clusters from Hosted Kubernetes Providers时的情况),可以在节点上添加标签cattle.io/cluster-agent=true
,倾向于将cattle-cluster-agent
pod 调度到该节点上。
参见Kubernetes: Assigning Pods to Nodes,可以找到更多关于调度规则的信息。
preferredDuringSchedulingIgnoredDuringExecution
配置如下表所示。
权重 | 表达式 |
---|---|
100 | node-role.kubernetes.io/controlplane:In:”true” |
100 | node-role.kubernetes.io/control-plane:In:”true” |
100 | node-role.kubernetes.io/master:In:”true” |
1 | cattle.io/cluster-agent:In:”true” |
v2.3.0
适用于 v2.3.0~v2.5.4 之间的版本
组件 | 节点亲和性和节点选择器 | 节点选择器 | 容忍 |
---|---|---|---|
cattle-cluster-agent | beta.kubernetes.io/os:NotIn:windows | none | operator:Exists |
cattle-node-agent | beta.kubernetes.io/os:NotIn:windows | none | operator:Exists |
因为cattle-cluster-agent
部署配置了preferredDuringSchedulingIgnoredDuringExecution
相关的首选调度规则设置,所以它会在 controlplane
角色的节点上执行调度。参考Kubernetes: 将 pod 分配给节点,可以找到更多关于调度规则的信息。
preferredDuringSchedulingIgnoredDuringExecution
配置如下表所示:
权重 | 表达式 |
---|---|
100 | node-role.kubernetes.io/controlplane:In:”true” |
1 | node-role.kubernetes.io/etcd:In:”true” |