Kubernetes - "Mount Volume Failed" 尝试部署时
Kubernetes - "Mount Volume Failed" when trying to deploy
我部署了我的第一个容器,我得到了信息:
deployment.apps/frontarena-ads-deployment created
但后来我看到我的容器创建卡在等待状态。
然后我看到使用 kubectl describe pod frontarena-ads-deployment-5b475667dd-gzmlp
的日志并看到 MountVolume 错误,我无法弄清楚为什么会抛出它:
Warning FailedMount 9m24s kubelet MountVolume.SetUp
failed for volume "ads-filesharevolume" : mount failed: exit status 32 Mounting command:
systemd-run Mounting arguments: --description=Kubernetes transient
mount for
/var/lib/kubelet/pods/85aa3bfa-341a-4da1-b3de-fb1979420028/volumes/kubernetes.io~azure-file/ads-filesharevolume
--scope -- mount -t cifs -o username=frontarenastorage,password=mypassword,file_mode=0777,dir_mode=0777,vers=3.0
//frontarenastorage.file.core.windows.net/azurecontainershare
/var/lib/kubelet/pods/85aa3bfa-341a-4da1-b3de-fb1979420028/volumes/kubernetes.io~azure-file/ads-filesharevolume
Output: Running scope as unit
run-rf54d5b5f84854777956ae0e25810bb94.scope. mount error(115):
Operation now in progress Refer to the mount.cifs(8) manual page (e.g.
man mount.cifs)
在我 运行 部署之前,我使用已经创建的 azure 文件共享在 Azure 中创建了一个秘密,我在 YAML 中引用了它。
$AKS_PERS_STORAGE_ACCOUNT_NAME="frontarenastorage"
$STORAGE_KEY="mypassword"
kubectl create secret generic fa-fileshare-secret --from-literal=azurestorageaccountname=$AKS_PERS_STORAGE_ACCOUNT_NAME --from-literal=azurestorageaccountkey=$STORAGE_KEY
在该文件共享中,我有需要挂载的文件夹和文件,我在 YAML 中引用了 azurecontainershare:
我的 YAML 如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontarena-ads-deployment
labels:
app: frontarena-ads-deployment
spec:
replicas: 1
template:
metadata:
name: frontarena-ads-aks-test
labels:
app: frontarena-ads-aks-test
spec:
containers:
- name: frontarena-ads-aks-test
image: faselect-docker.dev/frontarena/ads:test1
imagePullPolicy: Always
ports:
- containerPort: 9000
volumeMounts:
- name: ads-filesharevolume
mountPath: /opt/front/arena/host
volumes:
- name: ads-filesharevolume
azureFile:
secretName: fa-fileshare-secret
shareName: azurecontainershare
readOnly: false
imagePullSecrets:
- name: fa-repo-secret
selector:
matchLabels:
app: frontarena-ads-aks-test
问题是因为部署了 AKS 群集和 Azure 文件共享的不同 Azure 区域。如果他们在同一个地区,你就不会遇到这个问题。
我部署了我的第一个容器,我得到了信息:
deployment.apps/frontarena-ads-deployment created
但后来我看到我的容器创建卡在等待状态。
然后我看到使用 kubectl describe pod frontarena-ads-deployment-5b475667dd-gzmlp
的日志并看到 MountVolume 错误,我无法弄清楚为什么会抛出它:
Warning FailedMount 9m24s kubelet MountVolume.SetUp failed for volume "ads-filesharevolume" : mount failed: exit status 32 Mounting command: systemd-run Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/85aa3bfa-341a-4da1-b3de-fb1979420028/volumes/kubernetes.io~azure-file/ads-filesharevolume --scope -- mount -t cifs -o username=frontarenastorage,password=mypassword,file_mode=0777,dir_mode=0777,vers=3.0 //frontarenastorage.file.core.windows.net/azurecontainershare /var/lib/kubelet/pods/85aa3bfa-341a-4da1-b3de-fb1979420028/volumes/kubernetes.io~azure-file/ads-filesharevolume Output: Running scope as unit run-rf54d5b5f84854777956ae0e25810bb94.scope. mount error(115): Operation now in progress Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
在我 运行 部署之前,我使用已经创建的 azure 文件共享在 Azure 中创建了一个秘密,我在 YAML 中引用了它。
$AKS_PERS_STORAGE_ACCOUNT_NAME="frontarenastorage"
$STORAGE_KEY="mypassword"
kubectl create secret generic fa-fileshare-secret --from-literal=azurestorageaccountname=$AKS_PERS_STORAGE_ACCOUNT_NAME --from-literal=azurestorageaccountkey=$STORAGE_KEY
在该文件共享中,我有需要挂载的文件夹和文件,我在 YAML 中引用了 azurecontainershare:
我的 YAML 如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontarena-ads-deployment
labels:
app: frontarena-ads-deployment
spec:
replicas: 1
template:
metadata:
name: frontarena-ads-aks-test
labels:
app: frontarena-ads-aks-test
spec:
containers:
- name: frontarena-ads-aks-test
image: faselect-docker.dev/frontarena/ads:test1
imagePullPolicy: Always
ports:
- containerPort: 9000
volumeMounts:
- name: ads-filesharevolume
mountPath: /opt/front/arena/host
volumes:
- name: ads-filesharevolume
azureFile:
secretName: fa-fileshare-secret
shareName: azurecontainershare
readOnly: false
imagePullSecrets:
- name: fa-repo-secret
selector:
matchLabels:
app: frontarena-ads-aks-test
问题是因为部署了 AKS 群集和 Azure 文件共享的不同 Azure 区域。如果他们在同一个地区,你就不会遇到这个问题。