如何向Kubernetes集群上传文件供应用访问(Azure CLI环境)
首先直接给你明确两个核心点:是的,你必须创建Kubernetes集群可访问的持久化存储,因为Pod本身的存储是临时的(重启或重建就会丢失数据),而且要让Pod能读取到你本地虚拟机的文件,必须先把文件同步到集群能挂载的共享存储里。结合Azure环境,咱用Azure Files来实现最方便(支持多Pod共享访问),下面一步步用Azure CLI和kubectl操作:
一、先在Azure侧创建可被K8s访问的持久化存储
Azure Files是Azure提供的SMB/NFS共享存储,K8s集群可以直接挂载,完美适配你的场景。
创建存储账户(如果还没有的话)
打开本地虚拟机的Azure CLI,执行:az storage account create \ --name your-storage-account \ --resource-group your-resource-group \ --location eastus \ --sku Standard_LRS \ --kind StorageV2把
your-storage-account、your-resource-group和location换成你自己的资源信息。创建文件共享
先获取存储账户的密钥,再创建共享目录:# 获取存储账户密钥 STORAGE_KEY=$(az storage account keys list --resource-group your-resource-group --account-name your-storage-account --query "[0].value" -o tsv) # 创建文件共享 az storage share create \ --name app-files-share \ --account-name your-storage-account \ --account-key $STORAGE_KEYapp-files-share是你自定义的共享名称,随便取就行。把本地虚拟机的文件上传到Azure Files共享
还是在本地VM的Azure CLI里,直接上传文件或整个目录:# 上传单个文件(比如你的Jar包依赖文件) az storage file upload \ --share-name app-files-share \ --source /local/vm/path/your-target-file \ --account-name your-storage-account \ --account-key $STORAGE_KEY # 如果要传整个目录,用批量上传命令 az storage file upload-batch \ --source /local/vm/path/target-directory \ --destination app-files-share \ --account-name your-storage-account \ --account-key $STORAGE_KEY替换
/local/vm/path/...为你本地VM里的实际文件/目录路径。
二、在Kubernetes中配置Volume并挂载到Pod
接下来要把Azure Files的共享存储绑定到K8s的PVC,再挂载到你的应用Pod里。
创建K8s Secret存储Azure凭据
K8s需要存储账户的名称和密钥才能访问Azure Files,先创建一个Secret保存这些信息:kubectl create secret generic azure-files-secret \ --from-literal=azurestorageaccountname=your-storage-account \ --from-literal=azurestorageaccountkey=$STORAGE_KEY创建Persistent Volume Claim(PVC)
新建一个azure-files-pvc.yaml文件,内容如下:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-files-pvc spec: accessModes: - ReadWriteMany # 支持多个Pod同时读写这个存储 resources: requests: storage: 10Gi # 根据你的实际需求调整存储大小 storageClassName: azurefile # Azure K8s集群默认的Azure Files存储类执行命令创建PVC:
kubectl apply -f azure-files-pvc.yaml创建挂载了Volume的应用Pod
新建app-pod.yaml文件,配置你的镜像和Volume挂载路径:apiVersion: v1 kind: Pod metadata: name: your-app-pod spec: containers: - name: app-container image: your-image-repo/your-app-image:latest # 替换成你的镜像仓库地址 volumeMounts: - name: app-files-volume mountPath: /app/data # 替换成你的应用需要访问文件的容器内路径 volumes: - name: app-files-volume persistentVolumeClaim: claimName: app-files-pvc执行命令创建Pod:
kubectl apply -f app-pod.yaml
三、验证文件是否能被Pod正常访问
进入Pod内部检查文件是否存在:
kubectl exec -it your-app-pod -- ls /app/data
如果能看到你从本地VM上传的文件,就说明整个配置流程成功了。
内容的提问来源于stack exchange,提问作者Anil Kumar P

