加入收藏 | 设为首页 | 会员中心 | 我要投稿 三门峡站长网 (https://www.0398zz.com.cn/)- 云连接、设备管理、智能边缘云、云防火墙、数据加密!
当前位置: 首页 > 教程 > 正文

OpenKruise核心功能

发布时间:2021-01-25 15:21:19 所属栏目:教程 来源:互联网
导读:OpenKruise OpenKruise 是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar、镜像分发等方面提供更加强大和高效的能力。 核心功能 原地升级 原地升级是一种可以避免删除、新建 Pod 的升级镜像能力。它比原生 Deploym

OpenKruise

OpenKruise 是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar、镜像分发等方面提供更加强大和高效的能力。

核心功能

原地升级

原地升级是一种可以避免删除、新建 Pod 的升级镜像能力。它比原生 Deployment/StatefulSet 的重建 Pod 升级更快、更高效,并且避免对 Pod 对其他不需要更新的容器造成干扰。

Sidecar 管理

支持在一个单独的 CR 中定义 sidecar 容器,OpenKruise 能够帮你把这些 Sidecar 容器注入到所有符合条件的 Pod 中。这个过程和 Istio 的注入很相似,但是你可以管理任意你关心的 Sidecar。

跨多可用区部署

定义一个跨多个可用区的全局 workload,容器,OpenKruise 会帮你在每个可用区创建一个对应的下属 workload。你可以统一管理他们的副本数、版本、甚至针对不同可用区采用不同的发布策略。

CRD 列表


  1. CloneSet 
  2. 提供更加高效、确定可控的应用管理和部署能力,支持优雅原地升级、指定删除、发布顺序可配置、并行/灰度发布等丰富的策略,可以满足更多样化的应用场景。 
  3.  
  4. Advanced StatefulSet 
  5. 基于原生 StatefulSet 之上的增强版本,默认行为与原生完全一致,在此之外提供了原地升级、并行发布(最大不可用)、发布暂停等功能。 
  6.  
  7. SidecarSet 
  8. 对 sidecar 容器做统一管理,在满足 selector 条件的 Pod 中注入指定的 sidecar 容器。 
  9.  
  10. UnitedDeployment 
  11. 通过多个 subset workload 将应用部署到多个可用区。 
  12.  
  13. BroadcastJob 
  14. 配置一个 job,在集群中所有满足条件的 Node 上都跑一个 Pod 任务。 
  15.  
  16. Advanced DaemonSet 
  17. 基于原生 DaemonSet 之上的增强版本,默认行为与原生一致,在此之外提供了灰度分批、按 Node label 选择、暂停、热升级等发布策略。 
  18.  
  19. AdvancedCronJob 
  20. 一个扩展的 CronJob 控制器,目前 template 模板支持配置使用 Job 或 BroadcastJob。 

以上在官方文档都有介绍,本文主要着重实战,先讲CloneSet,其他控制器后面会陆续更新。。。

部署Kruise到Kubernetes集群

这里使用helm来安装Kruise

1、现在kruise Chart


  1. wget https://github.com/openkruise/kruise/releases/download/v0.7.0/kruise-chart.tgz 
  2. tar -zxf kruise-chart.tgz 
  3. cd kruise 
  4. [root@ kruise]# ls -l 
  5. total 16 
  6. -rw-r--r-- 1 root root  311 Dec 20 15:09 Chart.yaml 
  7. -rw-r--r-- 1 root root 4052 Dec 20 15:09 README.md 
  8. drwxr-xr-x 2 root root 4096 Dec 23 10:18 templates 
  9. -rw-r--r-- 1 root root  659 Dec 20 15:09 values.yaml 

2、修改values.yaml,默认不用修改也行

3、执行部署


  1. [root@qd01-stop-k8s-master001 kruise]# kubectl create ns kruise 
  2. namespace/kruise created 
  3. [root@qd01-stop-k8s-master001 kruise]# helm install kruise -n kruise -f values.yaml  . 
  4. W1223 10:22:13.562088 1589994 warnings.go:67] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition 
  5. 。。。。。。。 
  6. NAME: kruise 
  7. LAST DEPLOYED: Wed Dec 23 10:22:12 2020 
  8. NAMESPACE: kruise 
  9. STATUS: deployed 
  10. REVISION: 1 
  11. TEST SUITE: None 
  12. 这里会看到一堆的deprecated信息,因为新版的kubernetes对CRD的版本会淘汰,可以根据自己的集群版本修改CRD的API版本即可 

4、检查kruise部署状态


  1. [root@qd01-stop-k8s-master001 kruise]# helm ls -n kruise 
  2. NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION 
  3. kruise  kruise          1               2020-12-23 10:22:12.963651877 +0800 CST deployed        kruise-0.7.0                
  4.  
  5. 可以看到,集群中有的kruise crd类型 
  6. [root@qd01-stop-k8s-master001 kruise]# kubectl get crd|grep  kruise 
  7. advancedcronjobs.apps.kruise.io                       2020-12-23T02:22:13Z 
  8. broadcastjobs.apps.kruise.io                          2020-12-23T02:22:13Z 
  9. clonesets.apps.kruise.io                              2020-12-23T02:22:13Z 
  10. daemonsets.apps.kruise.io                             2020-12-23T02:22:13Z 
  11. sidecarsets.apps.kruise.io                            2020-12-23T02:22:13Z 
  12. statefulsets.apps.kruise.io                           2020-12-23T02:22:13Z 
  13. uniteddeployments.apps.kruise.io                      2020-12-23T02:22:13Z 

下面我们开始来使用这些管理器

CloneSet

CloneSet 控制器提供了高效管理无状态应用的能力,它可以对标原生的 Deployment,但 CloneSet 提供了很多增强功能。

Partition 的语义是 保留旧版本 Pod 的数量或百分比,默认为 0。这里的 partition 不表示任何 order 序号。


  1. 在发布过程中设置了 partition: 
  2.     如果是数字,控制器会将 (replicas - partition) 数量的 Pod 更新到最新版本。 
  3.     如果是百分比,控制器会将 (replicas * (100% - partition)) 数量的 Pod 更新到最新版本。 

现在我将上面的例子的 image 更新为 nginx:1.19.6-alpine 并且设置 partition=3


  1. kind: CloneSet 
  2. metadata: 
  3.   labels: 
  4.     app: nginx-2 
  5.   name: nginx-2 
  6. spec: 
  7.   replicas: 5 
  8.   updateStrategy: 
  9.     type: InPlaceIfPossible 
  10.     inPlaceUpdateStrategy: 
  11.       gracePeriodSeconds: 10 
  12.     partition: 3 
  13.   selector: 
  14.     matchLabels: 
  15.       app: nginx-2 
  16.   template: 
  17.     metadata: 
  18.       labels: 
  19.         app: nginx-2 
  20.     spec: 
  21.       containers: 
  22.       - name: nginx 
  23.         image: nginx:1.19.6-alpine 

查看结果


  1. Status: 
  2.   Available Replicas:      5 
  3.   Collision Count:         0 
  4.   Label Selector:          app=nginx-2 
  5.   Observed Generation:     6 
  6.   Ready Replicas:          5 
  7.   Replicas:                5 
  8.   Update Revision:         nginx-2-7b44cb9c8 
  9.   Updated Ready Replicas:  2 
  10.   Updated Replicas:        2 
  11. Events: 
  12.   Type    Reason                      Age    From                 Message 
  13.   ----    ------                      ----   ----                 ------- 
  14.   Normal  SuccessfulUpdatePodInPlace  45m    cloneset-controller  successfully update pod nginx-2-l54dz in-place(revision nginx-2-5879fd9f7) 
  15.   Normal  SuccessfulUpdatePodInPlace  44m    cloneset-controller  successfully update pod nginx-2-t49mk in-place(revision nginx-2-5879fd9f7) 
  16.   Normal  SuccessfulUpdatePodInPlace  43m    cloneset-controller  successfully update pod nginx-2-b5fdd in-place(revision nginx-2-5879fd9f7) 
  17.   Normal  SuccessfulUpdatePodInPlace  43m    cloneset-controller  successfully update pod nginx-2-jw2zp in-place(revision nginx-2-5879fd9f7) 
  18.   Normal  SuccessfulCreate            22m    cloneset-controller  succeed to create pod nginx-2-zpp8z 
  19.   Normal  SuccessfulUpdatePodInPlace  5m22s  cloneset-controller  successfully update pod nginx-2-zpp8z in-place(revision nginx-2-7b44cb9c8) 
  20.   Normal  SuccessfulUpdatePodInPlace  4m55s  cloneset-controller  successfully update pod nginx-2-jw2zp in-place(revision nginx-2-7b44cb9c8) 
  21.  
  22. [root@qd01-stop-k8s-master001 demo]# kubectl get pod -L controller-revision-hash 
  23. NAME                                        READY   STATUS    RESTARTS   AGE   CONTROLLER-REVISION-HASH 
  24. nginx-2-b5fdd                               1/1     Running   1          99m   nginx-2-5879fd9f7 
  25. nginx-2-jw2zp                               1/1     Running   2          99m   nginx-2-7b44cb9c8 
  26. nginx-2-l54dz                               1/1     Running   1          99m   nginx-2-5879fd9f7 
  27. nginx-2-t49mk                               1/1     Running   1          99m   nginx-2-5879fd9f7 
  28. nginx-2-zpp8z                               1/1     Running   1          19m   nginx-2-7b44cb9c8 

从输出信息我们可以看到,Update Revision已经更新为nginx-2-7b44cb9c8,而Pod中只有两个Pod升级了。

由于我们设置了 partition=3,控制器只升级了 2 个 Pod。

Partition 分批灰度功能完善了原生的Pod升级方式,使得升级能够进行更灵活,能够进行灰度上线。

 

(编辑:三门峡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读