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

相关推荐
Coder_Boy_4 分钟前
Spring Boot 事务回滚异常 UnexpectedRollbackException 详解(常见问题集合)
java·spring boot·后端
风象南6 分钟前
SpringBoot 实现网络限速
后端
源代码•宸11 分钟前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker
计算机学姐14 分钟前
基于SpringBoot的汽车租赁系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·spring·汽车·推荐算法
好好研究18 分钟前
SpringBoot小案例打包执行流程
java·spring boot·后端
BingoGo19 分钟前
免费可商用商业级管理后台 CatchAdmin V5 正式发布 插件化与开发效率的全面提升
vue.js·后端·php
IT_陈寒30 分钟前
SpringBoot 3.0实战:这5个新特性让你的开发效率提升50%
前端·人工智能·后端
ling-4531 分钟前
ssm-day07 springboot3、Mybatis-Plus、springboot实战
java·spring boot·后端
a程序小傲39 分钟前
得物Java面试被问:边缘计算的数据同步和计算卸载
java·开发语言·数据库·后端·面试·golang·边缘计算
w***76551 小时前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis