Подготовка томов SMB Azure NetApp Files для Служба Azure Kubernetes
Azure NetApp Files поддерживает тома с помощью NFS (NFSv3 или NFSv4.1), SMB и двойного протокола (NFSv3 и SMB, или NFSv4.1 и SMB).
- В этой статье описаны сведения о подготовке томов SMB статически или динамически.
- Сведения о подготовке томов NFS статически или динамически см. в статье "Подготовка томов NFS Azure NetApp Files для Служба Azure Kubernetes".
- Сведения о подготовке томов с двумя протоколами статически см. в статье "Подготовка томов двух протоколов Azure NetApp Files для Служба Azure Kubernetes
Статическая настройка для приложений, использующих тома SMB
В этом разделе описывается, как создать том SMB в Azure NetApp Files и предоставить том статически kubernetes для использования контейнерного приложения.
Создание тома SMB
Определите переменные для последующего использования. Замените myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolsize и virtnetid соответствующим значением для вашей среды. Файловый путь должен быть уникальным в пределах всех учетных записей 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
команды.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 CIFS
Создание секрета с учетными данными домена
Создайте секрет в кластере AKS для доступа к серверу Active Directory (AD) с помощью
kubectl create secret
команды. Этот секрет будет использоваться постоянным томом Kubernetes для доступа к тому SMB Azure NetApp Files. Используйте следующую команду, чтобы создать секрет, заменивUSERNAME
имя пользователя,PASSWORD
пароль иDOMAIN_NAME
доменное имя для AD.kubectl create secret generic smbcreds --from-literal=username=USERNAME --from-literal=password="PASSWORD" --from-literal=domain='DOMAIN_NAME'
Проверьте, создан ли секрет.
kubectl get secret NAME TYPE DATA AGE smbcreds Opaque 2 20h
Установка драйвера CSI SMB
Чтобы создать SMB PersistentVolume
Kubernetes, необходимо установить драйвер интерфейса хранилища контейнеров (CSI).
Установите драйвер CSI SMB в кластере с помощью helm. Обязательно установите
windows.enabled
для параметраtrue
значение :helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.13.0 --set windows.enabled=true
Другие методы установки драйвера CSI SMB см. в разделе "Установка главного драйвера SMB CSI" в кластере Kubernetes.
Убедитесь, что
csi-smb
модуль pod контроллера запущен, и каждый рабочий узел имеет модуль pod, работающийkubectl get pods
с помощью команды:kubectl get pods -n kube-system | grep csi-smb csi-smb-controller-68df7b4758-xf2m9 3/3 Running 0 3m46s csi-smb-node-s6clj 3/3 Running 0 3m47s csi-smb-node-win-tfxvk 3/3 Running 0 3m47s
Создание постоянного тома
Список сведений о томе с помощью
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": "myvolname", ... "mountTargets": [ { ... " "smbServerFqdn": "ANF-1be3.contoso.com", ... } ], ... }
Создайте файл
pv-smb.yaml
и скопируйте в него следующий код YAML. При необходимости заменитеmyvolname
creationToken
и заменитеANF-1be3.contoso.com\myvolname
значением предыдущегоsmbServerFqdn
шага. Не забудьте включить секрет учетных данных AD вместе с пространством имен, где находится секрет, созданный на предыдущем шаге.apiVersion: v1 kind: PersistentVolume metadata: name: anf-pv-smb spec: storageClassName: "" capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain mountOptions: - dir_mode=0777 - file_mode=0777 - vers=3.0 csi: driver: smb.csi.k8s.io readOnly: false volumeHandle: myvolname # make sure it's a unique name in the cluster volumeAttributes: source: \\ANF-1be3.contoso.com\myvolname nodeStageSecretRef: name: smbcreds namespace: default
Создайте постоянный том с помощью
kubectl apply
команды:kubectl apply -f pv-smb.yaml
Убедитесь, что состояние постоянного тома доступно с помощью
kubectl describe
команды:kubectl describe pv pv-smb
Создание заявки на доступ к постоянному тому
Создайте файл
pvc-smb.yaml
и скопируйте в него следующий код YAML.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany volumeName: anf-pv-smb storageClassName: "" resources: requests: storage: 100Gi
Создайте утверждение постоянного тома
kubectl apply
с помощью команды:kubectl apply -f pvc-smb.yaml
Убедитесь, что состояние утверждения постоянного тома привязано с помощью команды kubectl описать:
kubectl describe pvc pvc-smb
Подключение с помощью модуля pod
Создайте файл
iis-smb.yaml
и скопируйте в него следующий код YAML. Этот файл будет использоваться для создания модуля pod службы IIS для подключения тома к пути/inetpub/wwwroot
.apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: web spec: nodeSelector: "kubernetes.io/os": windows volumes: - name: smb persistentVolumeClaim: claimName: anf-pvc-smb containers: - name: web image: mcr.microsoft.com/windows/servercore/iis:windowsservercore resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 volumeMounts: - name: smb mountPath: "/inetpub/wwwroot" readOnly: false
Создайте pod с помощью команды kubectl apply :
kubectl apply -f iis-smb.yaml
Убедитесь, что модуль pod запущен и
/inetpub/wwwroot
подключен из SMB с помощью команды kubectl описать:kubectl describe pod iis-pod
Выходные данные команды будут выглядеть примерно так:
Name: iis-pod Namespace: default Priority: 0 Node: akswin000001/10.225.5.246 Start Time: Fri, 05 May 2023 09:34:41 -0400 Labels: app=web Annotations: <none> Status: Running IP: 10.225.5.248 IPs: IP: 10.225.5.248 Containers: web: Container ID: containerd://39a1659b6a2b6db298df630237b2b7d959d1b1722edc81ce9b1bc7f06237850c Image: mcr.microsoft.com/windows/servercore/iis:windowsservercore Image ID: mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 05 May 2023 09:34:55 -0400 Ready: True Restart Count: 0 Limits: cpu: 1 memory: 800M Requests: cpu: 1 memory: 800M Environment: <none> Mounts: /inetpub/wwwroot from smb (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-mbnv8 (ro) ...
Убедитесь, что том подключен к pod с помощью команды kubectl exec для подключения к pod, а затем используйте
dir
команду в правильном каталоге, чтобы проверить, подключен ли том, и размер соответствует размеру подготовленного тома.kubectl exec -it iis-pod –- cmd.exe
Выходные данные команды будут выглядеть примерно так:
Microsoft Windows [Version 10.0.20348.1668] (c) Microsoft Corporation. All rights reserved. C:\>cd /inetpub/wwwroot C:\inetpub\wwwroot>dir Volume in drive C has no label. Volume Serial Number is 86BB-AA55 Directory of C:\inetpub\wwwroot 05/04/2023 08:15 PM <DIR> . 05/04/2023 08:15 PM <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 107,373,838,336 bytes free
Динамическое настройка для приложений, использующих тома SMB
В этом разделе описывается, как использовать Astra Trident для динамического создания тома SMB в Azure NetApp Files и автоматического подключения его к контейнеризованному приложению windows.
Установка Astra Trident
Для динамической подготовки томов SMB необходимо установить Astra Trident версии 22.10 или более поздней. Для динамической подготовки томов SMB требуются рабочие узлы Windows.
Astra Trident — это динамическое средство подготовки хранилища NetApp, предназначенное для Kubernetes. Упрощение использования хранилища для приложений Kubernetes с помощью стандартного драйвера CSI (CSI) интерфейса хранилища контейнеров Astra Trident. Astra Trident развертывается в кластерах Kubernetes в качестве модулей pod и предоставляет службы динамического оркестрации хранилища для рабочих нагрузок Kubernetes.
Trident можно установить с помощью оператора Trident (вручную или с помощью Helm) или tridentctl
. Дополнительные сведения об этих методах установки и их работе см. в руководстве по установке.
Установка Astra Trident с помощью Helm
Helm необходимо установить на рабочей станции, чтобы установить Astra Trident с помощью этого метода. Другие методы установки Astra Trident см. в руководстве по установке Astra Trident. Если у вас есть рабочие узлы Windows в кластере, убедитесь, что windows включает любой метод установки.
Чтобы установить Astra Trident с помощью Helm для кластера с рабочими узлами Windows, выполните следующие команды:
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 –-set windows=true
Выходные данные команды будут выглядеть примерно так:
NAME: trident LAST DEPLOYED: Fri May 5 14:23:05 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: true 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 74s trident-operator.netapp.io Installing Trident Normal Installed 46s trident-operator.netapp.io Trident installed
Создание серверной части
Серверная часть должна быть создана, чтобы указать Astra Trident о подписке Azure NetApp Files и где необходимо создать тома. Дополнительные сведения о серверных службах см. в разделе "Параметры конфигурации серверной части Azure NetApp Files" и примеры.
Создайте файл
backend-secret-smb.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-smb.yaml
и скопируйте в него следующий код YAML. ИзменитеClientID
, , иtenantID
location
clientSecret
subscriptionID
serviceLevel
на правильные значения для вашей среды.clientID
ИдентификаторtenantID
, который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-smb 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 nasType: smb
Создайте секрет и серверную часть с помощью
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 tridentbackends -n trident
Выходные данные команды будут выглядеть примерно так:
NAME BACKEND BACKEND UUID tbe-9shfq backend-tbc-anf-smb 09cc2d43-8197-475f-8356-da7707bae203
Создание секрета с учетными данными домена для SMB
Создайте секрет в кластере AKS для доступа к серверу AD с помощью
kubectl create secret
команды. Эти сведения будут использоваться постоянным томом Kubernetes для доступа к тому SMB Azure NetApp Files. Используйте следующую команду, заменивDOMAIN_NAME\USERNAME
доменное имя и имя пользователя иPASSWORD
пароль.kubectl create secret generic smbcreds --from-literal=username=DOMAIN_NAME\USERNAME –from-literal=password="PASSWORD"
Убедитесь, что секрет создан.
kubectl get secret
Выходные данные похожи на следующий пример:
NAME TYPE DATA AGE smbcreds Opaque 2 2h
Создание класса хранения
Класс хранения используется для определения того, как единица хранения создается динамически с помощью постоянного тома. Для использования томов Azure NetApp Files необходимо создать класс хранения.
Создайте файл
anf-storageclass-smb.yaml
и скопируйте в него следующий код YAML.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: anf-sc-smb provisioner: csi.trident.netapp.io allowVolumeExpansion: true parameters: backendType: "azure-netapp-files" trident.netapp.io/nasType: "smb" csi.storage.k8s.io/node-stage-secret-name: "smbcreds" csi.storage.k8s.io/node-stage-secret-namespace: "default"
Создайте класс хранилища с помощью
kubectl apply
команды:kubectl apply -f anf-storageclass-smb.yaml
Выходные данные команды будут выглядеть примерно так:
storageclass/anf-sc-smb created
kubectl get
Выполните команду, чтобы просмотреть состояние класса хранилища:kubectl get sc anf-sc-smb NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE anf-sc-smb csi.trident.netapp.io Delete Immediate true 13s
Создание ПВХ
Утверждение постоянного тома (PVC) — это запрос к хранилищу со стороны пользователя. При создании утверждения постоянного тома Astra Trident автоматически создает общую папку SMB Azure NetApp Files и делает ее доступной для рабочих нагрузок Kubernetes для использования.
Создайте файл с именем
anf-pvc-smb.yaml
и скопируйте следующий YAML. В этом примере создается том 100 ГиБ сReadWriteMany
доступом и использует класс хранилища, созданный в классе хранилища.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: anf-pvc-smb spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi storageClassName: anf-sc-smb
Создайте утверждение постоянного тома
kubectl apply
с помощью команды:kubectl apply -f anf-pvc-smb.yaml
Выходные данные команды будут выглядеть примерно так:
persistentvolumeclaim/anf-pvc-smb created
Чтобы просмотреть сведения о утверждении
kubectl get
постоянного тома, выполните команду:kubectl get pvc
Выходные данные команды будут выглядеть примерно так:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE anf-pvc-smb Bound pvc-209268f5-c175-4a23-b61b-e34faf5b6239 100Gi RWX anf-sc-smb 5m38s
Чтобы просмотреть постоянный том, созданный Astra Trident, выполните следующую
kubectl get
команду:kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-209268f5-c175-4a23-b61b-e34faf5b6239 100Gi RWX Delete Bound default/anf-pvc-smb anf-sc-smb 5m52s
Использование постоянного тома
После создания PVC можно настроить модуль pod для доступа к тому Azure NetApp Files. Следующий манифест можно использовать для определения модуля pod службы IIS (IIS), который подключает общую папку SMB Azure NetApp Files, созданную на предыдущем шаге. В этом примере том монтируется в /inetpub/wwwroot
.
Создайте файл
anf-iis-pod.yaml
и скопируйте в него следующий код YAML:apiVersion: v1 kind: Pod metadata: name: iis-pod labels: app: web spec: nodeSelector: "kubernetes.io/os": windows volumes: - name: smb persistentVolumeClaim: claimName: anf-pvc-smb containers: - name: web image: mcr.microsoft.com/windows/servercore/iis:windowsservercore resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 volumeMounts: - name: smb mountPath: "/inetpub/wwwroot" readOnly: false
Создайте развертывание с помощью
kubectl apply
команды:kubectl apply -f anf-iis-deploy-pod.yaml
Выходные данные команды будут выглядеть примерно так:
pod/iis-pod created
Убедитесь, что модуль pod запущен и подключен через SMB с
/inetpub/wwwroot
помощьюkubectl describe
команды:kubectl describe pod iis-pod
Выходные данные команды будут выглядеть примерно так:
Name: iis-pod Namespace: default Priority: 0 Node: akswin000001/10.225.5.246 Start Time: Fri, 05 May 2023 15:16:36 -0400 Labels: app=web Annotations: <none> Status: Running IP: 10.225.5.252 IPs: IP: 10.225.5.252 Containers: web: Container ID: containerd://1e4959f2b49e7ad842b0ec774488a6142ac9152ca380c7ba4d814ae739d5ed3e Image: mcr.microsoft.com/windows/servercore/iis:windowsservercore Image ID: mcr.microsoft.com/windows/servercore/iis@sha256:0f0114d0f6c6ee569e1494953efdecb76465998df5eba951dc760ac5812c7409 Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 05 May 2023 15:16:44 -0400 Ready: True Restart Count: 0 Limits: cpu: 1 memory: 800M Requests: cpu: 1 memory: 800M Environment: <none> Mounts: /inetpub/wwwroot from smb (rw) /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-zznzs (ro)
Убедитесь, что том подключен к модулем pod с помощью kubectl exec для подключения к pod. Затем используйте
dir
команду в правильном каталоге, чтобы проверить, подключен ли том и размер соответствует размеру подготовленного тома.kubectl exec -it iis-pod –- cmd.exe
Выходные данные команды будут выглядеть примерно так:
Microsoft Windows [Version 10.0.20348.1668] (c) Microsoft Corporation. All rights reserved. C:\>cd /inetpub/wwwroot C:\inetpub\wwwroot>dir Volume in drive C has no label. Volume Serial Number is 86BB-AA55 Directory of C:\inetpub\wwwroot 05/05/2023 01:38 AM <DIR> . 05/05/2023 01:38 AM <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 107,373,862,912 bytes free C:\inetpub\wwwroot>exit
Следующие шаги
Astra Trident поддерживает множество функций в Azure NetApp Files. Дополнительные сведения см. в разделе:
Azure Kubernetes Service