OpenKruise 由 Alibaba 开源,是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar
、镜像分发等方面提供更加强大和高效的能力。
OpenKruise 是面向自动化场景的 Kubernetes 应用负载扩展控制器。而 Kruise 是 OpenKruise 项目的核心,它是一组控制器,可在应用程序工作负载管理上扩展和补充 Kubernetes 核心控制器。
官网:openkruise.io 最新版本:0.8.0
github地址:https://github.com/openkruise/kruise
原地升级:原地升级是一种可以避免删除、新建 Pod 的升级镜像能力。它比原生 Deployment/StatefulSet 的重建 Pod 升级更快、更高效,
并且避免对 Pod 中其他不需要更新的容器造成干扰
Sidecar 管理:支持在一个单独的 CR 中定义 sidecar 容器,OpenKruise 能够帮你把这些 Sidecar 容器注入到所有符合条件的 Pod 中。
这个过程和 Istio 的注入很相似,但是你可以管理任意你关心的 Sidecar
跨多可用区部署:定义一个跨多个可用区的全局 workload、容器,OpenKruise 会帮你在每个可用区创建一个对应的下属 workload。
你可以统一管理 workload 的副本数、版本、甚至针对不同可用区采用不同的发布策略
镜像预热:支持用户指定在任意范围的节点上下载镜像
CloneSet 提供更加高效、确定可控的应用管理和部署能力,支持优雅原地升级、指定删除、发布顺序可配置、并行/灰度发布等丰富的策略,可以满足更多样化的应用场景
Advanced StatefulSet 基于原生 StatefulSet 之上的增强版本,默认行为与原生完全一致,在此之外提供了原地升级、并行发布(最大不可用)、发布暂停等功能
SidecarSet 对 sidecar 容器做统一管理,在满足 selector 条件的 Pod 中注入指定的 sidecar 容器
UnitedDeployment 通过多个 subset workload 将应用部署到多个可用区
BroadcastJob 配置一个 job,在集群中所有满足条件的 Node 上都跑一个 Pod 任务
Advanced DaemonSet 基于原生 DaemonSet 之上的增强版本,默认行为与原生一致,在此之外提供了灰度分批、按 Node label 选择、暂停、热升级等发布策略
AdvancedCronJob 一个扩展的 CronJob 控制器,目前 template 模板支持配置使用 Job 或 BroadcastJob
ImagePullJob 支持用户指定在任意范围的节点上下载镜像
OpenKruise 要求 Kubernetes 版本高于 1.13+,注意在 1.13 和 1.14 版本中必须先在 Kube-ApiServer 中打开 CustomResourceWebhookConversion
feature-gate。
建议采用 helm v3.1+ 来安装 Kruise,
# Kubernetes 1.13 或 1.14 版本
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz --disable-openapi-validation
# Kubernetes 1.15 和更高版本
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz
Parameter | Description | Default |
---|---|---|
featureGates | Feature gates for Kruise, empty string means all enabled | `` |
manager.log.level | Log level that kruise-manager printed | 4 |
manager.replicas | Replicas of kruise-controller-manager deployment | 2 |
manager.image.repository | Repository for kruise-manager image | openkruise/kruise-manager |
manager.image.tag | Tag for kruise-manager image | v0.8.0 |
manager.resources.limits.cpu | CPU resource limit of kruise-manager container | 100m |
manager.resources.limits.memory | Memory resource limit of kruise-manager container | 256Mi |
manager.resources.requests.cpu | CPU resource request of kruise-manager container | 100m |
manager.resources.requests.memory | Memory resource request of kruise-manager container | 256Mi |
manager.metrics.port | Port of metrics served | 8080 |
manager.webhook.port | Port of webhook served | 9443 |
manager.nodeAffinity | Node affinity policy for kruise-manager pod | {} |
manager.nodeSelector | Node labels for kruise-manager pod | {} |
manager.tolerations | Tolerations for kruise-manager pod | [] |
daemon.log.level | Log level that kruise-daemon printed | 4 |
daemon.port | Port of metrics and healthz that kruise-daemon served | 10221 |
daemon.resources.limits.cpu | CPU resource limit of kruise-daemon container | 50m |
daemon.resources.limits.memory | Memory resource limit of kruise-daemon container | 64Mi |
daemon.resources.requests.cpu | CPU resource request of kruise-daemon container | 0 |
daemon.resources.requests.memory | Memory resource request of kruise-daemon container | 0 |
daemon.affinity | Affinity policy for kruise-daemon pod | {} |
webhookConfiguration.failurePolicy.pods | The failurePolicy for pods in mutating webhook configuration | Ignore |
webhookConfiguration.timeoutSeconds | The timeoutSeconds for all webhook configuration | 30 |
crds.managed | Kruise will not install CRDs with chart if this is false | true |
这些参数可以通过 --set key=value[,key=value]
参数在 helm install
命令中生效。
此外,Feature-gate 控制了 Kruise 中一些有影响性的功能(可选):
Name | Description | Default | Side effect (if closed) |
---|---|---|---|
PodWebhook | Whether to open a webhook for Pod create | true | SidecarSet disabled |
KruiseDaemon | Whether to deploy kruise-daemon DaemonSet | true | Image pulling disabled |
如果要配置 feature-gate,只要在安装或升级时配置参数:
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz --set featureGates="PodWebhook=false"
或
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz --set featureGates="PodWebhook=false\,KruiseDaemon=false"
通过 helm charts
升级:
# Kubernetes 1.13 或 1.14 版本
helm upgrade kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz --disable-openapi-validation
# Kubernetes 1.15 和更高版本
helm upgrade kruise https://github.com/openkruise/kruise/releases/download/v0.8.0/kruise-chart.tgz
注意:
如果要重置之前旧版本上用的参数或者配置一些新参数,建议在 helm upgrade
命令里加上 --reset-values
。
注意:卸载会导致所有 Kruise 下的资源都会删除掉,包括 webhook configurations、services、namespace、CRDs、CR instances 以及所有 Kruise workload 下的
Pod
。 请务必谨慎操作!
卸载使用 helm chart
安装的 Kruise:
helm uninstall kruise