成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

有狀態部署慢?使用 openkruise 實現容器應用固定ID

新聞 前端
以 deployment 部署的應用 pod,由于 id 經常變更,服務重啟,監控變得難以維護。這里只是以監控為切入點,事實上,還有諸多應用需要與id強綁定。

 [[327616]]

背景說明

我們在業務上容器的過程中遇到了如下問題:

  1. 以 deployment 部署的應用 pod,由于 id 經常變更,服務重啟,監控變得難以維護。這里只是以監控為切入點,事實上,還有諸多應用需要與id強綁定。
  2. statefulset 可以解決上面的問題,但是引入一個新的問題就是 statefulset 本身為了維護有狀態的應用,所有的應用 Pod 啟動是有嚴格的先后順序,也就是串行啟動,對于大規模的應用 pod 來講,啟動消耗時間太長,這是無法忍受的。

為解決以上問題,我們在容器平臺當中引入了 openkruise。

openkruise簡介

項目地址:https://github.com/openkruise/kruise

詳細的說明可以參考這篇文章:

https://yq.aliyun.com/articles/706442

從當前 github 上的文檔來看,目前 OpenKruise 支持五種改進的控制器:

  • CloneSet: CloneSet is a workload that mainly focuses on managing stateless applications. It provides full features for more efficient, deterministic and controlled deployment, such as inplace update, specified pod deletion, configurable priority/scatter update, preUpdate/postUpdate hooks.
  • Advanced StatefulSet: An enhanced version of default StatefulSet with extra functionalities such as inplace-update, pause and MaxUnavailable.
  • SidecarSet: A controller that injects sidecar containers into the Pod spec based on selectors and also is able to upgrade the sidecar containers.
  • UnitedDeployment: This controller manages application pods spread in multiple fault domains by using multiple workloads.
  • BroadcastJob: A job that runs Pods to completion across all the nodes in the cluster.

UnitedDeployment 是在 StatefulSet 基礎上的更高級抽象,通過一個資源描述可以管理多個 StatefulSet 的實例組,可實現多實例組的灰度發布與滾動升級。

Broadcast Job 實際上就是以 DaemonSet 的方式在所有節點上運行一次性 Job,SidercarSet 用于 Sidercar 注入及管理。

而我們要使用到的正是其 Advanced StatefulSet 的特性。關于Advanced StatefulSet更詳細的描述如下:

在kubernetes官方的statefulSet上做了功能擴展,更新策略由原來的只支持recreate,擴展為同時支持recreate和rollingupdate。rollingupdate還支持兩種策略,一種是InPlaceIfPossible,另一種是InPlaceOnly。InPlaceIfPossible會盡可能的保證應用在原地升級(只支持鏡像的升級,如果修改了yaml中的其他配置項,則無法保證);InPlaceOnly會保證應用一定在原地升級,但是它也只支持鏡像的升級,如果修改了yaml中的其他配置項,會直接拋出異常。另外,原生的StatefulSet只能做到串行啟動,Advanced StatefulSet可以做到并行啟動。

部署openkruise

官方的安裝文檔可以直接參考這里:

https://github.com/openkruise/kruise/tree/master/docs/tutorial

我簡單寫下安裝步驟:

  1. wget https://github.com/openkruise/kruise/releases/download/v0.4.0/kruise-chart.tgz 
  2.  
  3. tar xf kruise-chart.tgz 
  4.  
  5. cd kruise 
  6.  
  7. helm install openkruise ./ -n kube-system 

目前openkruise已經更新到了v0.5.0的版本。也可以直接通過阿里云的應用目錄來完成其安裝。

下面說一下更詳細的安裝過程:

1、獲取helm包

  1. helm repo add incubator http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/app/charts-incubator/ 
  2.  
  3. helm search repo ack-kruise 
  4.  
  5. helm fetch incubator/ack-kruise 
  6.  
  7. tar xf ack-kruise-0.5.0.tgz 
  8.  
  9. cd ack-kruise 

修改values.yml文件如下:

  1. # Default values for kruise. 
  2.  
  3. revisionHistoryLimit: 3 
  4.  
  5. manager: 
  6.  
  7. # settings for log print 
  8.  
  9. log: 
  10.  
  11. # log level for kruise-manager 
  12.  
  13. level: "4" 
  14.  
  15. # image settings 
  16.  
  17. image: 
  18.  
  19. # repository for kruise-manager image 
  20.  
  21. repository: hub.example.com/library/kruise-manager 
  22.  
  23. # tag for kruise-manager image 
  24.  
  25. tag: v0.5.0 
  26.  
  27. # resources of kruise-manager container 
  28.  
  29. resources: 
  30.  
  31. limits: 
  32.  
  33. cpu: 500m 
  34.  
  35. memory: 1Gi 
  36.  
  37. requests: 
  38.  
  39. cpu: 500m 
  40.  
  41. memory: 1Gi 
  42.  
  43. metrics: 
  44.  
  45. addr: localhost 
  46.  
  47. port: 8080 
  48.  
  49. custom_resource_enable: StatefulSet 

其實這里就改了兩個東西:

  • image:默認是docker hub上的地址,我這里改到了私有鏡像倉庫
  • custom_resource_enable:用于指定啟用哪幾種資源,如果不指定的話,openkruise支持的五種資源會全部啟用,我這里只用到了StatefulSet,所以這里只啟用了這一種資源

然后執行安裝操作:

  1. helm install ack-kruise -n kube-system ./ 

安裝完后,會生成以下五種crd:

  1. # kubectl get crds |grep kruise 
  2.  
  3. broadcastjobs.apps.kruise.io 2020-04-26T10:29:28Z 
  4.  
  5. clonesets.apps.kruise.io 2020-04-26T10:29:28Z 
  6.  
  7. sidecarsets.apps.kruise.io 2020-04-26T10:29:28Z 
  8.  
  9. statefulsets.apps.kruise.io 2020-04-26T10:29:28Z 
  10.  
  11. uniteddeployments.apps.kruise.io 2020-04-26T10:29:28Z 

同時會創建一個 kruise-system 的命名空間,并在里面生成一個 pod:

  1. # kubectl get pods -n kruise-system 
  2.  
  3. NAME READY STATUS RESTARTS AGE 
  4.  
  5. kruise-controller-manager-0 1/1 Running 0 55m 

驗證 statefulset 資源的 webhook 是否被正常創建:

  1. # kubectl get mutatingwebhookconfiguration -o yaml 
  2.  
  3. apiVersion: v1 
  4.  
  5. items: 
  6.  
  7. - apiVersion: admissionregistration.k8s.io/v1 
  8.  
  9. kind: MutatingWebhookConfiguration 
  10.  
  11. metadata: 
  12.  
  13. creationTimestamp: "2020-04-26T10:29:28Z" 
  14.  
  15. generation: 3 
  16.  
  17. name: kruise-mutating-webhook-configuration 
  18.  
  19. resourceVersion: "622944921" 
  20.  
  21. selfLink: /apis/admissionregistration.k8s.io/v1/mutatingwebhookconfigurations/kruise-mutating-webhook-configuration 
  22.  
  23. uid: 303a7b7f-3a62-49d7-8ef6-082ea288eeb2 
  24.  
  25. webhooks: 
  26.  
  27. - admissionReviewVersions: 
  28.  
  29. - v1beta1 
  30.  
  31. clientConfig: 
  32.  
  33. caBundle: xxxxx 
  34.  
  35. service: 
  36.  
  37. name: kruise-webhook-server-service 
  38.  
  39. namespace: kruise-system 
  40.  
  41. path: /mutating-create-update-statefulset 
  42.  
  43. port: 443 
  44.  
  45. failurePolicy: Fail 
  46.  
  47. matchPolicy: Exact 
  48.  
  49. name: mutating-create-update-statefulset.kruise.io 
  50.  
  51. namespaceSelector: 
  52.  
  53. matchExpressions: 
  54.  
  55. - key: control-plane 
  56.  
  57. operator: DoesNotExist 
  58.  
  59. objectSelector: {} 
  60.  
  61. reinvocationPolicy: Never 
  62.  
  63. rules: 
  64.  
  65. - apiGroups: 
  66.  
  67. - apps.kruise.io 
  68.  
  69. apiVersions: 
  70.  
  71. - v1alpha1 
  72.  
  73. operations: 
  74.  
  75. - CREATE 
  76.  
  77. - UPDATE 
  78.  
  79. resources: 
  80.  
  81. - statefulsets 
  82.  
  83. scope: '*' 
  84.  
  85. sideEffects: Unknown 
  86.  
  87. timeoutSeconds: 30 
  88.  
  89. ...... 

也是確保其他未用到的相關 mutatingwebhook 是關閉的。。在實際測試中,SidecarSet 資源的 mutatingwebhook 可能會導致創建的 pod 出不來。

這些webhook本質上都是kubernetes的admissioncontrol,只要你安裝了,哪怕沒有使用,當你在執行相關操作時,都需要被所有的adminssioncontrol檢測,如果admissioncontrol本身出了問題,就會導致請求無法響應的狀態。同時這些webhook類型的adminssioncontrol也會拖慢響應速度。

用法示例

下面是官方提供的一個基于 openkruise 提供的 statefulset 資源的部署文件示例:

  1. apiVersion: apps.kruise.io/v1alpha1 
  2.  
  3. kind: StatefulSet 
  4.  
  5. metadata: 
  6.  
  7. name: demo-v1-guestbook-kruise 
  8.  
  9. labels: 
  10.  
  11. app.kubernetes.io/name: guestbook-kruise 
  12.  
  13. app.kubernetes.io/instance: demo-v1 
  14.  
  15. spec: 
  16.  
  17. replicas: 3 
  18.  
  19. serviceName: demo-v1-guestbook-kruise 
  20.  
  21. selector: 
  22.  
  23. matchLabels: 
  24.  
  25. app.kubernetes.io/name: guestbook-kruise 
  26.  
  27. app.kubernetes.io/instance: demo-v1 
  28.  
  29. template: 
  30.  
  31. metadata: 
  32.  
  33. labels: 
  34.  
  35. app.kubernetes.io/name: guestbook-kruise 
  36.  
  37. app.kubernetes.io/instance: demo-v1 
  38.  
  39. spec: 
  40.  
  41. readinessGates: 
  42.  
  43. # A new condition that ensures the pod remains at NotReady state while the in-place update is happening 
  44.  
  45. - conditionType: InPlaceUpdateReady 
  46.  
  47. containers: 
  48.  
  49. - name: guestbook-kruise 
  50.  
  51. image: openkruise/guestbook:v1 
  52.  
  53. imagePullPolicy: Always 
  54.  
  55. ports: 
  56.  
  57. - name: http-server 
  58.  
  59. containerPort: 3000 
  60.  
  61. podManagementPolicy: Parallel # allow parallel updates, works together with maxUnavailable 
  62.  
  63. updateStrategy: 
  64.  
  65. type: RollingUpdate 
  66.  
  67. rollingUpdate: 
  68.  
  69. # Do in-place update if possible, currently only image update is supported for in-place update 
  70.  
  71. podUpdatePolicy: InPlaceIfPossible 
  72.  
  73. # Allow parallel updates with max number of unavailable instances equals to 2 
  74.  
  75. maxUnavailable: 3 

執行部署之后,啟動 pod 示例如下:

  1. # kubectl get pods |grep demo-v1 
  2.  
  3. demo-v1-guestbook-kruise-0 1/1 Running 0 62s 
  4.  
  5. demo-v1-guestbook-kruise-1 1/1 Running 0 62s 
  6.  
  7. demo-v1-guestbook-kruise-2 1/1 Running 0 62s 

也可通過如下操作查看資源狀態:

  1. # kubectl get sts.apps.kruise.io 
  2.  
  3. NAME DESIRED CURRENT UPDATED READY AGE 
  4.  
  5. demo-v1-guestbook-kruise 3 3 3 3 56s 
  6.  
  7. openkruise提供的statefulset的資源名為sts.apps.kruise.io 

更詳細的用法可參考:

Advanced StatefulSet具體的使用方法:https://github.com/openkruise/kruise/blob/master/docs/concepts/astatefulset/README.md

Advanced StatefulSet示例文件:https://github.com/openkruise/kruise/blob/master/docs/tutorial/v1/guestbook-statefulset.yaml

UnitedDeployment具體的使用方法:https://github.com/openkruise/kruise/blob/master/docs/tutorial/uniteddeployment.md

UnitedDeployment示例文件:https://raw.githubusercontent.com/kruiseio/kruise/master/docs/tutorial/v1/uniteddeployment.yaml

 

 

責任編輯:張燕妮 來源: 高效運維
相關推薦

2021-11-02 08:41:44

Kubernetes Nginx部開源

2020-12-25 07:41:36

KubernetesOpenKruise應用

2024-05-30 11:53:51

2020-01-02 10:44:22

運維架構技術

2019-07-01 09:33:58

DockerNginx操作系統

2022-11-02 09:39:51

數據恢復Kubernetes

2020-06-10 08:55:36

Docker容器工具

2023-10-15 22:40:25

插件JIB

2023-08-21 15:28:36

云原生Kubernetes

2023-08-25 15:41:50

容器微服務

2023-08-22 11:00:16

云計算容器微服務

2022-03-22 10:52:02

Redis變慢服務器

2019-04-16 09:10:12

Java開發代碼

2020-08-28 13:27:25

Docker Node應用

2021-04-16 08:00:00

容器Docker工具

2009-09-22 12:17:59

ibmdwLotus

2023-10-25 18:08:13

應用容器化Docker

2023-03-19 23:31:32

OpenKruise項目自動化

2024-12-05 10:26:33

Tomcat線程熱部署

2023-08-23 15:18:06

云計算容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区成人 | 亚洲人人 | 成人毛片网 | 欧美xxxⅹ性欧美大片 | 亚洲国产欧美国产综合一区 | 国产精品国产a | 午夜小视频在线播放 | 日本精品久久久一区二区三区 | www.色综合| 91精品麻豆日日躁夜夜躁 | 97精品超碰一区二区三区 | 国产精品乱码一二三区的特点 | 久久久免费电影 | 久久88| 久久久久久艹 | 国产精品久久av | 91麻豆精品国产91久久久更新资源速度超快 | 精品不卡 | 日韩欧美三区 | 激情欧美一区二区三区中文字幕 | 国产精品久久久久久久久久久久冷 | 成人性生交a做片 | 亚洲欧美激情精品一区二区 | 国产激情网站 | 久久99精品久久久久久 | aaa在线 | 一区二区三区四区av | 国产免费自拍 | 91精品国产91久久久久久 | 午夜性色a√在线视频观看9 | www.久久.com| 成人午夜精品一区二区三区 | 亚洲成人二区 | 欧美又大粗又爽又黄大片视频 | 欧美国产一区二区 | 中文字字幕在线中文乱码范文 | 在线观看日韩精品视频 | 欧美1区2区 | 欧美一区二区综合 | 日韩av资源站 | 久久久久久综合 |