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-agentbeta.kubernetes.io/os:NotIn:windowsnone注意:这些是默认的容忍度,将由与应用于控制平面节点的污点相匹配的容忍度取代。effect:NoSchedulekey:node-role.kubernetes.io/controlplanevalue:trueeffect:NoSchedulekey:node-role.kubernetes.io/control-planeoperator:Existseffect:NoSchedulekey:node-role.kubernetes.io/masteroperator:Exists
cattle-node-agentbeta.kubernetes.io/os:NotIn:windowsnoneoperator: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配置如下表所示。

权重表达式
100node-role.kubernetes.io/controlplane:In:”true”
100node-role.kubernetes.io/control-plane:In:”true”
100node-role.kubernetes.io/master:In:”true”
1cattle.io/cluster-agent:In:”true”

v2.3.0

适用于 v2.3.0~v2.5.4 之间的版本

组件节点亲和性和节点选择器节点选择器容忍
cattle-cluster-agentbeta.kubernetes.io/os:NotIn:windowsnoneoperator:Exists
cattle-node-agentbeta.kubernetes.io/os:NotIn:windowsnoneoperator:Exists

因为cattle-cluster-agent 部署配置了preferredDuringSchedulingIgnoredDuringExecution相关的首选调度规则设置,所以它会在 controlplane 角色的节点上执行调度。参考Kubernetes: 将 pod 分配给节点,可以找到更多关于调度规则的信息。

preferredDuringSchedulingIgnoredDuringExecution 配置如下表所示:

权重表达式
100node-role.kubernetes.io/controlplane:In:”true”
1node-role.kubernetes.io/etcd:In:”true”