日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用OpenKruise部署云原生應用

OpenKruise是基于Kubernetes的一個標準擴展組件,可以配合原生Kubernetes使用,高效管理應用容器、Sidecar及鏡像分發等功能。本文介紹如何使用OpenKruise部署云原生應用。

前提條件

已安裝Kubernetes托管版集群,且集群版本不低于1.13。具體操作,請參見創建Kubernetes托管版集群

背景信息

OpenKruise是阿里云開源的云原生應用自動化引擎,也是阿里巴巴經濟體上云全面使用的部署基座,已正式加入CNCF Sandbox。

OpenKruise包含了多種自定義Workload,用于無狀態應用、有狀態應用、Sidecar容器、Daemon應用等部署管理,提供了原地升級、灰度、流式、配置優先級等擴展策略。

組件架構

OpenKruise

OpenKruise是Kubernetes的一個標準擴展,所以也可以原生地部署到K8s集群當中,主要包含以下三個組件。

組件

說明

Kruise-manager

Kruise-manager是一個運行Controller和Webhook的中心組件,通過Deployment部署在kruise-system命名空間中。通過Controller以及Webhook實現原地升級及Sidecar管理等核心能力。

Kruise-daemon

通過DaemonSet部署到每個節點上,提供鏡像預熱及容器重啟等功能。

Kruise-Rollout

Kruise-Rollout是基于Kubernetes的一個標準擴展組件,包含完整的Rollout模型定義與方案實現,滿足配合應用流量和實際部署實例的金絲雀發布、藍綠發布、A/B Testing發布,并能提供旁路的無感對接、兼容已有的多種工作負載。

使用說明

OpenKruise包含CloneSet、Advanced StatefulSet、Advanced DaemonSet等控制器。以下介紹常用控制器的功能。

表 1. 常用控制器介紹

控制器

功能

CloneSet

管理無狀態應用,對標Kubernetes原生Deployment。關于CloneSet的詳細介紹,請參見CloneSet

資源(YAML)的字段與Deployment不完全兼容,但功能上全覆蓋,并提供比Deployment更豐富的策略。

Advanced StatefulSet

管理有狀態應用,對標Kubernetes原生StatefulSet。關于Advanced StatefulSet的詳細介紹,請參見Advanced StatefulSet

資源(YAML)字段與原生StatefulSet完全兼容,只需要把apiVersion改為apps.kruise.io/v1alpha1,另外提供了optional字段來擴展發布策略(原地升級、并行發布等)。

Advanced DaemonSet

管理Daemon應用,對標Kubernetes原生DaemonSet。關于Advanced DaemonSet的詳細介紹,請參見Advanced DaemonSet

資源(YAML)字段與原生DaemonSet完全兼容,只需要把apiVersion改為apps.kruise.io/v1alpha1,另外提供了optional字段來擴展發布策略(熱升級、灰度、按Node標簽灰度等)。

SidecarSet

獨立管理Sidecar容器和注入。關于SidecarSet的詳細介紹,請參見SidecarSet

在獨立CR中定義Sidecar容器和Label Selector,OpenKruise會在所有符合Selector條件的Pod創建時注入定義好的Sidecar容器,并支持對已注入Sidecar容器做原地升級。

UnitedDeployment

管理不同區域下的多個Sub Workload,關于UnitedDeployment的詳細介紹,請參見UnitedDeployment

目前支持將CloneSet、StatefulSet、Advanced StatefulSet作為Sub Workload,您可以用一個UnitedDeployment來定義不同區域中的Sub Workload部署Replicas。

以下介紹CloneSet、Advanced StatefulSet、Advanced DaemonSet與社區對標控制器的功能對比。

表 2. 與社區控制器功能對比

功能

CloneSet VS Deployment

Advanced StatefulSet VS StatefulSet

Advanced DaemonSet VS DaemonSet

CloneSet

Deployment

Advanced StatefulSet

StatefulSet

Advanced DaemonSet

DaemonSet

流式擴容

對

錯

錯

錯

對

錯

指定縮容

對

錯

對

錯

錯

錯

Pod重建升級

對

對

對

對

對

對

Pod原地升級

對

錯

對

錯

對

錯

分批灰度發布

對

錯

對

對

對

錯

最大可用數量

對

對

對

錯

對

對

最大彈性數量

對

對

錯

錯

對

錯

通過使用優先級策略和打散策略來自定義發布順序

對

錯

對

錯

對

錯

通過lifecycle hook管理Pod生命周期

對

錯

錯

錯

錯

錯

安裝OpenKruise

重要
  • 安裝OpenKruise前,請確保Kubernetes版本不低于1.13。如果您使用的是Kubernetes 1.13或1.14版本,必須先在kube-apiserver中打開CustomResourceWebhookConversion feature-gate。更多信息,請參見特性門控

  • 由于杭州倉庫已不可用,您如果遇到鏡像registry.cn-hangzhou.cr.aliyuncs.com/openkruise/kruise-manager拉取失敗,請將鏡像地址調整為registry.cn-shanghai.cr.aliyuncs.com/openkruise/kruise-manager進行重試。

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇運維管理 > 組件管理

  3. 組件管理頁面,單擊應用管理頁簽。在ack-kruise區域,單擊安裝

    提示對話框確認組件信息后,單擊確定

使用CloneSet部署無狀態應用

  1. 創建CloneSet。

    1. 創建cloneset.yaml

      apiVersion: apps.kruise.io/v1alpha1
      kind: CloneSet
      metadata:
        name: demo-clone
      spec:
        replicas: 5
        selector:
          matchLabels:
            app: guestbook
        template: # Pod template和Deployment的結構完全一致。
          metadata:
            labels:
              app: guestbook
          spec:
            containers:
            - name: guestbook
              image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2
              env:
              - name: test
                value: foo
        updateStrategy:
          type: InPlaceIfPossible     # 盡量使用原地升級,否則重建升級。
          maxUnavailable: 20%        # 發布過程最多20%不可用。
          inPlaceUpdateStrategy:
            gracePeriodSeconds: 3    # 每個Pod原地升級前Not Ready優雅等待時間。
      • type:設置升級策略,支持以下3種升級方式。

        • ReCreate:控制器會刪除舊Pod和PVC,然后用新版本重新創建Pod和PVC。

        • InPlaceIfPossible:控制器會優先嘗試原地升級Pod,如果不行再采用重建升級。

        • InPlaceOnly:控制器只允許采用原地升級。

      • maxUnavailable:發布過程中,限制最多不可用的Pod數量,可以設置為一個絕對值或者百分比。

      • gracePeriodSeconds:每個Pod原地升級前Not Ready優雅等待時間。

    2. 使cloneset.yaml在ACK集群中生效。

      kubectl create -f ./cloneset.yaml

      預期輸出:

      cloneset.apps.kruise.io/demo-clone created
  2. 查看Pod運行狀態。

    kubectl get pod

    預期輸出:

    NAME               READY   STATUS    RESTARTS   AGE
    demo-clone-5b9kl   1/1     Running   0          3s
    demo-clone-6xjdg   1/1     Running   0          3s
    demo-clone-bvmdj   1/1     Running   0          3s
    demo-clone-dm22s   1/1     Running   0          3s
    demo-clone-rbpg9   1/1     Running   0          3s
  3. 查看CloneSet。

    kubectl get clone

    預期輸出:

    NAME         DESIRED   UPDATED   UPDATED_READY   READY   TOTAL   AGE
    demo-clone   5         5         5               5       5       46s
    • DESIRED:期望Pod數量(spec.replicas)。

    • UPDATED:最新版本的Pod數量(status.updatedReplicas)。

    • UPDATED_READY:最新版本的可用Pod數量(status.updatedReadyReplicas)。

    • READY:可用Pod總量(status.readyReplicas)。

    • TOTAL:實際Pod總量(status.replicas)。

使用Advanced StatefulSet部署有狀態應用

  1. 創建Advanced StatefulSet。

    1. 創建statefulset.yaml

      apiVersion: apps.kruise.io/v1alpha1
      kind: StatefulSet
      metadata:
        name: demo-asts
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: guestbook-sts
        podManagementPolicy: Parallel
        template: # Pod template和官方StatefulSet的結構完全一致。
          metadata:
            labels:
              app: guestbook-sts
          spec:
            containers:
            - name: guestbook
              image: openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/demo:1.10.2
              env:
              - name: test
                value: foo
            readinessGates:
            - conditionType: InPlaceUpdateReady
        updateStrategy:
          type: RollingUpdate
          rollingUpdate:
            podUpdatePolicy: InPlaceIfPossible   # 盡量使用原地升級,否則重建升級。
            maxUnavailable: 20%                  # 發布過程最多20%不可用。
            inPlaceUpdateStrategy:
              gracePeriodSeconds: 3              # 每個Pod原地升級前Not ready優雅等待時間。
      • type:設置Pod升級策略,支持以下3種方式升級。

        • ReCreate:控制器會刪除舊Pod和PVC,然后用新版本重新創建Pod和PVC。

        • InPlaceIfPossible:控制器會優先嘗試原地升級Pod,如果不行再采用重建升級。

        • InPlaceOnly:控制器只允許采用原地升級。

      • maxUnavailable:發布過程中,限制最多不可用的Pod數量,可以設置為一個絕對值或者百分比。

      • gracePeriodSeconds:每個Pod原地升級前Not ready優雅等待時間。

    2. 使statefulset.yaml在ACK集群中生效。

       kubectl create -f ./statefulset.yaml

      預期輸出:

      statefulset.apps.kruise.io/demo-asts created
  2. 查看Pod運行狀態。

    kubectl get pod

    預期輸出:

    NAME          READY   STATUS    RESTARTS   AGE
    demo-asts-0   1/1     Running   0          3h29m
    demo-asts-1   1/1     Running   0          3h29m
    demo-asts-2   1/1     Running   0          3h29m
  3. 查看Advanced StatefulSet。

    kubectl get asts

    預期輸出:

    NAME        DESIRED   CURRENT   UPDATED   READY   AGE
    demo-asts   3         3         3         3       3h30m
    • DESIRED:期望Pod數量(spec.replicas)。

    • UPDATED:最新版本的Pod數量(status.updatedReplicas)。

    • READY:可用Pod總量(status.readyReplicas)。

    • TOTAL:實際Pod總量(status.replicas)。