一个带有共享 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 的内容 ✅

相关推荐
cyforkk1 小时前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
程序员爱钓鱼2 小时前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
桦说编程2 小时前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik2 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
老青蛙4 小时前
权限系统设计-用户设计
后端
echoyu.5 小时前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
yuluo_YX5 小时前
Go Style 代码风格规范
开发语言·后端·golang
David爱编程5 小时前
从 JVM 到内核:synchronized 与操作系统互斥量的深度联系
java·后端
彭于晏Yan5 小时前
SpringBoot优化树形结构数据查询
java·spring boot·后端