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

相关推荐
番茄Salad16 分钟前
Spring Boot项目中Maven引入依赖常见报错问题解决
spring boot·后端·maven
CryptoRzz1 小时前
越南k线历史数据、IPO新股股票数据接口文档
java·数据库·后端·python·区块链
QX_hao1 小时前
【Go】--数组和切片
后端·golang·restful
-睡到自然醒~1 小时前
提升应用性能:Go中的同步与异步处理
开发语言·后端·golang
文心快码BaiduComate1 小时前
新手该如何选择AI编程工具?文心快码Comate全方位体验
前端·后端·程序员
阿挥的编程日记2 小时前
基于SpringBoot的影评管理系统
java·spring boot·后端
java坤坤2 小时前
Spring Boot 集成 SpringDoc OpenAPI(Swagger)实战:从配置到接口文档落地
java·spring boot·后端
ChineHe2 小时前
Golang并发编程篇001_并发编程相关概念解释
开发语言·后端·golang
自由的疯2 小时前
java 怎么判断事务有无提交成功
java·后端·架构
bcbnb3 小时前
Socket 抓包工具与实战,从抓取到定位(Socket 的命令、分析)
后端