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.3.0 及更高版本

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

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

requiredDuringSchedulingIgnoredDuringExecution 配置如下表所示:

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