简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

添加集群的前提条件

在添加集群之前,应确保满足前提条件。您还应运行资格检查,以确保集群已准备好添加到 Astra 控制中心。

添加集群之前需要满足的要求

  • 以下类型的集群之一:

    • 运行OpenShift 4.6-8、4.7、4.8或4.9的集群

    • 使用RKE1运行Rancher 2.2.8、2.0.9或2.6的集群

    • 运行Kubernetes 1.20到1.23的集群

    • 运行VMware Tanzu Kubernetes Grid 1.4的集群

    • 运行VMware Tanzu Kubernetes Grid Integrated Edition 1.12.2的集群

      确保集群中有一个或多个工作节点,并且至少有 1 GB RAM 可用于运行遥测服务。

    注 如果您计划将第二个 OpenShift 4.6 , 4.7 或 4.8 集群添加为托管计算资源,则应确保已启用 Astra Trident 卷快照功能。请参见官方的 Astra Trident "说明" 使用 Astra Trident 启用和测试卷快照。
  • 使用配置了的Astra Trident StorageClasses "支持的存储后端" (对于任何类型的集群都是必需的)

  • 在备份 ONTAP 系统上设置的超级用户和用户 ID ,用于使用 Astra 控制中心备份和还原应用程序。在 ONTAP 命令行中运行以下命令: export-policy rule modify -vserver <storage virtual machine name> -policyname <policy name> -ruleindex 1 -superuser sysm -anon 65534

  • 管理员定义的 Astra Trident volumesnapshotclass 对象。请参见 Astra Trident "说明" 使用 Astra Trident 启用和测试卷快照。

  • 确保您仅为 Kubernetes 集群定义了一个默认存储类。

运行资格检查

运行以下资格检查,以确保您的集群已准备好添加到 Astra 控制中心。

步骤
  1. 检查 Trident 版本。

    kubectl get tridentversions -n trident

    如果存在 Trident ,您将看到类似于以下内容的输出:

    NAME      VERSION
    trident   21.04.0

    如果 Trident 不存在,您将看到类似于以下内容的输出:

    error: the server doesn't have a resource type "tridentversions"
    注 如果未安装 Trident 或安装的版本不是最新的,则需要先安装最新版本的 Trident ,然后再继续操作。请参见 "Trident 文档" 有关说明,请参见。
  2. 检查存储类是否正在使用受支持的 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
    thin                   kubernetes.io/vsphere-volume   Delete          Immediate           false                  6d

创建管理员角色 kubeconfig

执行这些步骤之前,请确保您的计算机上具有以下内容:

  • 已安装 kubectl v1.19 或更高版本

  • 具有活动上下文集群管理员权限的活动 kubeconfig

步骤
  1. 按如下所示创建服务帐户:

    1. 创建名为 asacontrol service-account.yaml 的服务帐户文件。

      根据需要调整名称和命名空间。如果在此处进行了更改,则应在以下步骤中应用相同的更改。

    astracontrol-service-account.yaml

    +

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: astracontrol-service-account
      namespace: default
    1. 应用服务帐户:

      kubectl apply -f astracontrol-service-account.yaml
  2. (可选)如果集群使用限制性的 POD 安全策略,该策略不允许创建特权 POD 或允许 Pod 容器中的进程以 root 用户身份运行,请为集群创建一个自定义 POD 安全策略,以使 Astra Control 能够创建和管理 Pod 。有关说明,请参见 "创建自定义 POD 安全策略"

  3. 按如下所示授予集群管理员权限:

    1. 创建一个 ClusterRoleBindingm 文件,该文件名为 astracontrol — clusterrolebind.YAML

      根据需要调整创建服务帐户时修改的任何名称和命名空间。

    astracontrol-clusterrolebinding.yaml

    +

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: astracontrol-admin
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: astracontrol-service-account
      namespace: default
    1. 应用集群角色绑定:

      kubectl apply -f astracontrol-clusterrolebinding.yaml
  4. 列出服务帐户密码,将 ` <context>` 替换为适用于您的安装的正确上下文:

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

    输出的结尾应类似于以下内容:

    "secrets": [
    { "name": "astracontrol-service-account-dockercfg-vhz87"},
    { "name": "astracontrol-service-account-token-r59kr"}
    ]

    sec白 烟 数组中每个元素的索引均以 0 开头。在上面的示例中, asacontrol service-account-dockercfg-vhz87 的索引为 0 , asacontrol service-account-token-r59rk 的索引为 1 。在输出中,记下包含 "token" 一词的服务帐户名称的索引。

  5. 按如下所示生成 kubeconfig :

    1. 创建 create-kubeconfig.sh 文件。将以下脚本开头的 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
    2. 获取用于将其应用于 Kubernetes 集群的命令。

      source create-kubeconfig.sh
  6. ( * 可选 * )将 kubeconfig 重命名为集群的有意义名称。保护集群凭据。

    chmod 700 create-kubeconfig.sh
    mv kubeconfig-sa.txt YOUR_CLUSTER_NAME_kubeconfig

下一步是什么?

确认满足了这些前提条件后,您便已准备就绪 "添加集群"

了解更多信息