首页 文章

Kubernetes AKS持久卷磁盘声称多个节点

提问于
浏览
1

How can I attach 100GB Persistent Volume Disk to Each Node in the AKS Kubernetes Cluster?

我们使用AKS在Azure上使用Kubernetes .

我们有一个场景,我们需要将持久卷附加到AKS群集中的每个节点 . 我们在群集中的每个节点上运行1个Docker容器 .

动态附加卷的原因是增加每个Docker容器完成其工作所需的可用IOPS和可用存储量 .

在每个Docker容器内运行的程序可以处理非常大的输入数据文件(10GB),并写出更大的输出文件(50GB) .

我们可以挂载Azure文件共享,但Azure FileShares限制为60MB / ps,这对于我们来说移动这么多原始数据来说太慢了 . 一旦在Docker镜像中运行的程序完成,它将把输出文件(50GB)移动到Blob存储 . 所有容器的所有输出文件总数可能超过1TB .

我想如果我们可以将持久卷附加到每个节点,我们可以增加可用磁盘空间和IOPS,而无需转到高vCPU / RAM VM配置(即DS14_v2) . 我们的程序对CPU的I / O密集程度更高 .

在Pod中运行的所有Docker镜像都是完全相同的,它们从队列中读取消息,告诉它要使用的特定输入文件 .

我按照文档创建了一个StorageClass,持久卷声明和持久卷,并针对1 POD运行 . https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv

但是,当我创建部署并将Pod的数量从1增加到2时,我收到错误(在 生产环境 中,我们会根据需要扩展到尽可能多的节点~100)

卷的多重附加错误“pvc-784496e4-869d-11e8-8984-0a58ac1f1e06”已经使用了卷pv-deployment-67fd8b7b95-fjn2n

我意识到Azure磁盘只能连接到SingleNode(ReadWriteOnce)但是我不确定如何创建多个磁盘并在我们加载Kubernetes集群并开始工作时将它们附加到每个节点 .

Persistent Volume Claim:

apiVersion: v1
kind: PersistentVolumeClaim
    metadata:
    name: azure-managed-disk
spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: managed-premium
    resources:
    requests:
    storage: 100Gi

This is my Deployment:

apiVersion: apps/v1
kind: Deployment
    metadata:
    name: pv-deployment
    labels:
    app: nginx
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
        app: nginx
    spec:
      containers:
        - name: myfrontend
        image: nginx
        volumeMounts:
        - name: volume
        mountPath: /mnt/azure
        resources: 
          limits:
            cpu: ".7"
            memory: "2.5G"
          requests:
            cpu: ".7"
            memory: "2.5G"      
         volumes:
         - name: volume
         persistentVolumeClaim:
          claimName: azure-managed-disk

如果我知道我将扩展到100个节点,我是否必须创建一个包含100个部署的.yaml文件,并明确让每个部署使用特定的卷声明?

例如,在我的卷索赔中,我有azure-claim-01,azure-claim-02等等 . 在每个部署中,我必须对每个命名的卷索赔提出索赔 .

volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-claim-01

我无法理解如何动态完成所有这些操作?

你能推荐一种更好的方法来达到预期的效果吗?

1 回答

  • 0

    我会考虑使用DaemonSet . 这将允许您的pod仅在每个节点上运行,因此ReadWriteOnce将生效 . 约束条件是,您无法扩展应用程序的数量超过您拥有的节点数量 .

相关问题