你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Azure 容器存储与 Azure 弹性 SAN(预览版)配合使用
Azure 容器存储是一项基于云的卷管理、部署和业务流程服务,专为容器原生构建。 Azure 弹性 SAN 是一种完全集成的解决方案,可简化 SAN 的部署、缩放、管理和配置,同时提供内置的云功能,例如高可用性。
作为预览功能,可以配置 Azure 容器存储配置以使用 Azure 弹性 SAN。 本文介绍如何进行该配置。 在本文的最后,你将有一个使用弹性 SAN 作为其存储的 Pod。
先决条件
如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
本文需要 Azure CLI 的最新版本(2.35.0 或更高版本)。 请参阅如何安装 Azure CLI。 如果你在 Azure Cloud Shell 中使用 Bash 环境,则表示已安装最新版本。 如果你打算在本地(而不是 Azure Cloud Shell 中)运行命令,请务必使用管理员权限运行命令。 有关详细信息,请参阅开始使用 Azure Cloud Shell。
你将需要 Kubernetes 命令行客户端
kubectl
。 如果你使用的是 Azure Cloud Shell,则它已安装,或者可以通过运行az aks install-cli
命令在本地安装它。如果尚未安装 Azure 容器存储,请按照将 Azure 容器存储与 Azure Kubernetes 服务配合使用中的说明进行操作。
检查 Azure 容器存储区域是否支持你的目标区域。
确保你的订阅具有 Azure 容器存储所有者角色或 Azure 容器存储参与者角色。 其中任一角色都会授予允许 Azure 容器存储与 Elastic SAN 资源通信的权限。 要进行此更改,请转到 Azure 门户上的订阅页。 选择“访问控制 (IAM)”>“添加角色分配”,并在“工作职能角色”选项卡中搜索“Azure 容器存储所有者”或“Azure 容器存储参与者”。选择“查看”>“分配”>“添加分配”并添加帐户。
要将 Azure 容器存储与 Azure 弹性 SAN(预览版)配合使用,AKS 群集必须具有包含至少三台常规用途 VM 的节点池,例如适用于群集节点的 standard_d4s_v5,其中每台 VM 至少具有四个虚拟 CPU (vCPU)。
限制
使用 Azure 容器存储部署和协调弹性 SAN 时,目前不支持以下功能。
- 卷快照
- 存储池扩展
区域可用性
Azure 容器存储仅适用于部分 Azure 区域:
- (非洲)南非北部
- (亚太)澳大利亚东部
- (亚太)东亚
- (亚太)日本东部
- (亚太)韩国中部
- (亚太)东南亚
- (亚太)印度中部
- (欧洲)法国中部
- (欧洲)德国中西部
- (欧洲)欧洲北部
- (欧洲)西欧
- (欧洲)英国南部
- (欧洲)瑞典中部
- (欧洲)瑞士北部
- (中东)阿联酋北部
- (北美)美国东部
- (北美)美国东部 2
- (北美)美国西部
- (北美)美国西部 2
- (北美)美国西部 3
- (北美)美国中部
- (北美)美国中北部
- (北美)美国中南部
- (北美)美国中西部
- (北美)加拿大中部
- (北美)加拿大东部
- (南美洲)巴西南部
创建并附加永久性卷
按照以下步骤创建并附加永久性卷。
1.创建存储池
首先,通过在 YAML 清单文件中定义存储池来创建存储池,这是 Kubernetes 群集的存储的逻辑分组。
如果使用 az aks create
或 az aks update
命令启用 Azure 容器存储,你可能已有存储池。 使用 kubectl get sp -n acstor
获取存储池的列表。 如果已有要使用的存储池,可以跳过本部分,然后转到显示可用的存储类。
按照以下步骤使用 Azure 弹性 SAN(预览版)创建存储池。
使用最喜爱的文本编辑器创建 YAML 清单文件,例如
code acstor-storagepool.yaml
。粘贴到以下代码中。 存储池名称值可以是所需的任何内容。 调整存储以在 Gi 或 Ti 中反映所需的存储容量,然后保存文件。 Azure 弹性 SAN 目前不支持调整存储池的大小。
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: managed namespace: acstor spec: poolType: elasticSan: {} resources: requests: {"storage": 1Ti}
应用 YAML 清单文件以创建存储池。
kubectl apply -f acstor-storagepool.yaml
存储池创建完成后,将会看到如下消息:
storagepool.containerstorage.azure.com/managed created
还可以运行此命令来检查存储池的状态。 将
<storage-pool-name>
替换为存储池名称值。 对于此示例,该值为 managed。kubectl describe sp <storage-pool-name> -n acstor
创建存储池后,Azure 容器存储将使用命名约定 acstor-<storage-pool-name>
代表你创建存储类。 它还将创建 Azure 弹性 SAN 资源。
2.显示可用的存储类
当存储池可供使用时,必须选择存储类来定义在创建永久性卷声明和部署永久性卷时如何动态创建存储。
运行 kubectl get sc
以显示可用的存储类。 应会看到名为 acstor-<storage-pool-name>
的存储类。
重要
请勿使用标记为内部的存储类。 它是 Azure 容器存储正常运行所需的内部存储类。
3.创建永久性卷声明
永久卷声明 (PVC) 用于基于存储类自动预配存储。 按照以下步骤使用新的存储类创建 PVC。
使用最喜爱的文本编辑器创建 YAML 清单文件,例如
code acstor-pvc.yaml
。粘贴以下代码并保存文件。 PVC
name
值可以是所需的任何内容。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: managedpvc spec: accessModes: - ReadWriteOnce storageClassName: acstor-managed # replace with the name of your storage class if different resources: requests: storage: 100Gi
应用 YAML 清单文件以创建 PVC。
kubectl apply -f acstor-pvc.yaml
此时会看到与下面类似的输出:
persistentvolumeclaim/managedpvc created
可以通过运行以下命令来验证 PVC 的状态:
kubectl describe pvc managedpvc
创建 PVC 后,即可供 Pod 使用。
4.部署 Pod 并附加永久性卷
使用 Fio(灵活 I/O 测试器)创建 Pod 以进行基准测试和工作负载模拟,并为永久性卷指定装载路径。 对于 claimName,可使用创建永久性卷声明时使用的名称值。
使用最喜爱的文本编辑器创建 YAML 清单文件,例如
code acstor-pod.yaml
。粘贴以下代码并保存文件。
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: acstor.azure.com/io-engine: acstor volumes: - name: managedpv persistentVolumeClaim: claimName: managedpvc containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: managedpv
应用 YAML 清单文件以部署 Pod。
kubectl apply -f acstor-pod.yaml
应该会看到与下面类似的输出:
pod/fiopod created
检查 Pod 是否正在运行,以及永久性卷声明是否已成功绑定到 Pod:
kubectl describe pod fiopod kubectl describe pvc managedpvc
检查 fio 测试以查看其当前状态:
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
现在,你已部署了使用弹性 SAN 作为存储的 Pod,并且可以将其用于 Kubernetes 工作负载。
管理永久性卷和存储池
现在你已创建了永久性卷,可以根据需要分离并重新附加该卷。 还可以删除存储池。
分离并重新附加永久性卷
要分离永久性卷,请删除永久卷附加到的 Pod。 将 <pod-name>
替换为 Pod 的名称,例如 fiopod。
kubectl delete pods <pod-name>
要重新附加永久性卷,只需在 YAML 清单文件中引用永久性卷声明名称,如部署 Pod 并附加永久性卷中所述。
要检查永久性卷声明绑定到哪个永久性卷,请运行 kubectl get pvc <persistent-volume-claim-name>
。
删除存储池
如果要删除存储池,请运行以下命令。 将 <storage-pool-name>
替换为存储池名称。
kubectl delete sp -n acstor <storage-pool-name>