当前位置: 首页 > 知识库问答 >
问题:

Kubernetes AKS持久卷磁盘对多个节点的声明

乐正远航
2023-03-14

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

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

动态附加卷的原因是为了增加每个Docker容器执行其任务所需的可用IOPS和可用存储量。

我已经按照文档创建了一个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”的多附加错误,卷已由pod(多个)PV使用-部署-67FD8B7B95-FJN2N

持久卷声明

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

这是我的部署:

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文件,并明确每个部署使用特定的卷声明

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

共有1个答案

轩辕涵亮
2023-03-14

您应该使用StateFulSetVolumeClaimTemplates配置,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 4
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: k8s.gcr.io/nginx-slim:0.8
          ports:
           - containerPort: 80
          volumeMounts:
            - name: persistent-storage
              mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: hdd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: hdd
provisioner: kubernetes.io/azure-disk
parameters:
  skuname: Standard_LRS
  kind: managed
  cachingMode: ReadOnly

您将获得每个节点的持久卷:

Kubectl获取PV

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM                              STORAGECLASS   REASON
  AGE
pvc-0e651011-7647-11e9-bbf5-c6ab19063099   2Gi        RWO            Delete           Bound     default/persistent-storage-web-0   hdd
  51m
pvc-17181607-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            Delete           Bound     default/persistent-storage-web-1   hdd
  49m
pvc-4d488893-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            Delete           Bound     default/persistent-storage-web-2   hdd
  48m
pvc-6aff2a4d-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            Delete           Bound     default/persistent-storage-web-3   hdd
  47m
NAME                       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistent-storage-web-0   Bound     pvc-0e651011-7647-11e9-bbf5-c6ab19063099   2Gi        RWO            hdd            55m
persistent-storage-web-1   Bound     pvc-17181607-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            hdd            48m
persistent-storage-web-2   Bound     pvc-4d488893-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            hdd            46m
persistent-storage-web-3   Bound     pvc-6aff2a4d-7648-11e9-bbf5-c6ab19063099   2Gi        RWO            hdd            45m
 类似资料:
  • 我找到的最接近的答案是这样的。 但我想知道的是,Dockerfile卷命令会被Kubernetes完全忽略吗?或者数据将被持久化到两个地方?一个用于docker卷(在主机中哪个豆荚运行),另一个是Kubernetes的PV? 之所以这样问,是因为我从docker hub部署了一些容器,其中包含VOLUME命令。同时,我也把PVC贴在我的豆荚上。我在考虑是否会在节点中创建本地卷(docker卷,而不

  • 我使用Grafana(v2.1.3)进行指标可视化。指标来自Graphite收集的Collectd。目标图是以百分比显示多个节点的空闲磁盘空间,例如,让文件夹 /data,所以以字节表示空闲空间的度量是: 表示总空间的度量是以下各项的总和: 因此,我有以下配置: 这里的$节点是从下拉列表(All,node1,node2,node3等)中选择的变量。当选择一个特定的节点时,它会按预期工作,但选择了错

  • 给定一个点集S,要求用2个固定半径r的圆复盖最大数目的点。通过考虑距离小于2r的每对点,可以计算出一个圆盘所能覆盖的最大点数。通过一对点可以构造2个圆。从所有这样的组合中,选择覆盖最大点的圆和覆盖第二最大点的圆。但它会给出最优答案吗,还是这种方法要做一些改变呢?

  • 谢谢 ----更新----

  • 本文向大家介绍一篇文章揭秘Redis的磁盘持久化机制,包括了一篇文章揭秘Redis的磁盘持久化机制的使用技巧和注意事项,需要的朋友参考一下 前言 Redis 是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将 Redis 中的数据以数据或命令的形式从内存保存到本地磁盘。当下次 Redis 重启时,利用持久化文件进行数据恢复。Redis 提供了 RDB 和 AOF 两

  • 问题内容: 我目前在我的Java应用程序中使用memcached,总体而言,它运行良好。 对我而言最重要的memcached功能包括: 它的速度很快,因为读写是在内存中,并且不会接触磁盘 这只是一个键/值存储(因为这就是我所有的应用程序需求) 它是分布式的 通过使每个对象恰好位于一台服务器上,它有效地使用了内存 它不假定对象来自数据库(因为我的对象不是数据库对象) 但是,有一件我想做的事情是mem