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

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

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

 [[327616]]

背景說明

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

  1. 以 deployment 部署的應(yīng)用 pod,由于 id 經(jīng)常變更,服務(wù)重啟,監(jiān)控變得難以維護(hù)。這里只是以監(jiān)控為切入點(diǎn),事實(shí)上,還有諸多應(yīng)用需要與id強(qiáng)綁定。
  2. statefulset 可以解決上面的問題,但是引入一個(gè)新的問題就是 statefulset 本身為了維護(hù)有狀態(tài)的應(yīng)用,所有的應(yīng)用 Pod 啟動(dòng)是有嚴(yán)格的先后順序,也就是串行啟動(dòng),對(duì)于大規(guī)模的應(yīng)用 pod 來講,啟動(dòng)消耗時(shí)間太長,這是無法忍受的。

為解決以上問題,我們在容器平臺(tái)當(dāng)中引入了 openkruise。

openkruise簡介

項(xiàng)目地址:https://github.com/openkruise/kruise

詳細(xì)的說明可以參考這篇文章:

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

從當(dāng)前 github 上的文檔來看,目前 OpenKruise 支持五種改進(jìn)的控制器:

  • 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 基礎(chǔ)上的更高級(jí)抽象,通過一個(gè)資源描述可以管理多個(gè) StatefulSet 的實(shí)例組,可實(shí)現(xiàn)多實(shí)例組的灰度發(fā)布與滾動(dòng)升級(jí)。

Broadcast Job 實(shí)際上就是以 DaemonSet 的方式在所有節(jié)點(diǎn)上運(yùn)行一次性 Job,SidercarSet 用于 Sidercar 注入及管理。

而我們要使用到的正是其 Advanced StatefulSet 的特性。關(guān)于Advanced StatefulSet更詳細(xì)的描述如下:

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

部署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的版本。也可以直接通過阿里云的應(yīng)用目錄來完成其安裝。

下面說一下更詳細(xì)的安裝過程:

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 

其實(shí)這里就改了兩個(gè)東西:

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

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

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

安裝完后,會(huì)生成以下五種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 

同時(shí)會(huì)創(chuàng)建一個(gè) kruise-system 的命名空間,并在里面生成一個(gè) 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 

驗(yàn)證 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. ...... 

也是確保其他未用到的相關(guān) mutatingwebhook 是關(guān)閉的。。在實(shí)際測試中,SidecarSet 資源的 mutatingwebhook 可能會(huì)導(dǎo)致創(chuàng)建的 pod 出不來。

這些webhook本質(zhì)上都是kubernetes的admissioncontrol,只要你安裝了,哪怕沒有使用,當(dāng)你在執(zhí)行相關(guān)操作時(shí),都需要被所有的adminssioncontrol檢測,如果admissioncontrol本身出了問題,就會(huì)導(dǎo)致請求無法響應(yīng)的狀態(tài)。同時(shí)這些webhook類型的adminssioncontrol也會(huì)拖慢響應(yīng)速度。

用法示例

下面是官方提供的一個(gè)基于 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í)行部署之后,啟動(dòng) 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 

更詳細(xì)的用法可參考:

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

 

 

責(zé)任編輯:張燕妮 來源: 高效運(yùn)維
相關(guān)推薦

2021-11-02 08:41:44

Kubernetes Nginx部開源

2020-12-25 07:41:36

KubernetesOpenKruise應(yīng)用

2024-05-30 11:53:51

2022-11-02 09:39:51

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

2019-07-01 09:33:58

DockerNginx操作系統(tǒng)

2020-01-02 10:44:22

運(yùn)維架構(gòu)技術(shù)

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

容器微服務(wù)

2019-04-16 09:10:12

Java開發(fā)代碼

2020-08-28 13:27:25

Docker Node應(yīng)用

2023-08-22 11:00:16

云計(jì)算容器微服務(wù)

2022-03-22 10:52:02

Redis變慢服務(wù)器

2009-09-22 12:17:59

ibmdwLotus

2023-10-25 18:08:13

應(yīng)用容器化Docker

2021-04-16 08:00:00

容器Docker工具

2023-03-19 23:31:32

OpenKruise項(xiàng)目自動(dòng)化

2023-08-23 15:18:06

云計(jì)算容器

2010-12-15 16:17:59

服務(wù)部署
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)