从 Astra Control Service 开始管理 Kubernetes 集群
提供者
设置环境后,您可以创建 Kubernetes 集群,然后将其添加到 Astra Control Service 。
创建 Kubernetes 集群
如果您还没有集群、则可以创建满足要求的集群 "Amazon Elastic Kubernetes Service (EKS)的Astra Control Service要求"。如果您还没有集群、则可以创建满足要求的集群 "Google Kubernetes Engine ( GKEE )的 Astra Control Service 要求"。如果您还没有集群、则可以创建满足要求的集群 "采用 Azure NetApp Files 的 Azure Kubernetes Service ( AKS )的 Astra 控制服务要求" 或 "采用 Azure 受管磁盘的 Azure Kubernetes Service ( AKS )的 Astra Control Service 要求"。
|
Astra控制服务支持使用Azure Active Directory (Azure AD)进行身份验证和身份管理的AKS集群。创建集群时、请按照中的说明进行操作 "正式文档" 将集群配置为使用Azure AD。您需要确保集群满足AKS管理的Azure AD集成的要求。 |
您可以通过上传将自管理集群添加到Astra Control Service kubeconfig.yaml
文件您需要确保集群满足中所述的要求 开始管理 Kubernetes 集群。
开始管理 Kubernetes 集群
登录到 Astra Control Service 后,第一步是开始管理集群。您可以添加由云提供商管理的集群或自管理集群。在将集群添加到Astra Control Service之前、您需要执行某些任务并确保集群满足特定要求。
由云提供商管理的集群需要什么?#8217
-
您应拥有包含创建集群的IAM用户凭据的JSON文件。 "了解如何创建IAM用户"。
-
适用于NetApp ONTAP 的Amazon FSX需要Astra Trident。如果您计划使用适用于NetApp ONTAP 的Amazon FSx作为EKS集群的存储后端、请参阅中的Astra Trident信息 "EKS集群要求"。
-
(可选)如果需要提供
kubectl
集群对非集群创建者的其他IAM用户的命令访问权限、请参见中的说明 "在Amazon EKS中创建集群后、如何为其他IAM用户和角色提供访问权限?"。
-
您应拥有包含在创建服务主体时Azure命令行界面输出的JSON文件。 "了解如何设置服务主体"。
如果未将 Azure 订阅 ID 添加到 JSON 文件中,您也需要此 ID 。
-
对于专用AKS集群、请参见 "通过Astra Control Service管理专用集群"。
-
您应拥有具有所需权限的服务帐户的服务帐户密钥文件。 "了解如何设置服务帐户"。
自我管理集群需要什么?#8217
您的自管理集群可以使用Astra Trident与NetApp存储服务连接、也可以使用容器存储接口(Container Storage Interface、CSI)驱动程序与其他存储服务连接。
Astra Control Service支持使用以下Kubernetes分发版的自管理集群:
-
Red Hat OpenShift 容器平台
-
Rancher Kubernetes引擎
-
上游Kubernetes
您的自管理集群需要满足以下要求:
-
集群必须可通过Internet访问。
-
如果您正在使用或计划使用已启用CSI驱动程序的存储、则必须在集群上安装相应的CSI驱动程序。有关使用CSI驱动程序集成存储的详细信息、请参阅存储服务的文档。
-
如果您正在使用或计划使用NetApp存储、请确保已安装Astra Trident的版本 "受Astra控制服务支持":
您可以 "部署Astra Trident" 使用Trident运算符(手动或使用Helm图表)或 tridentctl
。在安装或升级Astra Trident之前、请查看 "支持的前端、后端和主机配置"。 -
* Kubeconfig accessible*:您可以访问 cluster kubeconfig 这仅包括一个上下文元素。
-
*仅Rancher *:在Rancher环境中管理应用程序集群时、请修改Rancher提供的kubeconfig文件中的应用程序集群默认上下文、以使用控制平面上下文、而不是Rancher API服务器上下文。这样可以减少 Rancher API 服务器上的负载并提高性能。
如果集群使用Astra Trident提供存储服务、请确保已安装的Astra Trident版本是最新的。
-
检查Astra Trident版本。
kubectl get tridentversions -n trident
如果安装了Astra Trident、则会显示类似于以下内容的输出:
NAME VERSION trident 22.10.0
如果未安装Astra Trident、您将看到类似于以下内容的输出:
error: the server doesn't have a resource type "tridentversions"
如果Astra Trident未安装或不是最新版本、并且您希望集群使用Astra Trident提供存储服务、则需要先安装最新版本的Astra Trident、然后再继续操作。请参见 "Astra Trident 文档" 有关说明,请参见。 -
确保Pod正在运行:
kubectl get pods -n trident
-
检查存储类是否正在使用受支持的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
执行这些步骤之前,请确保您的计算机上具有以下内容:
-
已安装kubectl v1.19或更高版本
-
具有活动上下文集群管理员权限的活动 kubeconfig
-
按如下所示创建服务帐户:
-
创建名为的服务帐户文件
astracontrol-service-account.yaml
。根据需要调整名称和命名空间。如果在此处进行了更改,则应在以下步骤中应用相同的更改。
astracontrol-service-account.yaml
+
apiVersion: v1 kind: ServiceAccount metadata: name: astracontrol-service-account namespace: default
-
应用服务帐户:
kubectl apply -f astracontrol-service-account.yaml
-
-
按如下所示授予集群管理员权限:
-
创建
ClusterRoleBinding
文件已调用astracontrol-clusterrolebinding.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
-
应用集群角色绑定:
kubectl apply -f astracontrol-clusterrolebinding.yaml
-
-
列出服务帐户密码、替换
<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"} ]
中每个元素的索引
secrets
阵列以0开头。在上面的示例中、是的索引astracontrol-service-account-dockercfg-vhz87
将为0、并为创建索引astracontrol-service-account-token-r59kr
将为1。在输出中,记下包含 "token" 一词的服务帐户名称的索引。 -
按如下所示生成 kubeconfig :
-
创建
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
-
获取用于将其应用于 Kubernetes 集群的命令。
source create-kubeconfig.sh
-
-
(可选)将kubeconfig重命名为集群的有意义名称。保护集群凭据。
chmod 700 create-kubeconfig.sh mv kubeconfig-sa.txt YOUR_CLUSTER_NAME_kubeconfig
-
在信息板上,选择 * 管理 Kubernetes 集群 * 。
按照提示添加集群。
-
提供商:选择您的云提供商、然后提供创建新云实例所需的凭据或选择要使用的现有云实例。
-
* Amazon Web Services*:上传JSON文件或从剪贴板粘贴JSON文件的内容、以提供有关Amazon Web Services IAM用户帐户的详细信息。
JSON文件应包含创建集群的IAM用户的凭据。
-
* Microsoft Azure* :通过上传 JSON 文件或从剪贴板粘贴此 JSON 文件的内容来提供有关 Azure 服务主体的详细信息。
JSON 文件应包含创建服务主体时 Azure 命令行界面的输出。它还可以包含您的订阅 ID ,以便自动添加到 Astra 。否则,您需要在提供 JSON 后手动输入 ID 。
-
* Google Cloud Platform* :通过上传文件或粘贴剪贴板中的内容来提供服务帐户密钥文件。
Astra 控制服务使用此服务帐户发现在 Google Kubernetes Engine 中运行的集群。
-
其他:通过上传提供有关自管理集群的详细信息
kubeconfig.yaml
文件或粘贴的内容kubeconfig.yaml
文件。创建自己的 kubeconfig
file中、您只能定义*一*上下文元素。请参见 "Kubernetes 文档" 有关创建的信息kubeconfig
文件。-
云实例名称(对于提供商管理的集群):为添加此集群时要创建的新云实例提供一个名称。了解更多信息 "云实例"。
从集群列表中进行选择时、请仔细查看"符合条件"选项卡。如果出现警告,请将鼠标悬停在警告上以确定集群是否存在问题描述。例如,它可能会标识集群没有工作节点。
-
|
如果您选择的集群标记有 "private" 图标,则它将使用专用 IP 地址,并且 Astra Control 需要使用 Astra Connector 来管理集群。如果您看到一条消息,指出您需要安装 Astra Connector , "请参见以下说明" 安装 Astra Connector 并启用集群管理。安装 Astra Connector 后,集群应符合条件,您可以继续添加集群。 |
-
凭据名称(对于自管理集群):为要上传到Astra Control的自管理集群凭据提供一个名称。默认情况下,凭据名称会自动填充为集群的名称。
-
(可选)存储:选择希望部署到此集群的Kubernetes应用程序默认使用的存储类。
每个云提供商存储服务都会显示以下价格、性能和弹性信息:
-
Cloud Volumes Service for Google Cloud:价格、性能和弹性信息
-
Google Persistent Disk:没有价格、性能或弹性信息
-
Azure NetApp Files :性能和弹性信息
-
Azure受管磁盘:无可用的价格、性能或弹性信息
-
Amazon Elastic Block Store:没有价格、性能或弹性信息
-
适用于NetApp ONTAP 的Amazon FSX:没有价格、性能或弹性信息
-
NetApp Cloud Volumes ONTAP :没有价格、性能或弹性信息
每个存储类均可使用以下服务之一:
-
了解更多信息 "Amazon Web Services集群的存储类"。了解更多信息 "AKS 集群的存储类"。了解更多信息 "GKE 集群的存储类"。
-
* 审核并批准 * :查看配置详细信息并选择 * 添加集群 * 。
-
-
对于提供商管理的集群:如果这是您为此云提供商添加的第一个集群、则Astra Control Service会为云提供商创建一个对象存储、用于备份在符合条件的集群上运行的应用程序。(在为此云提供程序添加后续集群时、不会再创建其他对象存储。)如果指定了默认存储类、则Astra控制服务将设置您指定的默认存储类。对于在Amazon Web Services或Google Cloud Platform中管理的集群、Astra Control Service还会在集群上创建管理员帐户。这些操作可能需要几分钟时间。
更改默认存储类
您可以更改集群的默认存储类。
使用Astra Control更改默认存储类
您可以在Astra Control中更改集群的默认存储类。如果集群使用先前安装的存储后端服务、则可能无法使用此方法更改默认存储类(不能选择*设置为默认值*操作)。在这种情况下、您可以 使用命令行更改默认存储类。
-
在 Astra 控制服务 UI 中,选择 * 集群 * 。
-
在*集群*页面上、选择要更改的集群。
-
选择 * 存储 * 选项卡。
-
选择*存储类*类别。
-
选择要设置为默认值的存储类的*操作*菜单。
-
选择*设置为默认值*。
使用命令行更改默认存储类
您可以使用Kubernetes命令更改集群的默认存储类。无论集群的配置如何、此方法都有效。
-
登录到Kubernetes集群。
-
列出集群中的存储类:
kubectl get storageclass
-
从默认存储类中删除默认指定。将<SC_NAME> 替换为存储类的名称:
kubectl patch storageclass <SC_NAME> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
-
将其他存储类标记为默认值。将<SC_NAME> 替换为存储类的名称:
kubectl patch storageclass <SC_NAME> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
-
确认新的默认存储类:
kubectl get storageclass