安装

    建议采用 helm v3.5+ 来安装 Kruise,helm 是一个简单的命令行工具可以从 获取。

    通过 helm 升级

    1. $ helm repo add openkruise https://openkruise.github.io/charts/
    2. # [Optional]
    3. $ helm repo update
    4. # Upgrade to the latest version.
    5. $ helm upgrade kruise openkruise/kruise --version 1.4.0 [--force]

    注意:

    1. 在升级之前,必须 先阅读 ,确保你已经了解新版本的不兼容变化。
    2. 如果你要重置之前旧版本上用的参数或者配置一些新参数,建议在 helm upgrade 命令里加上 --reset-values
    3. 如果你在将 Kruise 从 0.x 升级到 1.x 版本,你需要为 upgrade 命令添加 --force 参数,其他情况下这个参数是可选的。

    如果你在生产环境无法连接到 https://openkruise.github.io/charts/,可以先在手工下载 chart 包,再用它安装或更新到集群中。

    可选项

    注意直接安装 chart 会使用默认的 template values,你也可以根据你的集群情况指定一些特殊配置,比如修改 resources 限制或者配置 feature-gates。

    这些参数可以通过 --set key=value[,key=value] 参数在 helm installhelm upgrade 命令中生效。

    Feature-gate 控制了 Kruise 中一些有影响性的功能:

    NameDescriptionDefaultSide effect (if closed)
    PodWebhook启用对于 Pod 创建 的 webhook (不建议关闭)trueSidecarSet/KruisePodReadinessGate 不可用
    KruiseDaemon启用 kruise-daemon DaemonSet (不建议关闭)true镜像预热/容器重启 不可用
    DaemonWatchingPod每个 会 watch 与自己同节点的 pod (不建议关闭)true同 imageID 的原地升级,以及支持 env from labels/annotation 原地升级 不可用
    CloneSetShortHash启用 CloneSet controller 只在 pod label 中设置短 hash 值falseCloneSet 名字不能超过 54 个字符(默认行为)
    KruisePodReadinessGate启用 Kruise webhook 将 ‘KruisePodReady’ readiness-gate 在所有 Pod 创建时注入false只会注入到 Kruise workloads 创建的 Pod 中
    PreDownloadImageForInPlaceUpdate启用 CloneSet 自动为原地升级的过程创建 ImagePullJob 来预热镜像false原地升级无镜像提前预热
    CloneSetPartitionRollback启用如果 partition 被调大, CloneSet controller 会回滚 Pod 到 currentRevision 老版本falseCloneSet 只会正向发布 Pod 到 updateRevision
    ResourcesDeletionProtection资源删除防护true资源删除无保护
    TemplateNoDefaults是否取消对 workload 中 pod/pvc template 的默认值注入falseShould not close this feature if it has open
    PodUnavailableBudgetDeleteGate启用 PodUnavailableBudget 保护 pod 删除、驱逐true不防护 pod 删除、驱逐
    PodUnavailableBudgetUpdateGate启用 PodUnavailableBudget 保护 pod 原地升级false不防护 pod 原地升级
    WorkloadSpread启用 WorkloadSpread 管理应用多分区弹性与拓扑部署true不支持 WorkloadSpread
    InPlaceUpdateEnvFromMetadata启用 Kruise 原地升级容器当它存在 env from 的 labels/annotations 发生了变化true容器中只有 image 能够原地升级
    StatefulSetAutoDeletePVC启用 StatefulSet 自动删除它所创建的 PVCtrueStatefulSet 不会清理 PVC
    PreDownloadImageForDaemonSetUpdate启用 DaemonSet 自动为原地升级过程中创建 ImagePullJob 来镜像预热true原地升级无镜像提前预热
    PodProbeMarkerGate启用 PodProbeMarker 能力truePodProbeMarker 关闭
    SidecarSetPatchPodMetadataDefaultsAllowed允许 SidecarSet Patch 任意 Annotations 到 Pob Object,不再进行白名单校验falseAnnotations不允许随意Patch,需要通过 SidecarSet_PatchPodMetadata_WhiteList 配置
    SidecarTerminator启用 SidecarTerminator 能力,在 Job 场景中当主容器退出后,能够停止 Sidecar 容器falseSidecarTerminator 不可用
    CloneSetEventHandlerOptimization性能优化,减少 Pod Update 触发的无效 Reconcile 逻辑falseCloneSetEventHandlerOptimization 不启用

    如果你要配置 feature-gate,只要在安装或升级时配置参数即可,比如:

    1. $ helm install kruise https://... --set featureGates="ResourcesDeletionProtection=true\,PreDownloadImageForInPlaceUpdate=true"

    如果你希望打开所有 feature-gate 功能,配置参数 featureGates=AllAlpha=true

    通常来说 K3s 有着与默认 /var/run 不同的 runtime socket 路径。所以你需要将 daemon.socketLocation 参数设置为你的 K3s 节点上真实的路径(比如 /run/k3s/var/run/k3s/)。

    当在 EKS 上使用自定义 CNI 插件(如 Weave 或 Calico)时,默认情况下 webhook 无法被连接到。这是因为在 EKS 上 control plane 不能被配置为运行到一个自定义的 CNI 上,所以 control plane 和 worker 节点的 CNI 是不同的。

    可以通过给 webhook 配置 host network 网络来解决这个问题,在 helm install/upgrade 的时候加入 --set manager.hostNetwork=true 参数即可。

    卸载

    注意:卸载会导致所有 Kruise 下的资源都会删除掉,包括 webhook configurations, services, namespace, CRDs, CR instances 以及所有 Kruise workload 下的 Pod。 请务必谨慎操作!

    1. $ helm uninstall kruise
    2. release "kruise" uninstalled

    监听 Kubernetes API 并生成 OpenKruise 有关对象状态的度量指标。它不关注单个 OpenKruise 组件的健康状况,而是关注内部各种对象的健康状况,例如:clonesets,advanced statefulsets and sidecarsets。