一个带有共享 Azure Disk 的 Pod

用 Deployment 自动部署一个带有共享 Azure Disk 的 Pod ,并启用 StorageClass 动态创建 Azure Disk。


🧱 场景说明

你将得到:

  1. ✅ 一个 StorageClass(动态创建 Azure Disk)
  2. ✅ 一个 PersistentVolumeClaim(申请磁盘)
  3. ✅ 一个 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 的内容 ✅

相关推荐
旋律41421 分钟前
同义方法区别(增加类与删除类)
java·后端
调试人生的显微镜21 分钟前
跨平台抓包工具怎么选?TraceEagle抓包鹰 的四种跨平台能力
后端·ios
用户77712985091223 分钟前
常见的同义方法的区别:增加类和删除类
java·后端
房西杭27 分钟前
行会仓库 GuildStoreMgr(Lua,和 StoreMgr / BagMgr 容器接口对齐)
后端
站大爷IP30 分钟前
Python的文本IO把我坑惨了,原来read和readlines的区别这么大
后端
没事写点啥31 分钟前
WeKnora 上下文管理
后端·ai编程
爱勇宝32 分钟前
AI 都这么强了,咱们程序员以后还能干点啥?
前端·后端·程序员
用户2441598137635 分钟前
《深入理解C语言》系列 · 第05篇:内存与程序运行机制
后端
嘿嘿嘿91536 分钟前
从跟课到脱稿重写:一个文字格斗游戏里踩过的 9 个坑
后端
旋律41437 分钟前
List、Set、Map:三个装数据的容器,到底啥区别?怎么遍历?
java·后端