偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

有狀態(tài)部署慢?使用 openkruise 實現(xiàn)容器應用固定ID

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

 [[327616]]

背景說明

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

  1. 以 deployment 部署的應用 pod,由于 id 經(jīng)常變更,服務重啟,監(jiān)控變得難以維護。這里只是以監(jiān)控為切入點,事實上,還有諸多應用需要與id強綁定。
  2. statefulset 可以解決上面的問題,但是引入一個新的問題就是 statefulset 本身為了維護有狀態(tài)的應用,所有的應用 Pod 啟動是有嚴格的先后順序,也就是串行啟動,對于大規(guī)模的應用 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 的實例組,可實現(xiàn)多實例組的灰度發(fā)布與滾動升級。

Broadcast Job 實際上就是以 DaemonSet 的方式在所有節(jié)點上運行一次性 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已經(jīng)更新到了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,所以這里只啟用了這一種資源

然后執(zhí)行安裝操作:

  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 

同時會創(chuàng)建一個 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 是否被正常創(chuàng)建:

  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 可能會導致創(chuàng)建的 pod 出不來。

這些webhook本質(zhì)上都是kubernetes的admissioncontrol,只要你安裝了,哪怕沒有使用,當你在執(zhí)行相關操作時,都需要被所有的adminssioncontrol檢測,如果admissioncontrol本身出了問題,就會導致請求無法響應的狀態(tài)。同時這些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 

執(zhí)行部署之后,啟動 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 

也可通過如下操作查看資源狀態(tài):

  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

2022-11-02 09:39:51

數(shù)據(jù)恢復Kubernetes

2019-07-01 09:33:58

DockerNginx操作系統(tǒng)

2020-01-02 10:44:22

運維架構(gòu)技術

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

容器微服務

2019-04-16 09:10:12

Java開發(fā)代碼

2020-08-28 13:27:25

Docker Node應用

2023-08-22 11:00:16

云計算容器微服務

2022-03-22 10:52:02

Redis變慢服務器

2009-09-22 12:17:59

ibmdwLotus

2023-10-25 18:08:13

應用容器化Docker

2021-04-16 08:00:00

容器Docker工具

2023-03-19 23:31:32

OpenKruise項目自動化

2023-08-23 15:18:06

云計算容器

2010-12-15 16:17:59

服務部署
點贊
收藏

51CTO技術棧公眾號