Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure NetApp Files поддерживает тома с помощью NFS (NFSv3 или NFSv4.1), SMB и двойного протокола(NFSv3 и SMB, или NFSv4.1 и SMB).
- В этой статье изложены детали предоставления томов SMB статически или динамически.
- Сведения о статическом или динамическом предоставлении томов NFS см. в статье «Предоставление томов NFS Azure NetApp Files для Службы Kubernetes Azure».
- Сведения о подготовке томов с двумя протоколами статически см. в статье "Подготовка томов двух протоколов Azure NetApp Files для Служба Azure Kubernetes
Статическая настройка для приложений, использующих тома SMB
В этом разделе описывается, как создать том SMB в Azure NetApp Files и предоставить том статически kubernetes для использования контейнерного приложения.
Создание тома SMB
Определите переменные для последующего использования. Замените myresourcegroup, mylocation, myaccountname, mypool1, premium, myfilepath, myvolsize, myvolname и 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
Для создания Kubernetes SMB PersistentVolume необходимо установить драйвер Контейнерного Системного Интерфейса (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запущен, и на каждом рабочем узле запущен модуль с помощью команды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из предыдущего шага. Не забудьте включить секрет учетных данных Active Directory вместе с пространством имен, в котором находится секрет, созданный на предыдущем шаге.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 describe:
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Убедитесь, что под находится в состоянии Running и
/inetpub/wwwrootмонтирован из SMB, используя команду 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 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
В этом разделе описывается, как использовать Trident для динамического создания тома SMB в Azure NetApp Files и автоматического подключения его к контейнеризованному приложению windows.
Установка Trident
Для динамического выделения томов SMB необходимо установить Trident версии 22.10 или новее. Для динамической подготовки томов SMB требуются рабочие узлы Windows.
Trident — это динамический провизионер хранилища от NetApp, созданный специально для Kubernetes. Упростите использование хранилища для приложений Kubernetes с помощью стандартного драйвера интерфейса хранилища контейнеров (CSI) Trident. Trident развертывается в кластерах Kubernetes в виде pod'ов и предоставляет службы динамической оркестрации хранилища для рабочих нагрузок Kubernetes.
Trident можно установить с помощью оператора Trident (вручную или с помощью Helm) или tridentctl. Дополнительные сведения об этих методах установки и их работе см. в руководстве по установке.
Установка Trident с помощью Helm
Helm необходимо установить на рабочей станции, чтобы установить Trident с помощью этого метода. Другие методы установки Trident см. в руководстве по установке Trident. Если в вашем кластере есть рабочие узлы Windows, убедитесь, что Windows включена при использовании любого метода установки.
Чтобы установить 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Чтобы подтвердить успешное установку 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
Создание серверной части
Серверная часть должна быть создана, чтобы указать Trident о подписке Azure NetApp Files и где она должна создавать тома. Дополнительные сведения о серверных службах см. в разделе "Параметры конфигурации серверной части Azure NetApp Files" и примеры.
Создайте файл
backend-secret-smb.yamlи скопируйте в него следующий код YAML. Измените иClient IDизмените правильныеclientSecretзначения для вашей среды.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, , иclientSecretsubscriptionIDtenantIDlocationserviceLevelна правильные значения для вашей среды. ИдентификаторыtenantID,clientIDиclientSecretможно найти в регистрации приложения в Microsoft Entra ID с достаточными разрешениями для службы 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 createdkubectl 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) — это заявка на место хранения со стороны пользователя. После создания утверждения постоянного тома 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Чтобы просмотреть постоянный том, созданный 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 для Internet Information Services (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
Следующие шаги
Trident поддерживает множество функций в Azure NetApp Files. Дополнительные сведения см. в разделе:
Azure Kubernetes Service