混合云节点与边缘节点支持节点自治功能,在和云端网络断连状态下,能够保证节点上的应用持续稳定地运行,而不会被驱逐或者迁移到其他节点。如果没有开启自治功能,网络断连时节点上的应用在到达容忍时间之后将会被驱逐。本文介绍如何开启节点自治功能。
节点自治功能介绍
在混合云和边缘计算场景中,节点与云端管控面之间可能面临链路不稳定、带宽受限或短时断连的问题。Kubernetes 原生机制下,一旦节点无法持续向控制面上报心跳,状态会被标记为 NotReady,并在 Pod 的容忍时间到期后触发驱逐,导致业务服务出现不必要的中断。
混合云节点池和边缘节点池针对以上场景进行了优化,引入节点自治功能,使得在云边断连或网络抖动时,即使节点处于 NotReady,也能避免 Pod 被驱逐,从而保障节点上业务服务的连续稳定运行。该功能主要面向云边链路不完全可靠的场景:
经常短时断连但需要本地连续运行的业务
专线带宽紧张/突发打满导致的控制面不可达
对业务连续性要求高、不能频繁重调度的应用
适用范围
节点自治功能适用于混合云节点池与边缘节点池。
开启节点自治
为集群安装控制面组件yurt-hub-controlplane。如已安装请跳过此步骤。
-
登录容器服务管理控制台,在左侧导航栏选择集群列表。
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
安装yurt-hub-controlplane,无需配置。
-
为节点池安装节点组件 yurt-hub,可以在创建节点池时安装或为现有节点池安装。
创建节点池时安装
创建节点池时,在节点组件管理区域勾选 yurt-hub。
单击 yurt-hub 右侧的配置,在弹出对话框中勾选开启节点自治功能。
(可选)如需在云边断连时缓存 Kubernetes 资源信息,请按需配置 cacheAgents 以开启数据缓存。详细配置方法,请参见配置缓存组件。
创建节点池,节点自治功能将在该节点池中的节点上自动生效。
后续为该节点池添加节点之后,会自动安装 yurt-hub 节点组件。
为现有节点池安装
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击目标节点池ID,在节点池详情页,单击节点组件管理标签页。
单击安装节点组件 ,在列表中选择 yurt-hub,单击下一步。
在参数配置区域,勾选开启节点自治功能。
(可选)如需在云边断连时缓存 Kubernetes 资源信息,请按需配置 cacheAgents 以开启数据缓存。详细配置方法,请参见配置缓存组件。
按需配置批量更新策略,然后完成组件安装,节点将根据策略自动批量更新。
查看 yurt-hub 组件是否正常运行:
kubectl get pods -n kube-system -l app=yurt-hubyurt-hub Pod 状态为 Running,表明组件状态正常。
模拟云边网络断连场景(例如断开节点与云端 API Server 的网络连接),观察节点上的 Pod 是否被驱逐。开启节点自治后,Pod 在断连期间应保持运行状态。
yurt-hub 组件默认延长节点心跳的超时容忍时间,具体时长取决于集群配置。断连恢复后,节点会自动与云端同步状态。
配置缓存组件
yurt-hub会将节点上的应用所需要的API Server相关数据进行缓存(例如Pod、ConfigMap等资源信息,不包含业务数据),在节点池与云端网络中断时也可以确保这些应用可以正常运行,磁盘缓存目录为/etc/kubernetes/cache。如果需要在节点断网的情况下依赖缓存运行,请按如下步骤进行配置:
获取应用的User-Agent,通常是业务容器的启动命令,示例配置如下。如果是社区组件,可以在社区内进行查询。
apiVersion: v1 kind: Pod metadata: name: hybrid-app-pod spec: containers: - name: "hybrid-app" image: "xxx/hybrid-app-amd64:1.18.8" command: - /bin/sh - -ec - | # User-Agent 即为启动命令:hybrid-app /usr/local/bin/hybrid-app --v=2将User-Agent添加到cacheAgents配置项中,然后保存组件配置并更新节点。
配置完成后,对应的组件和API Server之间交互的数据都会保存到节点的磁盘中。
登录节点,进入
/etc/kubernetes/cache。存在名为User-Agent的目录,表明缓存配置成功。
保障自治节点上的 Pod 作为 Service 可用后端
开启节点自治功能之后,节点池与云端断连时,其上运行的 Pod 不会被驱逐。为了进一步实现断连后Pod在节点池内的可用性,可以通过配置Kube Controller Manager组件的特性门控,确保 Pod 在此过程中保持为 Service 的有效后端 Endpoint:
-
在ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,单击组件管理。
选择 Kube Controller Manager组件,单击配置,在featureGates中填入
NodeAutonomyPodProtection=true,然后单击确认。