通过 Kubernetes 在 Docker 容器中安装 Azure 文件存储
Mounting Azure File Storage in Docker container via Kubernetes
我正在尝试使用此处找到的方法将我的 Azure 文件存储装载到容器:https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/azure_file
创建 pod 时出现错误:"Output: mount error: could not resolve address for [encoded name of my file storage].file.core.windows.net: Unknown error"
我已确认我的文件存储资源和托管容器的 VM 位于同一 Azure 位置(美国东部)。我能够使用上述错误中的相同地址在托管 pod 的 VM 上手动安装此共享。是否有可能我的容器中遗漏了 Git Hub 教程中未解释的某种配置?
我已尝试在不指定卷的情况下创建我的容器,并且能够从容器内 ping 文件存储地址,因此我不确定无法解析地址错误的来源。
我无法重现您的错误,但我们可以按照这些步骤将 Azure 文件共享装载到 k8s 容器。
1.create k8s 通过 Azure 新门户。
2.SSH k8s master,创建secret
,通过k8s文件创建secret:
在这个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# cat azure-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: azure-secret
type: Opaque
data:
azurestorageaccountname: amFzb25zaGFyZTMyMQ==
azurestorageaccountkey: Qm5iaDBmanlrRCtiL0V2ZU5vUi9lbE9wMTE4KzB2bUxzYlFxVkdDM0gwVzIzbVNmYkg5V2ZWMUE2MFF3M0NBWjcwVG00V2dwc2UxTEV0Z1NKRjI3Y1E9PQ==
然后使用kubectl创建secret,像这样:
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.Create 广告连播:
创建 azure.yaml:
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创建完成,我们可以使用这个脚本来检查文件,像这样:
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.We 应该 base64 编码的 Azure 存储帐户和密钥。
2.write右文件共享名改为azure.yaml:
还有动态配置 azure 文件挂载功能,您可以在这里找到完整的示例:
https://github.com/andyzhangx/demo/tree/master/linux/azurefile
记得使用标志 -n
以避免回显尾随字符:
echo -n foobarbaz | base64
我正在尝试使用此处找到的方法将我的 Azure 文件存储装载到容器:https://github.com/kubernetes/kubernetes/tree/master/examples/volumes/azure_file
创建 pod 时出现错误:"Output: mount error: could not resolve address for [encoded name of my file storage].file.core.windows.net: Unknown error"
我已确认我的文件存储资源和托管容器的 VM 位于同一 Azure 位置(美国东部)。我能够使用上述错误中的相同地址在托管 pod 的 VM 上手动安装此共享。是否有可能我的容器中遗漏了 Git Hub 教程中未解释的某种配置?
我已尝试在不指定卷的情况下创建我的容器,并且能够从容器内 ping 文件存储地址,因此我不确定无法解析地址错误的来源。
我无法重现您的错误,但我们可以按照这些步骤将 Azure 文件共享装载到 k8s 容器。
1.create k8s 通过 Azure 新门户。
2.SSH k8s master,创建secret
,通过k8s文件创建secret:
在这个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# cat azure-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: azure-secret
type: Opaque
data:
azurestorageaccountname: amFzb25zaGFyZTMyMQ==
azurestorageaccountkey: Qm5iaDBmanlrRCtiL0V2ZU5vUi9lbE9wMTE4KzB2bUxzYlFxVkdDM0gwVzIzbVNmYkg5V2ZWMUE2MFF3M0NBWjcwVG00V2dwc2UxTEV0Z1NKRjI3Y1E9PQ==
然后使用kubectl创建secret,像这样:
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.Create 广告连播: 创建 azure.yaml:
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创建完成,我们可以使用这个脚本来检查文件,像这样:
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.We 应该 base64 编码的 Azure 存储帐户和密钥。
2.write右文件共享名改为azure.yaml:
还有动态配置 azure 文件挂载功能,您可以在这里找到完整的示例: https://github.com/andyzhangx/demo/tree/master/linux/azurefile
记得使用标志 -n
以避免回显尾随字符:
echo -n foobarbaz | base64