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