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

云盤類型有狀態(tài)應(yīng)用的跨可用區(qū)遷移

更新時(shí)間:

storage-operator組件提供了云盤類型有狀態(tài)應(yīng)用跨可用區(qū)遷移和多地域打散的功能,實(shí)現(xiàn)了跨可用區(qū)遷移的自動(dòng)化。遷移過程出現(xiàn)異常時(shí),storage-operator組件可以通過預(yù)檢查和回滾機(jī)制在原可用區(qū)恢復(fù)應(yīng)用,保證業(yè)務(wù)的可用性。本文介紹如何實(shí)現(xiàn)云盤類型的有狀態(tài)應(yīng)用跨可用區(qū)遷移。

適用場(chǎng)景

  • 當(dāng)遇到規(guī)劃變更、應(yīng)用規(guī)模擴(kuò)大從而需要在多可用區(qū)部署,或當(dāng)前可用區(qū)資源不足時(shí),您都需要將已部署的有狀態(tài)應(yīng)用遷移至其他的可用區(qū)。

  • NAS、OSS存儲(chǔ)底層支持跨可用區(qū)、多掛載使用。但云盤本身無多可用區(qū)漂移的能力,無法復(fù)用存儲(chǔ)聲明和存儲(chǔ)卷,此時(shí),需要將云盤的有狀態(tài)應(yīng)用遷移至新的可用區(qū)。

實(shí)現(xiàn)原理及遷移流程

云盤實(shí)現(xiàn)應(yīng)用的跨可用區(qū)遷移,依賴云盤快照功能,并且支持設(shè)定新建的快照保留時(shí)間。關(guān)于云盤快照的更多信息,請(qǐng)參見快照介紹。關(guān)于快照計(jì)費(fèi)請(qǐng)參見快照計(jì)費(fèi)

storage-operator組件提供的云盤類型有狀態(tài)應(yīng)用遷移流程如下。

  1. 相關(guān)預(yù)檢查,例如,待遷移應(yīng)用運(yùn)行是否正常、是否有需要遷移的云盤等。若檢查失敗,則不會(huì)進(jìn)行遷移。

  2. 將云盤類型有狀態(tài)應(yīng)用縮容至0副本,此時(shí)應(yīng)用處于暫停狀態(tài)。

  3. 為待遷移的有狀態(tài)應(yīng)用掛載的云盤制作快照,快照支持跨可用區(qū)。

  4. 確認(rèn)快照可用后,使用快照在目標(biāo)可用區(qū)制作新云盤,新云盤與原云盤的數(shù)據(jù)一致。

  5. 重建同名的存儲(chǔ)聲明及其對(duì)應(yīng)的新存儲(chǔ)卷,綁定新云盤。

  6. 云盤類型有狀態(tài)應(yīng)用副本恢復(fù)至原副本數(shù)量,并自動(dòng)關(guān)聯(lián)重建的存儲(chǔ)聲明,實(shí)際掛載新云盤。

    重要

    預(yù)檢查完成并開始遷移后,每個(gè)步驟均對(duì)應(yīng)了不同的失敗回滾策略。為確保回滾后的應(yīng)用能掛載原云盤,避免數(shù)據(jù)丟失,請(qǐng)確認(rèn)遷移后的有狀態(tài)應(yīng)用運(yùn)行正常后,再刪除云盤。

  7. (可選)確認(rèn)有狀態(tài)應(yīng)用運(yùn)行正常后,刪除原存儲(chǔ)卷和相應(yīng)的云盤。關(guān)于云盤計(jì)費(fèi),請(qǐng)參見塊存儲(chǔ)計(jì)費(fèi)

注意事項(xiàng)

  • 待遷移的有狀態(tài)應(yīng)用使用的所有存儲(chǔ)均為ESSD云盤。

    為了提升快照制作時(shí)間,本功能在遷移時(shí)選用極速快照,具體操作請(qǐng)參見快照極速可用能力。目前極速快照僅支持ESSD云盤,若您的應(yīng)用使用非ESSD類型云盤,可通過以下方式處理。

  • 目標(biāo)可用區(qū)支持ESSD云盤,且集群中已有在目標(biāo)可用區(qū)支持ESSD云盤的節(jié)點(diǎn)可供調(diào)度。

  • 能業(yè)務(wù)接受中斷。對(duì)于多副本的有狀態(tài)應(yīng)用,為保證數(shù)據(jù)的一致性,在遷移前會(huì)縮容至0副本,云盤遷移完成后再一次性恢復(fù)至原副本數(shù),而非滾動(dòng)遷移。

重要

有狀態(tài)應(yīng)用的跨可用區(qū)遷移過程中會(huì)產(chǎn)生業(yè)務(wù)的中斷,中斷時(shí)長(zhǎng)與副本數(shù)量、容器啟動(dòng)速度、所使用云盤容量等因素相關(guān)。

前提條件

  • 已創(chuàng)建Kubernetes集群,Kubernetes版本為v1.20及以上,且存儲(chǔ)插件選擇為CSI。具體操作,請(qǐng)參見已創(chuàng)建Kubernetes托管版集群

  • 若您的集群為ACK專有版集群,則需要為集群WorkerRole配置如下權(quán)限。具體操作,請(qǐng)參見創(chuàng)建自定義權(quán)限策略

    展開查看ACK專有版集群WorkerRole權(quán)限策略內(nèi)容

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSnapshot",
                    "ecs:DescribeSnapshot",
                    "ecs:DeleteSnapshot",
                    "ecs:ModifyDiskSpec",
                    "ecs:DescribeTaskAttribute"
                ],
                "Resource": "*"
            }
        ]
    }
    說明

    ACK Pro版集群無需配置權(quán)限。

  • storage-operator組件版本不低于v1.26.2-1de13b6-aliyun。關(guān)于升級(jí)storage-operator組件的操作,請(qǐng)參見管理組件

使用方式

  1. 執(zhí)行以下命令,修改集群中ConfigMap的配置。

    kubectl patch configmap/storage-operator \
      -n kube-system \
      --type merge \
      -p '{"data":{"storage-controller":"{\"imageRep\":\"acs/storage-controller\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-controller/install.yaml\",\"type\":\"deployment\"}"}}'
  2. 執(zhí)行以下命令,在集群中創(chuàng)建有狀態(tài)應(yīng)用遷移任務(wù)。

    cat <<EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerStorageOperator
    metadata:
      name: default
    spec:
      operationType: APPMIGRATE
      operationParams:
        stsName: web
        stsNamespace: default
        stsType: kube
        targetZone: cn-beijing-h,cn-beijing-j
        checkWaitingMinutes: "1"
        healthDurationMinutes: "1"
        snapshotRetentionDays: "2"
        retainSourcePV: "true"
    EOF

    參數(shù)

    是否必選

    說明

    operationType

    必選

    取值為APPMIGRATE,表明當(dāng)前的操作是有狀態(tài)應(yīng)用遷移。

    stsName

    必選

    有狀態(tài)應(yīng)用名稱,當(dāng)前僅支持填寫單個(gè)有狀態(tài)應(yīng)用。

    說明

    部署多個(gè)有狀態(tài)應(yīng)用的遷移任務(wù)時(shí),組件將以部署時(shí)間順序依次遷移。

    stsNamespace

    必選

    有狀態(tài)應(yīng)用所在命名空間。

    targetZone

    必選

    遷移的目標(biāo)可用區(qū)列表。當(dāng)存在多個(gè)目標(biāo)可用區(qū)時(shí),可用區(qū)之間用英文半角逗號(hào)(,)隔開。例如cn-beijing-h,cn-beijing-j

    • 當(dāng)應(yīng)用掛載的某個(gè)云盤已在列表中時(shí),應(yīng)用將不進(jìn)行遷移。

    • 當(dāng)目標(biāo)可用區(qū)大于1時(shí),剩余云盤將按列表中可用區(qū)的排列順序依次遷移至各個(gè)目標(biāo)可用區(qū)。

    stsType

    可選

    指定的有狀態(tài)應(yīng)用的類型,默認(rèn)為kube。取值:

    • kube:原生StatefulSet。

    • kruise:OpenKruise組件提供的Advanced StatefulSet。

    checkWaitingMinutes

    可選

    有狀態(tài)應(yīng)用在遷移后的可用區(qū)啟動(dòng)時(shí),其狀態(tài)檢查的輪詢間隔時(shí)間,單位為分鐘。

    默認(rèn)為"1",即每分鐘檢查一次,直至可用副本數(shù)與預(yù)期一致,或多次檢查失敗重試后回滾,回遷至原可用區(qū)。

    重要

    對(duì)于副本數(shù)較多、鏡像拉取時(shí)間長(zhǎng)、業(yè)務(wù)本身啟動(dòng)耗時(shí)較長(zhǎng)的應(yīng)用,需要適當(dāng)增加輪詢間隔時(shí)間,避免重試次數(shù)過多后應(yīng)用回滾。

    healthDurationMinutes

    可選

    二次檢查的間隔時(shí)間,單位為分鐘。二次檢查即當(dāng)有狀態(tài)應(yīng)用遷移完成,可用副本數(shù)與預(yù)期一致后,等待指定時(shí)間進(jìn)行二次檢查,以增強(qiáng)數(shù)據(jù)敏感業(yè)務(wù)的遷移可靠性。

    默認(rèn)為"0",即不進(jìn)行二次檢查。

    snapshotRetentionDays

    可選

    遷移過程中,新建極速快照的保留時(shí)間,單位為天。取值:

    • "1":默認(rèn)值,保留一天。

    • "-1":將永久保留極速快照。

    retainSourcePV

    可選

    是否保留原云盤及其在集群中對(duì)應(yīng)的存儲(chǔ)卷資源。取值:

    • "false":默認(rèn)值,不保留。

    • "true":保留,您可以登錄ECS管理控制臺(tái)找到原云盤實(shí)例,且集群內(nèi)對(duì)應(yīng)的存儲(chǔ)卷資源也不會(huì)被刪除,存儲(chǔ)卷處于Released狀態(tài)。

使用示例

測(cè)試集群為cn-beijing的ACK集群Pro版,包含可用區(qū)來自cn-beijing-i, cn-beijing-j, cn-beijing-k的節(jié)點(diǎn)node-zone-i, node-zone-j, node-zone-k。

示例1:云盤跨可用區(qū)遷移

步驟一:創(chuàng)建使用ESSD云盤的有狀態(tài)應(yīng)用

  1. 執(zhí)行以下命令,在集群中部署有狀態(tài)應(yīng)用Nginx。

    展開查看部署有狀態(tài)應(yīng)用Nginx的文件

    cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
                - containerPort: 80
                  name: web
              volumeMounts:
                - name: www
                  mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
        - metadata:
            name: www
            labels:
              app: nginx
          spec:
            accessModes: [ "ReadWriteOnce" ]
            storageClassName: "alicloud-disk-essd"
            resources:
              requests:
                storage: 20Gi
    EOF
    
  2. 執(zhí)行以下命令,確認(rèn)應(yīng)用的兩個(gè)副本的部署情況。

    kubectl get pod -owide | grep web-

    預(yù)期輸出:

    NAME                        READY    STATUS   RESTARTS    AGE     IP                ZONE                  NOMINATED NODE   READINESS GATES
    web-0                        1/1     Running   0          44s     172.29.XX.XX    node-zone-i           <none>           <none>
    web-1                        1/1     Running   0          3s      172.29.XX.XX    node-zone-j           <none>           <none>

    預(yù)期輸出表明,應(yīng)用的兩個(gè)副本分別部署在cn-beijing-i, cn-beijing-j兩個(gè)可用區(qū)的節(jié)點(diǎn)上。實(shí)際部署的結(jié)果由調(diào)度器決定。

步驟二:創(chuàng)建有狀態(tài)應(yīng)用遷移任務(wù)

  1. 執(zhí)行以下命令,在集群中創(chuàng)建有狀態(tài)應(yīng)用遷移任務(wù)。

    以下遷移任務(wù)中,將有狀態(tài)應(yīng)用的兩個(gè)副本全部遷移至cn-beijing-k可用區(qū)。遷移前,已確認(rèn)該節(jié)點(diǎn)有足夠的資源,且可用區(qū)和機(jī)型均支持ESSD云盤。

    cat <<EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerStorageOperator
    metadata:
      name: migrate-to-k
    spec:
      operationType: APPMIGRATE
      operationParams:
        stsName: web
        stsNamespace: default
        stsType: kube
        targetZone: cn-beijing-k      # 遷移至cn-beijing-k可用區(qū)。
        healthDurationMinutes: "1"    # 遷移完成后隔1分鐘確認(rèn)應(yīng)用運(yùn)行正常。
        snapshotRetentionDays: "-1"   # 新建的快照長(zhǎng)期保留,直至在控制臺(tái)刪除。
        retainSourcePV: "true"        # 保留原可用區(qū)的云盤和對(duì)應(yīng)PV。
    EOF
  2. 執(zhí)行以下命令,查詢遷移任務(wù)的狀態(tài)。

    kubectl describe cso migrate-to-k | grep Status

    預(yù)期輸出:

      Status:  SUCCESS

    預(yù)期輸出為SUCCESS,表明遷移任務(wù)狀態(tài)正常。如果預(yù)期輸出為FAILED,表明遷移任務(wù)創(chuàng)建失敗,關(guān)于失敗問題排查,請(qǐng)參見(可選)任務(wù)失敗時(shí)原因排查

  3. 執(zhí)行以下命令,查詢遷移后應(yīng)用的兩個(gè)副本的部署情況。

    kubectl get pod -owide | grep web-

    預(yù)期輸出:

    NAME                        READY    STATUS    RESTARTS   AGE     IP                  ZONE                 NOMINATED NODE    READINESS GATES
    web-0                        1/1     Running   0          25m     172.29.XX.XX     node-zone-k           <none>           <none>
    web-1                        1/1     Running   0          25m     172.29.XX.XX     node-zone-k           <none>           <none>

    預(yù)期輸出表明,應(yīng)用的副本均已遷移至可用區(qū)cn-beijing-k的節(jié)點(diǎn)上。

  4. 登錄ECS管理控制臺(tái)

    確認(rèn)如下信息:

    • 新建的極速快照為長(zhǎng)期保留。

    • 新建的云盤在cn-beijing-k可用區(qū)。

    • 原cn-beijing-i和cn-beijing-j的云盤配置未被刪除,因?yàn)檫w移任務(wù)中retainSourcePV的配置為true

(可選)任務(wù)失敗時(shí)原因排查

若在步驟二中查詢到的遷移任務(wù)狀態(tài)為FAILED,可通過以下步驟查詢失敗原因,根據(jù)原因調(diào)整后重試。

  1. 執(zhí)行以下命令,確認(rèn)應(yīng)用已經(jīng)成功回滾。

    kubectl get pod -owide | grep web-

    預(yù)期輸出:

    NAME                        READY    STATUS    RESTARTS   AGE     IP                  ZONE                 NOMINATED NODE    READINESS GATES
    web-0                        1/1     Running   0          12m     172.29.XX.XX   node-zone-i           <none>           <none>
    web-1                        1/1     Running   0          12m     172.29.XX.XX    node-zone-j           <none>           <none>
  2. 執(zhí)行以下指令,查詢遷移任務(wù)失敗的原因。

    kubectl describe cso migrate-to-k | grep Message -A 1

    預(yù)期輸出:

      Message:
        Consume: no pvc mounted in statefulset or no pvc need to migrated web

    預(yù)期輸出表明,失敗的原因是由于找不到待遷移的存儲(chǔ)聲明,可能為應(yīng)用并未掛載存儲(chǔ)、應(yīng)用已掛載在目標(biāo)可用區(qū),無法獲取存儲(chǔ)聲明信息等,請(qǐng)根據(jù)實(shí)際情況修改后重試。

示例2:云盤多可用區(qū)打散

例如,示例一中的有狀態(tài)應(yīng)用的兩個(gè)副本當(dāng)前都部署在cn-beijing-k可用區(qū)中,即運(yùn)行在節(jié)點(diǎn)node-beijing-k上。為提高應(yīng)用的可用性,現(xiàn)需要將副本打散到cn-beijing-i及cn-beijing-j雙可用區(qū)中。您可以通過以下操作實(shí)現(xiàn)云盤的多可用區(qū)打散。

  1. 執(zhí)行以下命令,在集群中創(chuàng)建有狀態(tài)應(yīng)用遷移任務(wù)。

    cat <<EOF | kubectl apply -f -
    apiVersion: storage.alibabacloud.com/v1beta1
    kind: ContainerStorageOperator
    metadata:
      name: migrate-to-i-and-j
    spec:
      operationType: APPMIGRATE
      operationParams:
        stsName: web
        stsNamespace: default
        stsType: kube
        targetZone: cn-beijing-i,cn-beijing-j   # 遷移至cn-beijing-i和cn-beijing-j可用區(qū)。
        healthDurationMinutes: "1"              # 遷移完成后隔1分鐘確認(rèn)應(yīng)用運(yùn)行正常。
        snapshotRetentionDays: "-1"             # 新建的快照長(zhǎng)期保留,直至在控制臺(tái)刪除。
        retainSourcePV: "true"                  # 保留原可用區(qū)的云盤和對(duì)應(yīng)PV。
    EOF
  2. 執(zhí)行以下命令,查詢遷移任務(wù)的狀態(tài)。

    kubectl describe cso migrate-to-i-and-j | grep Status

    預(yù)期輸出:

      Status:  SUCCESS
  3. 執(zhí)行以下命令,查詢遷移后應(yīng)用兩個(gè)副本的部署情況。

    kubectl get pod -owide | grep web-

    預(yù)期輸出:

    NAME                        READY    STATUS    RESTARTS   AGE     IP                  ZONE                NOMINATED NODE   READINESS GATES
    web-0                        1/1     Running   0          12m     172.29.XX.XX    node-zone-i           <none>           <none>
    web-1                        1/1     Running   0          12m     172.29.XX.XX    node-zone-j           <none>           <none>

    預(yù)期輸出表明,應(yīng)用的兩個(gè)副本已被打散至可用區(qū)cn-beijing-i和cn-beijing-j的節(jié)點(diǎn)上。

  4. 登錄ECS管理控制臺(tái)

    確認(rèn)如下信息:

    • 新建的極速快照為長(zhǎng)期保留。

    • 新建的云盤在cn-beijing-i、cn-beijing-j可用區(qū)。

    • 原cn-beijing-k的云盤配置未被刪除,因?yàn)檫w移任務(wù)中retainSourcePV的配置為true