全部產品
Search
文件中心

Container Service for Kubernetes:應用分發快速入門

更新時間:Sep 15, 2024

您可以通過ACK One艦隊的應用分發功能將艦隊執行個體中的應用分發至多個關聯集群中,無需依賴Git倉庫,簡化應用部署流程。本文介紹如何在艦隊執行個體中建立應用並根據分發策略分發至多叢集中。

前提條件

步驟一(可選):在艦隊執行個體中建立命名空間

如果待分發的應用所在的命名空間在艦隊中不存在,您需要先在艦隊執行個體中建立命名空間,如已存在則跳過此步驟。

使用艦隊執行個體的KubeConfig串連艦隊執行個體,執行以下命令,建立樣本命名空間demo。

kubectl create namespace demo

步驟二:在艦隊執行個體中建立應用

此處應用支援ConfigMap、Deployment、Service等資源,本文以分發單獨一個Nginx Deployment為例介紹。

  1. 使用以下內容,建立weighted-deployment.yaml檔案。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: demo  # 分發的應用所在的命名空間。
      name: weighted-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: weighted-deployment
      template:
        metadata:
          labels:
            app: weighted-deployment
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
  2. 執行以下命令部署應用。

    kubectl apply -f weighted-deployment.yaml

步驟三:在艦隊執行個體中建立分發策略為多叢集分發應用

您可以通過定義分發策略(PropagationPolicy)選擇需要分發的應用以及對應的叢集。建立分發策略後會將匹配到的應用分發到對應叢集中。

本文樣本:以複製(Duplicated)方式將Deployment weighted-deployment分發到cluster1和cluster2中,兩叢集副本數一致,均為3個。

  1. 使用以下內容,建立propagationpolicy.yaml檔案。

    apiVersion: one.alibabacloud.com/v1alpha1
    kind: PropagationPolicy
    metadata:
      name: weighted-pp
      namespace: demo
    spec:
      resourceSelectors:
      - apiVersion: apps/v1
        kind: Deployment
        name: weighted-deployment
      placement:
        clusterAffinity:
          clusterIds:
          - ${cluster1-id} # 您的叢集ID。
          - ${cluster2-id} # 您的叢集ID。
        replicaScheduling:
          replicaSchedulingType: Duplicated

    主要參數說明如下,詳細參數說明請參見分發策略

    參數

    說明

    參數值

    resourceSelectors

    選擇一個或多個待分發的K8s資源。

    • apiVersion:指定待分發資源的apiVersion,必選。

    • kind:指定待分發資源的類型,必選。

    • name:指定待分發資源的名稱。

    • namespace:指定待分發資源的命名空間。

      說明

      PropagationPolicy只可以選擇其本身所在命名空間的資源。

    • labelSelector:通過標籤選擇資源。

    placement

    clusterAffinity:指定資源要分發的叢集。

    通過clusterIds數組直接指明叢集ID。更多其他選擇方式請參見分發策略

    說明

    此處需填寫叢集ID,不是叢集名稱。

    replicaScheduling:指定有副本數資源的調度策略。例如Deployment、StatefulSet、Job。

    replicaSchedulingType值為Duplicated,表示會將每個資源都複製到叢集中,即每個叢集都會有spec.Replicas個副本數。更多說明請參見分發策略

  2. 執行以下命令,建立分發策略。

    kubectl apply -f propagationpolicy.yaml

步驟四(可選):在艦隊執行個體中建立差異化策略

您可以通過定義差異化策略(OverridePolicy)選擇需要差異化部署的叢集以及資源。建立差異化策略後會將相應的資源進行定製化修改後再部署到選中的叢集中。

本文樣本:將部署到cluster2的應用進行一些差異化修改,將replicas數修改為1,且將鏡像的registry修改為阿里雲的registry

  1. 使用以下內容,建立overridepolicy.yaml檔案。

    apiVersion: one.alibabacloud.com/v1alpha1
    kind: OverridePolicy
    metadata:
      name: example
      namespace: demo
    spec:
      resourceSelectors:
        - apiVersion: apps/v1
          kind: Deployment
          name: weighted-pp
      overrideRules:
        - targetCluster:
            clusterNames:
              - ${cluster2-id}   # 需要差異化部署的叢集ID。
          overriders:
            plaintext:
              - operator: replace
                path: /spec/replicas
                value: 1
            imageOverrider:
              - component: Registry
                operator: replace
                value: registry.cn-hangzhou.aliyuncs.com

    主要參數說明如下,詳細參數說明請參見差異化策略

    參數

    說明

    參數值

    resourceSelector

    選擇需要差異化修改的資源。

    • apiVersion:指定需要差異化修改資源的apiVersion,必選。

    • kind:指定需要差異化修改的資源類型,必選。

    • name:指定需要差異化修改的資源名稱。

    • namespace:指定需要差異化修改的命名空間。

      說明

      PropagationPolicy只可以選擇其本身所在命名空間的資源。

    • labelSelector:通過標籤來選擇資源。

    overrideRules

    通過一組覆蓋規則修改應用模板。

    • plaintext:使用JSON Patch的方式修改模板。

    • imageOverrider:可以修改鏡像的registryrepositoryversion

  2. 執行以下命令,建立差異化策略。

    kubectl apply -f overridepolicy.yaml

步驟五:查看多叢集中應用的狀態

您可以通過以下AMC命令查看應用的多叢集分髮狀態,也可以直接去關聯集群中查看應用的運行狀態,以確認艦隊應用分發成功。

執行以下命令,查看應用狀態。

kubectl amc get deploy -n demo

預期輸出:

NAME                  CLUSTER          READY   UP-TO-DATE   AVAILABLE   AGE    ADOPTION
weighted-deployment   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y
weighted-deployment   cxxxxxxxxxxxxx   3/3     3            3           3d4h   Y

預期輸出表明,應用已經分發至指定的叢集中。

相關文檔