用 Deployment 自动部署一个带有共享 Azure Disk 的 Pod ,并启用 StorageClass 动态创建 Azure Disk。
🧱 场景说明
你将得到:
- ✅ 一个
StorageClass
(动态创建 Azure Disk) - ✅ 一个
PersistentVolumeClaim
(申请磁盘) - ✅ 一个
Deployment
,包含一个 Pod,里面有两个容器,共享挂载 Azure Disk
✅ 第一步:创建 StorageClass
(自动创建 Azure Disk)
yaml
yaml
CopyEdit
# storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-csi
provisioner: disk.csi.azure.com
parameters:
skuName: Standard_LRS # 可选值:StandardSSD_LRS / Premium_LRS 等
kind: managed
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
💡 说明:
provisioner
是 Azure CSI 驱动(AKS 现在推荐用 CSI)volumeBindingMode: WaitForFirstConsumer
确保磁盘只会在 Pod 确定调度节点后才绑定- 这个 StorageClass 是动态创建 Azure Disk 的关键
✅ 第二步:创建 PVC(自动触发创建 Azure Disk)
yaml
yaml
CopyEdit
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-disk-pvc
spec:
accessModes:
- ReadWriteOnce # 只允许一个节点挂载,但 Pod 内多个容器没问题
storageClassName: managed-csi
resources:
requests:
storage: 5Gi
✅ 第三步:创建 Deployment(两个容器共享挂载 Azure Disk)
yaml
yaml
CopyEdit
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-disk-demo
spec:
replicas: 1
selector:
matchLabels:
app: azure-disk-demo
template:
metadata:
labels:
app: azure-disk-demo
spec:
containers:
- name: writer
image: busybox
command: ["sh", "-c", "echo written-by-writer > /mnt/data/data.txt; sleep 3600"]
volumeMounts:
- name: azure-disk
mountPath: /mnt/data
- name: reader
image: busybox
command: ["sh", "-c", "cat /mnt/data/data.txt; sleep 3600"]
volumeMounts:
- name: azure-disk
mountPath: /mnt/data
volumes:
- name: azure-disk
persistentVolumeClaim:
claimName: azure-disk-pvc
✅ 使用方法
bash
CopyEdit
kubectl apply -f storageclass.yaml
kubectl apply -f pvc.yaml
kubectl apply -f deployment.yaml
然后执行:
bash
bash
CopyEdit
kubectl get pod
kubectl exec -it <pod-name> -c reader -- cat /mnt/data/data.txt
你会看到 written-by-writer
,说明两个容器确实共享了 Azure Disk 的内容 ✅