OpenKruise 是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar、镜像分发等方面提供更加强大和高效的能力。
核心功能
原地升级
原地升级是一种可以避免删除、新建 Pod 的升级镜像能力。它比原生 Deployment/StatefulSet 的重建 Pod 升级更快、更高效,并且避免对 Pod 中其他不需要更新的容器造成干扰。
Sidecar 管理
支持在一个单独的 CR 中定义 sidecar 容器,OpenKruise 能够帮你把这些 Sidecar 容器注入到所有符合条件的 Pod 中。这个过程和 Istio 的注入很相似,但是你可以管理任意你关心的 Sidecar。
跨多可用区部署
定义一个跨多个可用区的全局 workload,容器,OpenKruise 会帮你在每个可用区创建一个对应的下属 workload。你可以统一管理他们的副本数、版本、甚至针对不同可用区采用不同的发布策略。
以上在官方文档都有介绍,本文主要着重实战,先讲CloneSet,其他控制器后面会陆续更新。。。
部署Kruise到Kubernetes集群这里使用helm来安装Kruise
1、现在kruise Chart
2、修改values.yaml,默认不用修改也行
3、执行部署
4、检查kruise部署状态
[root@qd01-stop-k8s-master001 kruise]# helm ls -n kruise NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION kruise kruise 1 2020-12-23 10:22:12.963651877 +0800 CST deployed kruise-0.7.0 可以看到,集群中有的kruise crd类型 [root@qd01-stop-k8s-master001 kruise]# kubectl get crd|grep kruise advancedcronjobs.apps.kruise.io 2020-12-23T02:22:13Z broadcastjobs.apps.kruise.io 2020-12-23T02:22:13Z clonesets.apps.kruise.io 2020-12-23T02:22:13Z daemonsets.apps.kruise.io 2020-12-23T02:22:13Z sidecarsets.apps.kruise.io 2020-12-23T02:22:13Z statefulsets.apps.kruise.io 2020-12-23T02:22:13Z uniteddeployments.apps.kruise.io 2020-12-23T02:22:13Z下面我们开始来使用这些管理器
CloneSetCloneSet 控制器提供了高效管理无状态应用的能力,它可以对标原生的 Deployment,但 CloneSet 提供了很多增强功能。
1、我们先创建一个简单的CloneSet,yaml如下
2、部署
[root@qd01-stop-k8s-master001 demo]# kubectl apply -f CloneSet.yaml cloneset.apps.kruise.io/nginx-alpine created [root@qd01-stop-k8s-master001 demo]# kubectl get po |grep nginx nginx-alpine-29g7n 1/1 Running 0 45s nginx-alpine-bvgqm 1/1 Running 0 45s nginx-alpine-q9tlw 1/1 Running 0 45s nginx-alpine-s2t46 1/1 Running 0 44s nginx-alpine-sslvf 1/1 Running 0 44s 从输出结果看,和原生的Deployment没有啥区别 #注意,这里如果get deployment是看不到nginx-alpine这个应用的,需要get cloneset才能看到 [root@qd01-stop-k8s-master001 demo]# kubectl get deployment [root@qd01-stop-k8s-master001 demo]# kubectl get cloneset NAME DESIRED UPDATED UPDATED_READY READY TOTAL AGE nginx-alpine 5 5 5 5 5 2m16s