更新时间:2024-11-12 GMT+08:00

OpenKruise

插件简介

OpenKruise是一个基于Kubernetes的扩展套件,使用CRD拓展来提供扩展工作负载和应用管理能力,实现云原生应用的自动化部署、发布、运维和可用性防护,使得应用的管理更加简单和高效。

OpenKruise的核心能力如下:

  • 高级工作负载:OpenKruise包含一系列增强版本的工作负载,例如CloneSet、Advanced StatefulSet等工作负载。
  • 应用sidecar管理:OpenKruise提供了多种SidecarSet,简化了sidecar的注入,并提供了sidecar原地升级的能力。
  • 应用安全防护:OpenKruise可以保护您的Kubernetes资源不受级联删除机制的干扰。
  • 高效应用运维能力:OpenKruise提供了很多高级的运维能力来帮助您更好地管理应用,例如使用ImagePullJob在任意范围的节点上预先拉取某些镜像,或者原地重启Pod中的容器等。

开源社区地址:https://github.com/openkruise/kruise

约束与限制

如果您已经在集群中部署了社区的OpenKruise,请您先将其卸载后再安装CCE提供的OpenKruise插件,否则可能会出现插件安装失败的情况。

注意事项

OpenKruise开源组件中,引入了Webhook的配置,社区将其默认配置的Pod相关失效策略为Fail,这意味着一旦kruise-controller-manager处于不可用状态,将会造成Pod的创建/删除等操作都将会被拦截。因此在使用该插件前,请慎重评估使用该插件所引入的风险,并且尽量将kruise-controller-manager组件配置为多实例的高可用状态,以确保kruise-controller-manager中的Webhook Server能够正常处理请求。

OpenKurise是CCE基于开源软件进行适配并集成的精选开源插件,CCE将提供全面的技术支持服务。然而,CCE不承担因开源软件缺陷导致的业务损失责任,也不承担赔偿或额外的服务,强烈建议用户定期升级软件以修复潜在问题。

安装步骤

  1. 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到OpenKruise插件,单击“安装”
  2. 在安装插件页面,根据需求选择“规格配置”

    • 选择“系统预置规格”时,您可根据集群规模选择“小规格”或“大规格”,系统会根据不同的预置规格配置插件的实例数及资源配额,具体配置值请以控制台显示为准。

      “小规格”为单实例部署,适用50节点以下集群规模;“大规格”为高可用部署,适用50节点以上集群规模。

    • 选择“自定义规格”时,您可根据需求调整插件实例数和资源配额。实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。

  3. 选择是否开启“kruise-daemon配置”

    kruise-daemon是OpenKruise新增的DaemonSet组件,可为您提供镜像预热、容器重启功能。

    在v1.25及以上版本的集群中安装1.0.3版本的OpenKruise插件时,kruise-daemon无法在使用docker容器引擎的节点上运行,请使用containerd容器引擎。详细原因请参见组件说明

  4. 设置插件实例的部署策略。

    • 调度策略对于DaemonSet类型的插件实例不会生效。
    • 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。
    表1 插件调度配置

    参数

    参数说明

    多可用区部署

    • 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区下的不同节点。
    • 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。
    • 强制模式:插件Deployment实例强制调度到不同可用区的节点上,每个可用区下最多运行一个实例。如集群下节点不满足多可用区,插件实例将无法全部运行。节点故障后,插件实例存在无法迁移风险。

    节点亲和

    • 不配置:插件实例不指定节点亲和调度。
    • 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。
    • 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。
    • 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。

      同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。

    容忍策略

    容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。

    插件会对实例添加针对node.kubernetes.io/not-readynode.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。

    详情请参见设置容忍策略

  5. 单击“安装”

组件说明

表2 OpenKruise组件

容器组件

说明

资源类型

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被正常调度。

版本记录

表3 OpenKruise插件版本记录

插件版本

支持的集群版本

更新特性

社区版本

1.0.12

v1.23

v1.25

v1.27

v1.28

v1.29

v1.30

支持CCE v1.30集群

1.5.4

1.0.3

v1.23

v1.25

v1.27

v1.28

v1.29

首次提供OpenKruise插件。

1.5.4