Подключение хранилища файлов Azure в контейнере Docker через Kubernetes
Я пытаюсь подключить хранилище файлов Azure к контейнеру, используя метод, описанный здесь: https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/azure_file
При создании РМО я получаю ошибку: "вывод: ошибка подключения: не удалось разрешить адрес [закодированное имя моего хранилища файлов].file.core.windows.net: неизвестная ошибка"
Я подтвердил, что мой ресурс хранения файлов и виртуальная машина, на которой размещен модуль, находятся в одном и том же расположении Azure (восток США). Я я могу смонтировать этот общий ресурс вручную на виртуальной машине, размещающей модуль, используя тот же адрес в ошибке выше. Возможно ли, что в моем контейнере отсутствует какая-то конфигурация, которая не описана в учебнике Git Hub?
Я попытался создать свой контейнер без указания Тома и смог пропинговать адрес для хранения файлов из контейнера, поэтому я не уверен, откуда исходит ошибка не удается разрешить адрес.
3 ответа:
Я не могу воспроизвести вашу ошибку, но мы можем выполнить эти шаги, чтобы подключить общий файловый ресурс Azure к контейнеру k8s.
1.создайте k8s через новый портал Azure.
2.SSH k8s master, createsecret
, create secret by k8s file:В этом файле yaml мы должны записать учетную запись хранения и ключ в нем, и мы должны base64 закодировать учетную запись хранения Azure и ключ, как это:
root@k8s-master-3CC6E803-0:~# echo -n jasonshare321 | base64 amFzb25zaGFyZTMyMQ== root@k8s-master-3CC6E803-0:~# echo -n Bnbh0fjykD+b/EveNoR/elOp118+0vmLsbQqVGC3H0W23mSfbH9WfV1A60Qw3CAZ70Tm4Wgpse1LEtgSJF27cQ== | base64 Qm5iaDBmanlrRCtiL0V2ZU5vUi9lbE9wMTE4KzB2bUxzYlFxVkdDM0gwVzIzbVNmYkg5V2ZWMUE2MFF3M0NBWjcwVG00V2dwc2UxTEV0Z1NKRjI3Y1E9PQ==
Затем создайте
azure-secret
:root@k8s-master-3CC6E803-0:~# mkdir /azure_file root@k8s-master-3CC6E803-0:~# cd /azure_file/ root@k8s-master-3CC6E803-0:/azure_file# touch azure-secret.yaml root@k8s-master-3CC6E803-0:/azure_file# vi azure-secret.yaml
Вот лазурь-секрет:
Root@k8s-master-3CC6E803-0:/azure_file # кот Лазурный-секрет.ямл
apiVersion: v1 kind: Secret metadata: name: azure-secret type: Opaque data: azurestorageaccountname: amFzb25zaGFyZTMyMQ== azurestorageaccountkey: Qm5iaDBmanlrRCtiL0V2ZU5vUi9lbE9wMTE4KzB2bUxzYlFxVkdDM0gwVzIzbVNmYkg5V2ZWMUE2MFF3M0NBWjcwVG00V2dwc2UxTEV0Z1NKRjI3Y1E9PQ==
Затем используйте kubectl для создания секрета, например:
root@k8s-master-3CC6E803-0:/azure_file# kubectl create -f /azure_file/azure-secret.yaml secret "azure-secret" created root@k8s-master-3CC6E803-0:/azure_file# kubectl get secret NAME TYPE DATA AGE azure-secret Opaque 2 11s default-token-07cd5 kubernetes.io/service-account-token 3 35m
3.Создать стручок: создайте azure.ямл:
root@k8s-master-3CC6E803-0:/azure_file# touch azure.yaml root@k8s-master-3CC6E803-0:/azure_file# vi azure.yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx name: nginx volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure azureFile: secretName: azure-secret shareName: testfileshare readOnly: false
Используйте этот файл для создания pod:
root@k8s-master-3CC6E803-0:/azure_file# kubectl create -f /azure_file/azure.yaml pod "nginx" created root@k8s-master-3CC6E803-0:/azure_file# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 17s
Теперь, когда pod create завершен, мы можем использовать этот скрипт для проверки файла, например:
root@k8s-master-3CC6E803-0:/azure_file# kubectl exec -it nginx bash root@nginx:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var root@nginx:/# cd /mnt root@nginx:/mnt# ls azure root@nginx:/mnt# cd azure root@nginx:/mnt/azure# ls root@nginx:/mnt/azure# df -Th Filesystem Type Size Used Avail Use% Mounted on overlay overlay 30G 3.3G 26G 12% / tmpfs tmpfs 1.7G 0 1.7G 0% /dev tmpfs tmpfs 1.7G 0 1.7G 0% /sys/fs/cgroup /dev/sda1 ext4 30G 3.3G 26G 12% /etc/hosts //jasonshare321.file.core.windows.net/testfileshare cifs 50G 0 50G 0% /mnt/azure shm tmpfs 64M 0 64M 0% /dev/shm tmpfs tmpfs 1.7G 12K 1.7G 1% /run/secrets/kubernetes.io/serviceaccount
Примечание :
1.Мы должныbase64 закодировать учетную запись хранения Azure и ключ.
2.пиши правильно имя общего файлового ресурса для azure.ямл:
Не забудьте использовать флаг
-n
, чтобы избежать повторения завершающих символов:echo -n foobarbaz | base64
Существует также функция динамической подготовки для подключения файлов azure, вы можете найти полные примеры здесь: https://github.com/andyzhangx/Demo/tree/master/linux/azuredfile