Подготовка томов NFS Azure NetApp Files для Служба Azure Kubernetes
Azure NetApp Files поддерживает тома с помощью NFS (NFSv3 или NFSv4.1), SMB или двойного протокола (NFSv3 и SMB или NFSv4.1 и SMB).
- В этой статье описаны сведения о подготовке томов NFS статически или динамически.
- Сведения о подготовке томов SMB статически или динамически см. в статье "Подготовка томов SMB Для SMB Azure NetApp Files" для Служба Azure Kubernetes.
- Сведения о подготовке томов с двумя протоколами статически см. в статье "Подготовка томов двух протоколов Azure NetApp Files для Служба Azure Kubernetes
Статическая настройка для приложений, использующих тома NFS
В этом разделе описывается, как создать том NFS в Azure NetApp Files и предоставить том статическим образом Kubernetes. В нем также описывается использование тома с контейнерным приложением.
Создание тома NFS
Определите переменные для последующего использования. Замените myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname, vnetid и anfSubnetID соответствующим значением из учетной записи и среды. Файловый путь должен быть уникальным в пределах всех учетных записей ANF.
RESOURCE_GROUP="myresourcegroup" LOCATION="mylocation" ANF_ACCOUNT_NAME="myaccountname" POOL_NAME="mypool1" SERVICE_LEVEL="premium" # Valid values are Standard, Premium, and Ultra UNIQUE_FILE_PATH="myfilepath" VOLUME_SIZE_GIB="myvolsize" VOLUME_NAME="myvolname" VNET_ID="vnetId" SUBNET_ID="anfSubnetId"
Создайте том с помощью
az netappfiles volume create
команды. Дополнительные сведения см. в статье "Создание тома NFS для Azure NetApp Files".az netappfiles volume create \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --name "$VOLUME_NAME" \ --service-level $SERVICE_LEVEL \ --vnet $VNET_ID \ --subnet $SUBNET_ID \ --usage-threshold $VOLUME_SIZE_GIB \ --file-path $UNIQUE_FILE_PATH \ --protocol-types NFSv3
Создание постоянного тома
Список сведений о томе с помощью
az netappfiles volume show
команды. Замените переменные соответствующими значениями из учетной записи и среды Azure NetApp Files, если они не определены на предыдущем шаге.az netappfiles volume show \ --resource-group $RESOURCE_GROUP \ --account-name $ANF_ACCOUNT_NAME \ --pool-name $POOL_NAME \ --volume-name "$VOLUME_NAME -o JSON
Ниже приведен пример приведенной выше команды, выполняемой с реальными значениями.
{ ... "creationToken": "myfilepath2", ... "mountTargets": [ { ... "ipAddress": "10.0.0.4", ... } ], ... }
Создайте файл
pv-nfs.yaml
и скопируйте в него следующий код YAML. Убедитесь, что сервер соответствует выходному IP-адресу из шага 1, а путь соответствует выходным данным вышеcreationToken
. Емкость также должна соответствовать размеру тома из приведенного выше шага.apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 100Gi accessModes: - ReadWriteMany mountOptions: - vers=3 nfs: server: 10.0.0.4 path: /myfilepath2
Создайте постоянный том с помощью
kubectl apply
команды:kubectl apply -f pv-nfs.yaml
Убедитесь, что состояние постоянного тома доступно с помощью
kubectl describe
команды:kubectl describe pv pv-nfs
Создание заявки на доступ к постоянному тому
Создайте файл
pvc-nfs.yaml
и скопируйте в него следующий код YAML. Этот манифест создает ПВХ с именемpvc-nfs
100Gi хранилища иReadWriteMany
режима доступа, соответствующего созданному ПС.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 100Gi
Создайте утверждение постоянного тома
kubectl apply
с помощью команды:kubectl apply -f pvc-nfs.yaml
Убедитесь, что состояние утверждения постоянного тома привязано с помощью
kubectl describe
команды:kubectl describe pvc pvc-nfs
Подключение с помощью модуля pod
Создайте файл
nginx-nfs.yaml
и скопируйте в него следующий код YAML. Этот манифест определяетnginx
модуль pod, использующий утверждение постоянного тома.kind: Pod apiVersion: v1 metadata: name: nginx-nfs spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: nginx-nfs command: - "/bin/sh" - "-c" - while true; do echo $(date) >> /mnt/azure/outfile; sleep 1; done volumeMounts: - name: disk01 mountPath: /mnt/azure volumes: - name: disk01 persistentVolumeClaim: claimName: pvc-nfs
Создайте pod с помощью
kubectl apply
команды:kubectl apply -f nginx-nfs.yaml
Убедитесь, что модуль pod запущен с помощью
kubectl describe
команды:kubectl describe pod nginx-nfs
Убедитесь, что том подключен к модулем pod с помощью
kubectl exec
подключения к модулем pod, а затем используйтеdf -h
для проверки подключения тома.kubectl exec -it nginx-nfs -- sh
/ # df -h Filesystem Size Used Avail Use% Mounted on ... 10.0.0.4:/myfilepath2 100T 384K 100T 1% /mnt/azure ...
Динамическое настройка для приложений, использующих тома NFS
Astra Trident может использоваться для динамической подготовки файлов NFS или SMB в Azure NetApp Files. Динамически подготовленные тома SMB поддерживаются только рабочими узлами Windows.
В этом разделе описывается, как использовать Astra Trident для динамического создания тома NFS в Azure NetApp Files и автоматического подключения его к контейнеризованному приложению.
Установка Astra Trident
Для динамической подготовки томов NFS необходимо установить Astra Trident. Astra Trident — это динамическое средство подготовки хранилища NetApp, предназначенное для Kubernetes. Упрощение использования хранилища для приложений Kubernetes с помощью стандартного драйвера CSI (CSI) интерфейса хранилища контейнеров Astra Trident. Astra Trident развертывается в кластерах Kubernetes в качестве модулей pod и предоставляет службы динамического оркестрации хранилища для рабочих нагрузок Kubernetes.
Trident можно установить с помощью оператора Trident (вручную или с помощью Helm) или tridentctl
. Дополнительные сведения об этих методах установки и их работе см. в руководстве по установке Astra Trident.
Установка Astra Trident с помощью Helm
Helm необходимо установить на рабочей станции, чтобы установить Astra Trident с помощью этого метода. Другие методы установки Astra Trident см. в руководстве по установке Astra Trident.
Чтобы установить Astra Trident с помощью Helm для кластера с только рабочими узлами Linux, выполните следующие команды:
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart helm install trident netapp-trident/trident-operator --version 23.04.0 --create-namespace --namespace trident
Выходные данные команды будут выглядеть примерно так:
NAME: trident LAST DEPLOYED: Fri May 5 13:55:36 2023 NAMESPACE: trident STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes. Your release is named 'trident' and is installed into the 'trident' namespace. Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster. To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases. You may find all Trident releases and source code online at https://github.com/NetApp/trident. To learn more about the release, try: $ helm status trident $ helm get all trident
Чтобы подтвердить успешное установку Astra Trident, выполните следующую
kubectl describe
команду:kubectl describe torc trident
Выходные данные команды будут выглядеть примерно так:
Name: trident Namespace: Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: trident meta.helm.sh/release-namespace: trident API Version: trident.netapp.io/v1 Kind: TridentOrchestrator Metadata: ... Spec: IPv6: false Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: <nil> Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent k8sTimeout: 0 Kubelet Dir: <nil> Log Format: text Log Layers: <nil> Log Workflows: <nil> Namespace: trident Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Windows: false Status: Current Installation Params: IPv6: false Autosupport Hostname: Autosupport Image: docker.io/netapp/trident-autosupport:23.04 Autosupport Proxy: Autosupport Serial Number: Debug: false Disable Audit Log: true Enable Force Detach: false Http Request Timeout: 90s Image Pull Policy: IfNotPresent Image Pull Secrets: Image Registry: k8sTimeout: 30 Kubelet Dir: /var/lib/kubelet Log Format: text Log Layers: Log Level: info Log Workflows: Probe Port: 17546 Silence Autosupport: false Trident Image: docker.io/netapp/trident:23.04.0 Message: Trident installed Namespace: trident Status: Installed Version: v23.04.0 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Installing 2m59s trident-operator.netapp.io Installing Trident Normal Installed 2m31s trident-operator.netapp.io Trident installed
Создание серверной части
Чтобы указать Astra Trident на подписку Azure NetApp Files и место для создания томов, создается серверная часть. На этом шаге требуются сведения о учетной записи, созданной на предыдущем шаге.
Создайте файл
backend-secret.yaml
и скопируйте в него следующий код YAML. Измените иclientSecret
измените правильныеClient ID
значения для вашей среды.apiVersion: v1 kind: Secret metadata: name: backend-tbc-anf-secret type: Opaque stringData: clientID: 00001111-aaaa-2222-bbbb-3333cccc4444 clientSecret: rR0rUmWXfNioN1KhtHisiSAnoTherboGuskey6pU
Создайте файл
backend-anf.yaml
и скопируйте в него следующий код YAML. ИзменитеsubscriptionID
,tenantID
location
иserviceLevel
на правильные значения для вашей среды. Используйте подпискуsubscriptionID
Azure, в которой включена служба Azure NetApp Files.tenantID
clientID
Получите иclientSecret
из регистрации приложения в идентификаторе Microsoft Entra с достаточными разрешениями для службы Azure NetApp Files. Регистрация приложения включает роль владельца или участника, предопределенную Azure. Расположение должно быть расположением Azure, которое содержит по крайней мере одну делегированную подсеть, созданную на предыдущем шаге. ОнserviceLevel
должен соответствовать настроеннойserviceLevel
для пула емкости в настройке Azure NetApp Files для рабочих нагрузок AKS.apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: backend-tbc-anf spec: version: 1 storageDriverName: azure-netapp-files subscriptionID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e tenantID: aaaabbbb-0000-cccc-1111-dddd2222eeee location: eastus serviceLevel: Premium credentials: name: backend-tbc-anf-secret
Дополнительные сведения о серверных службах см. в разделе "Параметры конфигурации серверной части Azure NetApp Files" и примеры.
Примените секрет и серверную часть с помощью
kubectl apply
команды. Сначала примените секрет:kubectl apply -f backend-secret.yaml -n trident
Выходные данные команды будут выглядеть примерно так:
secret/backend-tbc-anf-secret created
Примените серверную часть:
kubectl apply -f backend-anf.yaml -n trident
Выходные данные команды будут выглядеть примерно так:
tridentbackendconfig.trident.netapp.io/backend-tbc-anf created
Убедитесь, что серверная часть создана с помощью
kubectl get
команды:kubectl get tridentbackends -n trident
Выходные данные команды будут выглядеть примерно так:
NAME BACKEND BACKEND UUID tbe-kfrdh backend-tbc-anf 8da4e926-9dd4-4a40-8d6a-375aab28c566
Создание класса хранения
Класс хранения используется для определения того, как единица хранения создается динамически с помощью постоянного тома. Для использования томов Azure NetApp Files необходимо создать класс хранения.
Создайте файл
anf-storageclass.yaml
и скопируйте в него следующий код YAML:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azure-netapp-files provisioner: csi.trident.netapp.io parameters: backendType: "azure-netapp-files" fsType: "nfs"
Создайте класс хранилища с помощью
kubectl apply
команды:kubectl apply -f anf-storageclass.yaml
Выходные данные команды будут выглядеть примерно так:
storageclass/azure-netapp-files created
kubectl get
Выполните команду, чтобы просмотреть состояние класса хранилища:kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azure-netapp-files csi.trident.netapp.io Delete Immediate false
Создание ПВХ
Утверждение постоянного тома (PVC) — это запрос к хранилищу со стороны пользователя. При создании утверждения постоянного тома Astra Trident автоматически создает том Azure NetApp Files и делает его доступным для рабочих нагрузок Kubernetes для использования.
Создайте файл
anf-pvc.yaml
и скопируйте в него следующий код YAML. В этом примере требуется объем 1-ТиБ с доступом ReadWriteMany.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Ti storageClassName: azure-netapp-files
Создайте утверждение постоянного тома
kubectl apply
с помощью команды:kubectl apply -f anf-pvc.yaml
Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/anf-pvc created
Чтобы просмотреть сведения о утверждении
kubectl get
постоянного тома, выполните команду:kubectl get pvc
Выходные данные команды будут выглядеть примерно так:
kubectl get pvc -n trident NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc Bound pvc-bffa315d-3f44-4770-86eb-c922f567a075 1Ti RWO azure-netapp-files 62s
Использование постоянного тома
После создания ПВХ Астра Тридент создает постоянный объем. Модуль pod можно подключить и получить доступ к тому Azure NetApp Files.
Следующий манифест можно использовать для определения модуля POD NGINX, который подключает том Azure NetApp Files, созданный на предыдущем шаге. В этом примере том монтируется в /mnt/data
.
Создайте файл
anf-nginx-pod.yaml
и скопируйте в него следующий код YAML:kind: Pod apiVersion: v1 metadata: name: nginx-pod spec: containers: - name: nginx image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/data" name: volume volumes: - name: volume persistentVolumeClaim: claimName: anf-pvc
Создайте pod с помощью
kubectl apply
команды:kubectl apply -f anf-nginx-pod.yaml
Выходные данные команды будут выглядеть примерно так:
pod/nginx-pod created
Kubernetes создал модуль pod с подключенным томом и доступным в контейнере
nginx
/mnt/data
. Вы можете подтвердить, проверив журналы событий для pod с помощьюkubectl describe
команды:kubectl describe pod nginx-pod
Выходные данные команды будут выглядеть примерно так:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: anf-pvc ReadOnly: false default-token-k7952: Type: Secret (a volume populated by a Secret) SecretName: default-token-k7952 Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 15s default-scheduler Successfully assigned trident/nginx-pod to brameshb-non-root-test Normal SuccessfulAttachVolume 15s attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-bffa315d-3f44-4770-86eb-c922f567a075" Normal Pulled 12s kubelet Container image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" already present on machine Normal Created 11s kubelet Created container nginx Normal Started 10s kubelet Started container nginx
Следующие шаги
Astra Trident поддерживает множество функций в Azure NetApp Files. Дополнительные сведения см. в разделе:
Azure Kubernetes Service