English | 简体中文
最新进展: |
---|
May 19th, 2020. Kruise v0.5.0 发布! CloneSet 支持 maxSurge 策略、为 StatefulSet/SidecarSet 修复部分 bug, please check the CHANGELOG for details. |
Mar 20th, 2020. Kruise v0.4.1 发布! 为 Advanced StatefulSet 和 CloneSet 提供了 优雅原地升级 功能,详情参见 CHANGELOG. |
Feb 7th, 2020. Kruise v0.4.0 发布! 新增 CloneSet 控制器,详情参见 CHANGELOG. |
Nov 24th, 2019. 发布 UnitedDeployment 控制器的博客 (link). |
Kruise 是 OpenKruise 中的核心项目之一,它提供一套在Kubernetes核心控制器之外的扩展 workload 管理和实现。
目前,Kruise 提供了以下 5 个 workload 控制器:
-
CloneSet: 提供了更加高效、确定可控的应用管理和部署能力,支持优雅原地升级、指定删除、发布顺序可配置、并行/灰度发布等丰富的策略,可以满足更多样化的应用场景。
-
Advanced StatefulSet: 基于原生 StatefulSet 之上的增强版本,默认行为与原生完全一致,在此之外提供了原地升级、并行发布(最大不可用)、发布暂停等功能。
-
SidecarSet: 对 sidecar 容器做统一管理,在满足 selector 条件的 Pod 中注入指定的 sidecar 容器。
-
UnitedDeployment: 通过多个 subset workload 将应用部署到多个可用区。
-
BroadcastJob: 配置一个 job,在集群中所有满足条件的 Node 上都跑一个 Pod 任务。
项目的 roadmap 参考这里。 Video by Lachlan Evenson 是一个对于新人很友好的 demo。
使用 Kruise 需要在 kube-apiserver
启用一些 feature-gate 比如 MutatingAdmissionWebhook
、ValidatingAdmissionWebhook
(K8s 1.12以上默认开启)。
如果你的 K8s 版本低于 1.12,需要先执行以下命令来验证是否支持:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/openkruise/kruise/master/scripts/check_for_installation.sh)"
推荐使用 helm v3 安装 Kruise,helm 是一个简单的命令行工具可以从这里 获取。
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.5.0/kruise-chart.tgz
注意直接安装 chart 会使用默认的 template values,你也可以根据你的集群情况指定一些特殊配置,比如修改 resources 限制或者只启用某些特定的控制器能力。
# Install CRDs
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_broadcastjob.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_sidecarset.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_statefulset.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_uniteddeployment.yaml
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/crds/apps_v1alpha1_cloneset.yaml
# Install kruise-controller-manager
kubectl apply -f https://raw.githubusercontent.com/kruiseio/kruise/master/config/manager/all_in_one.yaml
注意 all_in_one.yaml
中包含的 Kruise-manager 镜像是每天周期性从 master 分支打出来的,无法保证功能的稳定性。
所以你可以通过 YAML 部署到测试集群做验证,但不推荐在生产环境使用。
官方的 kruise-manager 镜像维护在 docker hub 。
如果你只需要使用某些 Kruise 中的控制器并关闭其他的控制器,你可以做以下两个方式或同时做:
-
只安装你需要使用的 CRD。
-
在 kruise-manager 容器中设置
CUSTOM_RESOURCE_ENABLE
环境变量,配置需要启用的功能,比如CUSTOM_RESOURCE_ENABLE=CloneSet,StatefulSet
。
如果使用 helm chart 安装,可以通过以下参数来生效这个配置:
helm install kruise https://github.com/openkruise/kruise/releases/download/v0.5.0/kruise-chart.tgz --set manager.custom_resource_enable="CloneSet\,StatefulSet"
详见 documents 包含了各个 workload 的说明和用例, 我们也提供了 tutorials 来示范如何使用 Kruise 控制器。
注意:卸载会导致所有 Kruise 下的资源都会删除掉,包括 webhook configurations, services, namespace, CRDs, CR instances 以及所有 Kruise workload 下的 Pod。 请务必谨慎操作!
卸载使用 helm chart 安装的 Kruise:
helm uninstall kruise
卸载使用 YAML files 安装的 Kruise:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/kruiseio/kruise/master/scripts/uninstall.sh)"
如果有任何问题或想要参与贡献,我们非常欢迎你在 Github 上提出 issues 或是 pull requests。
其他活跃的社区途径:
- Slack: channel address
- 钉钉讨论群
Certain implementation relies on existing code from Kubernetes and the credit goes to original Kubernetes authors.