Skip to main content
本繁體中文版使用機器翻譯,譯文僅供參考,若與英文版本牴觸,應以英文版本為準。

使用Astra Control為環境做好叢集管理準備

貢獻者

在新增叢集之前、您應確保符合下列先決條件。您也應該執行資格檢查、以確保叢集已準備好新增至 Astra Control Center 、並視需要建立 kubeconfig 叢集角色。

Astra Control 可讓您根據您的環境和偏好、新增由自訂資源( CR )或 Kribeconfig 管理的叢集。

開始之前
  • * 符合環境先決條件 * :您的環境符合要求 "營運環境需求" 適用於 Astra Control Center 。

  • * 設定工作節點 * :確保您 "設定工作節點" 在具有適當儲存驅動程式的叢集中、 Pod 可以與後端儲存設備互動。

  • [[enable - psa]]*Enable PSA restrictions * :如果叢集已啟用 Pod 安全許可強制( Kubernetes 1.25 及更新叢集的標準)、則您必須啟用 PSA 對這些命名空間的限制:

    • netapp-acc-operator 命名空間:

      kubectl label --overwrite ns netapp-acc-operator pod-security.kubernetes.io/enforce=privileged
    • netapp monitoring 命名空間:

      kubectl label --overwrite ns netapp-monitoring pod-security.kubernetes.io/enforce=privileged
  • 《支援》認證:您需要使用支援版的支援版支援系統上設定的支援認證和超級使用者與使用者ID、才能使用Astra Control Center來備份及還原應用程式ONTAP ONTAP ONTAP 。

    在flexf2命令列中執行下列命令ONTAP :

    export-policy rule modify -vserver <storage virtual machine name> -policyname <policy name> -ruleindex 1 -superuser sys
    export-policy rule modify -vserver <storage virtual machine name> -policyname <policy name> -ruleindex 1 -anon 65534
  • * KUKUBeconfig 託管叢集需求 * :這些需求是專為由 KUBeconfig 管理的應用程式叢集所設計。

    • * 讓 kubeconfig 可存取 * :您可以存取 "預設叢集 kubeconfig""您已在安裝期間進行設定"

    • * 憑證授權單位考量 * :如果您要使用參考私有憑證授權單位( CA )的 kubeconfig 檔案來新增叢集、請在中新增下列一行 cluster kubeconfig 檔案的一節。這可讓 Astra Control 新增叢集:

      insecure-skip-tls-verify: true
    • *僅限Rancher *:在Rancher環境中管理應用程式叢集時、請在Rancher提供的Kusbeconfig檔案中修改應用程式叢集的預設內容、以使用控制面內容而非Rancher API伺服器內容。如此可減少Rancher API伺服器的負載、並改善效能。

  • * Astra Control Provisioner 需求 * :您應該擁有正確設定的 Astra Control 資源配置程式、包括其 Astra Trident 元件、來管理叢集。

    • * 檢閱 Astra Trident 環境需求 * :在安裝或升級 Astra Control Provisioner 之前、請檢閱 "支援的前端、後端及主機組態"

    • * 啟用 Astra Control Provisioner 功能 * :強烈建議您安裝 Astra Trident 23.10 或更新版本並啟用 "Astra Control Provisioner 進階儲存功能"。在後續版本中、如果 Astra Control 資源配置程式未啟用、 Astra Control 將不支援 Astra Trident 。

    • * 設定儲存後端 * :至少必須有一個儲存後端 "在 Astra Trident 中設定" 在叢集上。

    • * 設定儲存類別 * :至少必須有一個儲存類別 "在 Astra Trident 中設定" 在叢集上。如果已設定預設儲存類別、請確定它是具有預設註釋的 * 僅 * 儲存類別。

    • * 設定 Volume Snapshot 控制器並安裝 Volume Snapshot 類別 * : "安裝 Volume Snapshot 控制器" 以便在Astra Control中建立快照。 "建立" 至少一個 VolumeSnapshotClass 使用 Astra Trident 。

執行資格檢查

執行下列資格檢查、確保您的叢集已準備好新增至Astra控制中心。

步驟
  1. 判斷您正在執行的 Astra Trident 版本:

    kubectl get tridentversion -n trident

    如果 Astra Trident 存在、您會看到類似下列的輸出:

    NAME      VERSION
    trident   24.02.0

    如果 Astra Trident 不存在、您會看到類似下列的輸出:

    error: the server doesn't have a resource type "tridentversions"
  2. 執行下列其中一項:

    • 如果您執行的是 Astra Trident 23.01 或更早版本、請使用這些項目 "說明" 在升級至 Astra Control Provisioner 之前、先升級至較新版本的 Astra Trident 。您可以 "執行直接升級" 如果您的 Astra Trident 位於 24.02 版的四個版本視窗內、則為 Astra Control Provisioner 24.02 。例如、您可以直接從 Astra Trident 23.04 升級至 Astra Control Provisioner 24.02 。

    • 如果您執行的是 Astra Trident 23.10 或更新版本、請確認 Astra Control Provisioner 已完成 "已啟用"。Astra Control Provisioner 無法搭配 23.10 之前的 Astra Control Center 版本使用。 "升級 Astra Control Provisioner" 因此它與您要升級以存取最新功能的 Astra Control Center 版本相同。

  3. 確保所有 Pod (包括 trident-acp)正在執行:

    kubectl get pods -n trident
  4. 判斷儲存類別是否使用支援的 Astra Trident 驅動程式。置備程式名稱應為 csi.trident.netapp.io。請參閱下列範例:

    kubectl get sc

    回應範例:

    NAME                  PROVISIONER            RECLAIMPOLICY  VOLUMEBINDINGMODE  ALLOWVOLUMEEXPANSION  AGE
    ontap-gold (default)  csi.trident.netapp.io  Delete         Immediate          true                  5d23h

建立叢集角色庫比諾圖

對於使用 kubeconfig 管理的叢集、您可以選擇性地為 Astra Control Center 建立有限權限或擴充權限管理員角色。這不是 Astra Control Center 設定的必要程序、因為您已將 Kribeconfig 設定為的一部分 "安裝程序"

如果下列任一情況適用於您的環境、本程序可協助您建立個別的 Kubleconfig :

  • 您想要限制其管理叢集的 Astra Control 權限

  • 您使用多個內容範圍、無法使用安裝期間設定的預設 Astra Control Kbeconfig 、或是具有單一內容的受限角色、都無法在您的環境中運作

開始之前

在完成程序步驟之前、請確定您要管理的叢集具備下列項目:

  • 已安裝KECV1.23或更新版本

  • 利用Astra Control Center來存取您要新增及管理的叢集

    註 在此程序中、您不需要透過KECBECVL存取執行Astra Control Center的叢集。
  • 使用叢集管理權限來管理作用中內容的叢集的作用中KECBEConfig

步驟
  1. 建立服務帳戶:

    1. 建立名為「astracontilt-service-account.yaml」的服務帳戶檔案。

      astracontrol-service-account.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: astracontrol-service-account
        namespace: default
    2. 套用服務帳戶:

      kubectl apply -f astracontrol-service-account.yaml
  2. 為要由 Astra Control 管理的叢集建立具有足夠權限的下列叢集角色之一:

    有限的叢集角色

    此角色包含 Astra Control 管理叢集所需的最低權限:

    1. 建立 ClusterRole 例如、 astra-admin-account.yaml

      astra-admin-account.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: astra-admin-account
      rules:
      
      # Get, List, Create, and Update all resources
      # Necessary to backup and restore all resources in an app
      - apiGroups:
        - '*'
        resources:
        - '*'
        verbs:
        - get
        - list
        - create
        - patch
      
      # Delete Resources
      # Necessary for in-place restore and AppMirror failover
      - apiGroups:
        - ""
        - apps
        - autoscaling
        - batch
        - crd.projectcalico.org
        - extensions
        - networking.k8s.io
        - policy
        - rbac.authorization.k8s.io
        - snapshot.storage.k8s.io
        - trident.netapp.io
        resources:
        - configmaps
        - cronjobs
        - daemonsets
        - deployments
        - horizontalpodautoscalers
        - ingresses
        - jobs
        - namespaces
        - networkpolicies
        - persistentvolumeclaims
        - poddisruptionbudgets
        - pods
        - podtemplates
        - replicasets
        - replicationcontrollers
        - replicationcontrollers/scale
        - rolebindings
        - roles
        - secrets
        - serviceaccounts
        - services
        - statefulsets
        - tridentmirrorrelationships
        - tridentsnapshotinfos
        - volumesnapshots
        - volumesnapshotcontents
        verbs:
        - delete
      
      # Watch resources
      # Necessary to monitor progress
      - apiGroups:
        - ""
        resources:
        - pods
        - replicationcontrollers
        - replicationcontrollers/scale
        verbs:
        - watch
      
      # Update resources
      - apiGroups:
        - ""
        - build.openshift.io
        - image.openshift.io
        resources:
        - builds/details
        - replicationcontrollers
        - replicationcontrollers/scale
        - imagestreams/layers
        - imagestreamtags
        - imagetags
        verbs:
        - update
    2. (僅限 OpenShift 叢集)在的結尾處附加下列項目 astra-admin-account.yaml 檔案:

      # OpenShift security
      - apiGroups:
        - security.openshift.io
        resources:
        - securitycontextconstraints
        verbs:
        - use
        - update
    3. 套用叢集角色:

      kubectl apply -f astra-admin-account.yaml
    擴充叢集角色

    此角色包含將由 Astra Control 管理之叢集的擴充權限。如果您使用多個內容範圍、且無法使用安裝期間設定的預設 Astra Control Kbeconfig 、或是具有單一內容的有限角色無法在您的環境中運作、則可以使用此角色:

    註 以下內容 ClusterRole 步驟是 Kubernetes 的一般範例。請參閱 Kubernetes 散佈文件、以取得特定於您環境的指示。
    1. 建立 ClusterRole 例如、 astra-admin-account.yaml

      astra-admin-account.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: astra-admin-account
      rules:
      - apiGroups:
        - '*'
        resources:
        - '*'
        verbs:
        - '*'
      - nonResourceURLs:
        - '*'
        verbs:
        - '*'
    2. 套用叢集角色:

      kubectl apply -f astra-admin-account.yaml
  3. 建立叢集角色與服務帳戶的叢集角色繫結:

    1. 建立名為「astracontletil-clusterrolebind.yaml」的「ClusterRoeBinding」檔案。

      astracontrol-clusterrolebinding.yaml
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: astracontrol-admin
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: astra-admin-account
      subjects:
      - kind: ServiceAccount
        name: astracontrol-service-account
        namespace: default
    2. 套用叢集角色繫結:

      kubectl apply -f astracontrol-clusterrolebinding.yaml
  4. 建立並套用權杖密碼:

    1. 建立一個稱為的權杖秘密檔案 secret-astracontrol-service-account.yaml

      secret-astracontrol-service-account.yaml
      apiVersion: v1
      kind: Secret
      metadata:
        name: secret-astracontrol-service-account
        namespace: default
        annotations:
          kubernetes.io/service-account.name: "astracontrol-service-account"
      type: kubernetes.io/service-account-token
    2. 套用權杖密碼:

      kubectl apply -f secret-astracontrol-service-account.yaml
  5. 將權杖密碼新增至服務帳戶、將其名稱新增至 secrets Array (以下範例中的最後一行):

    kubectl edit sa astracontrol-service-account
    apiVersion: v1
    imagePullSecrets:
    - name: astracontrol-service-account-dockercfg-48xhx
    kind: ServiceAccount
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"ServiceAccount","metadata":{"annotations":{},"name":"astracontrol-service-account","namespace":"default"}}
      creationTimestamp: "2023-06-14T15:25:45Z"
      name: astracontrol-service-account
      namespace: default
      resourceVersion: "2767069"
      uid: 2ce068c4-810e-4a96-ada3-49cbf9ec3f89
    secrets:
    - name: astracontrol-service-account-dockercfg-48xhx
    - name: secret-astracontrol-service-account
  6. 列出服務帳戶機密、將「<內容>」取代為正確的安裝內容:

    kubectl get serviceaccount astracontrol-service-account --context <context> --namespace default -o json

    輸出的結尾應類似於下列內容:

    "secrets": [
    { "name": "astracontrol-service-account-dockercfg-48xhx"},
    { "name": "secret-astracontrol-service-account"}
    ]

    中每個元素的索引 secrets 陣列開頭為0。在上述範例中、索引為 astracontrol-service-account-dockercfg-48xhx 將為0、索引則為 secret-astracontrol-service-account 應該是1。在輸出中、記下服務帳戶密碼的索引編號。您在下一個步驟中需要此索引編號。

  7. 產生以下的Kbeconfig:

    1. 建立 create-kubeconfig.sh 檔案:

    2. 更換 TOKEN_INDEX 在下列指令碼開頭、使用正確的值。

      create-kubeconfig.sh
      # Update these to match your environment.
      # Replace TOKEN_INDEX with the correct value
      # from the output in the previous step. If you
      # didn't change anything else above, don't change
      # anything else here.
      
      SERVICE_ACCOUNT_NAME=astracontrol-service-account
      NAMESPACE=default
      NEW_CONTEXT=astracontrol
      KUBECONFIG_FILE='kubeconfig-sa'
      
      CONTEXT=$(kubectl config current-context)
      
      SECRET_NAME=$(kubectl get serviceaccount ${SERVICE_ACCOUNT_NAME} \
        --context ${CONTEXT} \
        --namespace ${NAMESPACE} \
        *-o jsonpath='{.secrets[TOKEN_INDEX].name}')
      TOKEN_DATA=$(kubectl get secret ${SECRET_NAME} \
        --context ${CONTEXT} \
        --namespace ${NAMESPACE} \
        -o jsonpath='{.data.token}')
      
      TOKEN=$(echo ${TOKEN_DATA} | base64 -d)
      
      # Create dedicated kubeconfig
      # Create a full copy
      kubectl config view --raw > ${KUBECONFIG_FILE}.full.tmp
      
      # Switch working context to correct context
      kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp config use-context ${CONTEXT}
      
      # Minify
      kubectl --kubeconfig ${KUBECONFIG_FILE}.full.tmp \
        config view --flatten --minify > ${KUBECONFIG_FILE}.tmp
      
      # Rename context
      kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \
        rename-context ${CONTEXT} ${NEW_CONTEXT}
      
      # Create token user
      kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \
        set-credentials ${CONTEXT}-${NAMESPACE}-token-user \
        --token ${TOKEN}
      
      # Set context to use token user
      kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \
        set-context ${NEW_CONTEXT} --user ${CONTEXT}-${NAMESPACE}-token-user
      
      # Set context to correct namespace
      kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \
        set-context ${NEW_CONTEXT} --namespace ${NAMESPACE}
      
      # Flatten/minify kubeconfig
      kubectl config --kubeconfig ${KUBECONFIG_FILE}.tmp \
        view --flatten --minify > ${KUBECONFIG_FILE}
      
      # Remove tmp
      rm ${KUBECONFIG_FILE}.full.tmp
      rm ${KUBECONFIG_FILE}.tmp
    3. 請輸入命令以將其套用至Kubernetes叢集。

      source create-kubeconfig.sh
  8. (選用)將Kbeconfig重新命名為有意義的叢集名稱。

    mv kubeconfig-sa YOUR_CLUSTER_NAME_kubeconfig