安装 OpenKruise

尽管目前 OpenKruise 能够兼容 Kubernetes >= 1.13 版本的集群,但我们强烈建议在 Kubernetes >= 1.16 以上版本的集群中使用。

注意:

  1. 在 1.13 和 1.14 版本中必须先在 kube-apiserver 中打开 CustomResourceWebhookConversion feature-gate。
  2. 由于 Kubernetes 1.22 版本中去除了 CRD/WebhookConfiguration 等资源的 v1beta1 版本,目前 Kruise 无法部署到该版本的集群中。 即将到来的 Kruise v1.0 会解决这个兼容性问题,并不再支持 Kubernetes 1.16 之前的版本。

通过 helm charts 安装

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

  1. # Kubernetes 1.13 或 1.14 版本
  2. helm install kruise https://github.com/openkruise/kruise/releases/download/v0.10.0/kruise-chart.tgz --disable-openapi-validation
  3. # Kubernetes 1.15 和更新的版本
  4. helm install kruise https://github.com/openkruise/kruise/releases/download/v0.10.0/kruise-chart.tgz

通过 helm charts 升级

如果你在使用旧版本的 Kruise,建议为了安全性和更丰富的功能,升级到最新版本:

  1. # Kubernetes 1.13 and 1.14
  2. helm upgrade kruise https://github.com/openkruise/kruise/releases/download/v0.10.0/kruise-chart.tgz --disable-openapi-validation
  3. # Kubernetes 1.15 and newer versions
  4. helm upgrade kruise https://github.com/openkruise/kruise/releases/download/v0.10.0/kruise-chart.tgz

注意:

  1. 在升级之前,必须 先阅读 Change Log ,确保你已经了解新版本的不兼容变化。
  2. 如果你要重置之前旧版本上用的参数或者配置一些新参数,建议在 helm upgrade 命令里加上 --reset-values

可选项

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

可选: chart 安装参数

下表展示了 chart 所有可配置的参数和它们的默认值:

ParameterDescriptionDefault
featureGates可配置的 feature gates 参数,空表示按默认开关处理``
installation.namespacekruise 安装到的 namespace,一般不建议修改kruise-system
manager.log.levelkruise-manager 日志输出级别4
manager.replicaskruise-manager 的期望副本数2
manager.image.repositorykruise-manager/kruise-daemon 镜像仓库openkruise/kruise-manager
manager.image.tagkruise-manager/kruise-daemon 镜像版本v0.10.0
manager.resources.limits.cpukruise-manager 的 limit CPU 资源100m
manager.resources.limits.memorykruise-manager 的 limit memory 资源256Mi
manager.resources.requests.cpukruise-manager 的 request CPU 资源100m
manager.resources.requests.memorykruise-manager 的 request memory 资源256Mi
manager.metrics.portmetrics 服务的监听端口8080
manager.webhook.portwebhook 服务的监听端口9443
manager.nodeAffinitykruise-manager 部署的 node affinity 亲和性{}
manager.nodeSelectorkruise-manager 部署的 node selector 亲和性{}
manager.tolerationskruise-manager 部署的 tolerations[]
daemon.log.levelkruise-daemon 日志输出级别4
daemon.portkruise-daemon 的 metrics/healthz 服务监听端口10221
daemon.resources.limits.cpukruise-daemon 的 limit CPU 资源50m
daemon.resources.limits.memorykruise-daemon 的 limit memory 资源128Mi
daemon.resources.requests.cpukruise-daemon 的 request CPU 资源0
daemon.resources.requests.memorykruise-daemon 的 request memory 资源0
daemon.affinitykruise-daemon 部署的 affinity 亲和性 (可以排除一些 node 不部署 daemon){}
daemon.socketLocationNode 节点上 CRI socket 文件所在目录/var/run
webhookConfiguration.failurePolicy.podsPod webhook 的失败策略Ignore
webhookConfiguration.timeoutSeconds所有 Kruise webhook 的调用超时时间30
crds.managed是否安装 Kruise CRD (如何关闭则 chart 不会安装任何 CRD)true

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

可选: feature-gate

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

NameDescriptionDefaultSide effect (if closed)
PodWebhook启用对于 Pod 创建 的 webhook (不建议关闭)trueSidecarSet/KruisePodReadinessGate 不可用
KruiseDaemon启用 kruise-daemon DaemonSet (不建议关闭)true镜像预热/容器重启 不可用
DaemonWatchingPod每个 kruise-daemon 会 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资源删除防护false资源删除无保护
TemplateNoDefaults是否取消对 workload 中 pod/pvc template 的默认值注入falseShould not close this feature if it has open
PodUnavailableBudgetDeleteGate启用 PodUnavailableBudget 保护 pod 删除、驱逐false不防护 pod 删除、驱逐
PodUnavailableBudgetUpdateGate启用 PodUnavailableBudget 保护 pod 原地升级false不防护 pod 原地升级
WorkloadSpread启用 WorkloadSpread 管理应用多分区弹性与拓扑部署false不支持 WorkloadSpread

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

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

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

可选: 中国本地镜像

如果你在中国、并且很难从官方 DockerHub 上拉镜像,那么你可以使用托管在阿里云上的镜像仓库:

  1. $ helm install kruise https://... --set manager.image.repository=openkruise-registry.cn-hangzhou.cr.aliyuncs.com/openkruise/kruise-manager

卸载

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

卸载使用 helm chart 安装的 Kruise:

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