教程 - 在 AKS 群集上部署 Azure 容器存储(版本 1.x.x)

本教程介绍 Azure 容器存储,并演示如何为 Azure Kubernetes 服务(AKS)上运行的应用程序部署和管理容器本机存储。 如果现在不想部署 Azure 容器存储,可以跳过本教程,直接在 AKS 中部署应用程序。 在本教程系列中,你不需要基础店面应用的 Azure 容器存储。

重要

本文介绍如何安装 Azure 容器存储(版本 1.x.x),该存储现在显式要求安装版本固定参数 --container-storage-version 1

Azure 容器存储通过提供针对各种工作负载(包括数据库、分析平台和高性能应用程序)定制的容器原生存储,简化了 Kubernetes 中有状态应用程序的管理。

在本教程结束时,你将:

  • 了解 Azure 容器存储如何支持 Kubernetes 中的各种工作负荷。
  • 探索多个存储后端选项,根据应用程序的需求定制存储。
  • 在 AKS 群集上部署 Azure 容器存储(版本 1.x.x),并创建一个通用临时卷。

在您开始之前

在前面的教程中,你创建了容器映像,将其上传到 ACR 实例,并创建了 AKS 群集。 从教程 1 - 为 AKS 准备应用程序开始学习。

  • 本教程需要使用 Azure CLI 2.35.0 或更高版本。 Azure 容器存储目前不支持门户和 PowerShell。 使用 az --version 检查版本。 若要安装或升级,请参阅安装 Azure CLI
  • 必须具有具有至少 3 个节点且具有 存储优化 VM SKUGPU 加速 VM SKU 的现有基于 Linux 的 AKS 群集。 请参阅 教程 3 - 创建 AKS 群集
  • 需要 Kubernetes 命令行客户端。 kubectl 可以通过运行 az aks install-cli 命令在本地安装它。

安装 Kubernetes 扩展

通过运行以下命令添加或升级到最新版本的 k8s-extension

az extension add --upgrade --name k8s-extension

连接到群集并检查节点状态

如果尚未从上一教程连接到群集,请运行以下命令。 如果已连接,可以跳过本部分。

  1. 运行以下命令以连接到群集。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    
  3. 以下输出示例显示了你的集群中的节点。 确保所有节点的状态都显示“就绪”:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-34832848-vmss000000   Ready    agent   80m   v1.30.9
    aks-nodepool1-34832848-vmss000001   Ready    agent   80m   v1.30.9
    aks-nodepool1-34832848-vmss000002   Ready    agent   80m   v1.30.9
    

选择后备存储选项

Azure 容器存储(版本 1.x.x)使用存储池来预配和管理持久性卷和通用卷。 它为存储池提供了各种后端存储选项,每个选项都适合特定工作负荷。 选择正确的存储类型对于优化工作负荷性能、持久性和成本效益至关重要。 在本教程中,我们将使用临时磁盘和本地 NVMe 作为后盾存储来创建通用临时卷。 但是,我们还将探索其他支持创建持久卷的后备存储选项。

临时磁盘

临时磁盘利用 AKS 节点上的本地存储资源(本地 NVMe 或临时 SSD)。 它提供低子毫秒延迟和高 IOPS,但如果 VM 重启,则不会保留数据。 临时磁盘最适用于像 Cassandra 这样的应用程序,这些应用程序优先考虑速度而非持久性,非常适合具有自身应用层级复制的工作负载。

可以使用临时磁盘创建通用临时卷或持久卷,不过在虚拟机重启后,数据将会丢失。

Azure 磁盘

非常适合 PostgreSQL 和 MongoDB 等数据库,Azure 磁盘提供持久性、可伸缩性和多层性能选项,包括高级 SSD 和超级 SSD。

Azure 磁盘允许自动预配存储卷,并包括内置冗余和高可用性。

Azure 弹性 SAN (预览版)

Azure 弹性 SAN 专为需要可伸缩性和高可用性的共享存储需求和通用数据库而设计,非常适合 CI/CD 管道或大规模数据处理等工作负载。

启用 Azure 容器存储(版本 1.x.x)并创建存储池

运行以下命令,在群集上安装 Azure 容器存储并创建本地 NVMe 存储池。

az aks update -n myAKSCluster -g myResourceGroup --enable-azure-container-storage ephemeralDisk --container-storage-version 1 --storage-pool-option NVMe

部署需要不到 15 分钟的时间。

验证存储池状态

部署完成后,将启用所选存储池类型的组件,并且你将拥有默认存储池。

若要获取可用存储池的列表,请运行以下命令:

kubectl get sp -n acstor

若要检查存储池的状态,请运行以下命令:

kubectl describe sp <storage-pool-name> -n acstor

Message如果没有说明StoragePool is ready,则您的存储池仍在创建中或遇到了问题。

显示可用的存储类

当存储池准备好使用时,必须选择存储类,以定义创建和部署卷时如何动态创建存储。

运行 kubectl get sc 以显示可用的存储类。 您应该会看到一个名为acstor-<storage-pool-name>的存储类。 在下一部分中使用此存储类部署 Pod。

使用通用临时卷部署 Pod

使用 Fio(灵活 I/O 测试器)创建 Pod 来进行基准测试和工作负载模拟 - Fio 使用通用临时卷。

  1. 使用最喜爱的文本编辑器创建 YAML 清单文件,例如 code acstor-pod.yaml

  2. 粘贴以下代码并保存文件。

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    如果更改卷的存储大小,请确保大小小于单个节点临时磁盘的可用容量。 运行 kubectl get diskpool -n acstor 以检查可用容量。

  3. 应用 YAML 清单文件来部署 Pod。

    kubectl apply -f acstor-pod.yaml
    

    应该会看到与下面类似的输出:

    pod/fiopod created
    
  4. 检查 Pod 是否正在运行,以及临时卷声明是否已成功绑定到 Pod:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    

现在,你已部署了一个使用本地 NVMe 作为其存储的 Pod,并可用于 Kubernetes 工作负载。

在预配其他卷之前,请验证临时磁盘的可用容量:

kubectl describe node <node-name>

若要详细了解 Azure 容器存储(版本 1.x.x),包括如何创建永久性卷,请参阅 什么是 Azure 容器存储?

清理资源

本教程系列教程的其余部分不需要 Azure 容器存储,因此建议立即将其删除,以避免产生不必要的 Azure 费用。

  1. 删除 Pod。

    kubectl delete pod fiopod
    
  2. 删除存储池。

    kubectl delete sp -n acstor <storage-pool-name>
    
  3. 删除扩展实例。

    az aks update -n myAKSCluster -g myResourceGroup --disable-azure-container-storage all
    

后续步骤

在本教程中,你在 AKS 群集上部署了 Azure 容器存储(版本 1.x.x)。 你已了解如何执行以下操作:

  • 在 AKS 群集上启用 Azure 容器存储(版本 1.x.x)。
  • 选择后备存储类型并创建存储池。
  • 使用通用临时卷部署 Pod。

下一教程介绍如何将应用程序部署到群集。