OpenKruise
插件简介
OpenKruise是一个基于Kubernetes的扩展套件,使用CRD拓展来提供扩展工作负载和应用管理能力,实现云原生应用的自动化部署、发布、运维和可用性防护,使得应用的管理更加简单和高效。
OpenKruise的核心能力如下:
- 高级工作负载:OpenKruise包含一系列增强版本的工作负载,例如CloneSet、Advanced StatefulSet等工作负载。
- 应用sidecar管理:OpenKruise提供了多种SidecarSet,简化了sidecar的注入,并提供了sidecar原地升级的能力。
- 应用安全防护:OpenKruise可以保护您的Kubernetes资源不受级联删除机制的干扰。
- 高效应用运维能力:OpenKruise提供了很多高级的运维能力来帮助您更好地管理应用,例如使用ImagePullJob在任意范围的节点上预先拉取某些镜像,或者原地重启Pod中的容器等。
约束与限制
如果您已经在集群中部署了社区的OpenKruise,请您先将其卸载后再安装CCE提供的OpenKruise插件,否则可能会出现插件安装失败的情况。
注意事项
OpenKruise开源组件中,引入了Webhook的配置,社区将其默认配置的Pod相关失效策略为Fail,这意味着一旦kruise-controller-manager处于不可用状态,将会造成Pod的创建/删除等操作都将会被拦截。因此在使用该插件前,请慎重评估使用该插件所引入的风险,并且尽量将kruise-controller-manager组件配置为多实例的高可用状态,以确保kruise-controller-manager中的Webhook Server能够正常处理请求。
OpenKurise是CCE基于开源软件进行适配并集成的精选开源插件,CCE将提供全面的技术支持服务。然而,CCE不承担因开源软件缺陷导致的业务损失责任,也不承担赔偿或额外的服务,强烈建议用户定期升级软件以修复潜在问题。
安装步骤
- 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到OpenKruise插件,单击“安装”。
- 在安装插件页面,根据需求选择“规格配置”。
- 选择“系统预置规格”时,您可根据集群规模选择“小规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
“小规格”为单实例部署,适用50节点以下集群规模;“大规格”为高可用部署,适用50节点以上集群规模。
- 选择“自定义规格”时,您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。
- 选择“系统预置规格”时,您可根据集群规模选择“小规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。
- 选择是否开启“kruise-daemon配置”。
kruise-daemon是OpenKruise新增的DaemonSet组件,可为您提供镜像预热、容器重启功能。
在v1.25及以上版本的集群中安装1.0.3版本的OpenKruise插件时,kruise-daemon无法在使用docker容器引擎的节点上运行,请使用containerd容器引擎。详细原因请参见组件说明。
- 设置插件实例的部署策略。
- 调度策略对于DaemonSet类型的插件实例不会生效。
- 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
表1 插件调度配置 参数
参数说明
多可用区部署
- 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
- 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
- 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。
节点亲和
容忍策略
容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。
插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。
详情请参见设置容忍策略。
- 单击“安装”。
组件说明
容器组件 |
说明 |
资源类型 |
---|---|---|
kruise-controller-manager |
OpenKruise的controller中心组件,同时包含了针对Kruise CRD以及Pod资源的admission webhook。kruise-controller-manager会创建webhook configurations来配置哪些资源需要感知处理,并为kube-apiserver提供可调用的Service。 |
Deployment |
kruise-daemon |
通过DaemonSet部署到每个节点上,提供镜像预热、容器重启等功能。 |
DaemonSet |
Kubernetes社区在1.24版本移除了对dockershim的支持。CCE为兼顾用户使用docker运行时的习惯,在CCE的v1.25及以上的集群版本引入了cri-dockerd用于替换原来的dockershim,但是OpenKruise社区当前并未实现对cri-dockerd的支持(参见issue)。该问题将在后续版本中解决。
因此,在v1.25及以上版本的集群中安装1.0.3版本的OpenKruise插件时,kruise-daemon无法在使用docker容器引擎的节点上运行,请使用containerd容器引擎。
常见问题
创建工作负载时,事件中出现以下报错:
Error creating: Internal error occurred: failed calling webhook "mpod.kb.io": failed to call webhook: Post "https://kruise-webhook-service.kube-system.svc:443/mutate-pod?timeout=10s": dial tcp 10.247.10.181:443: connect: connection refused
出现以上问题的原因是kurise-controller-manager组件不可用,导致部分命名空间下(非kube-system命名空间或不带control-plane: openkruise标签的命名空间)的Pod进行创建/更新/删除操作均会被拦截。
解决方案:
将kruise-controller-manager组件恢复正常即可正常调度。造成kruise-controller-manager异常的原因及解决建议如下:
- kruise-controller-manager所需的资源不够无法正常调度:建议为插件配置合理的资源。
- kruise-controller-manager配置了调度或亲和策略导致该Pod无法被正常调度:建议检查调度策略并配置合适的调度策略,以确保kruise-controller-manager被正常调度。