Rancher Agent

Rancher 管理的集群上部署了两种不同的 Agent 资源:

有关 Rancher Server 如何配置集群并与集群通信的概述,请参阅产品架构

cattle-cluster-agent

cattle-cluster-agent 用于连接 Rancher 启动的 Kubernetes 集群的 Kubernetes API。cattle-cluster-agent 使用 Deployment 资源进行部署。它更优先 control plane 节点而不是 worker 节点。

cattle-node-agent

cattle-node-agent 用于在执行集群操作时与 Rancher 启动的 Kubernetes 集群中的节点进行交互。集群操作包括升级 Kubernetes 版本和创建/恢复 etcd 快照。当 cattle-cluster-agent 不可用时,cattle-node-agent 可以作为备选方案,用来连接 Rancher 启动的 Kubernetes 集群的 Kubernetes API。cattle-node-agent 使用 DaemonSet 资源进行部署,以确保能在每个节点上运行。

调度规则

cattle-cluster-agent 使用如下一组固定的容忍度(如果集群中没有可见的 controlplane 节点),或基于应用于 controlplane 节点的污点动态添加的容忍度。如果集群中存在 controlplane 节点,则集群 agent 的容忍度将替换为与 controlplane 节点上的污点相匹配的容忍度。这种结构允许基于污点进行驱逐cattle-cluster-agent 正常工作。默认的容忍度如下:

组件nodeAffinity nodeSelectorTermsnodeSelector容忍度
cattle-cluster-agentbeta.kubernetes.io/os:NotIn:windowsnone注意:这些是默认容忍度,并将替换为与 controlplane 节点的污点匹配的容忍度。

effect:NoSchedule
key:node-role.kubernetes.io/controlplane
value:true

effect:NoSchedule
key:node-role.kubernetes.io/control-plane
operator:Exists

effect:NoSchedule
key:node-role.kubernetes.io/master
operator:Exists
cattle-node-agentbeta.kubernetes.io/os:NotIn:windowsnoneoperator:Exists

cattle-cluster-agent Deployment 使用 preferredDuringSchedulingIgnoredDuringExecution 的首选调度规则,倾向于在具有 controlplane 节点的节点上进行调度。当集群中没有可见的 controlplane 节点时(通常是使用提供商托管的 Kubernetes 的集群),你可以在节点上添加 cattle.io/cluster-agent=true 标签,从而优先将 cattle-cluster-agent pod 调度到该节点。

有关调度规则的更多信息,请参阅 Kubernetes:将 Pod 分配给节点

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”