首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将不同的吊舱安装到本地持久卷的同一部分?

是否可以将不同的吊舱安装到本地持久卷的同一部分?
EN

Stack Overflow用户
提问于 2018-10-23 11:40:21
回答 1查看 1.9K关注 0票数 5

基本上,我正在创建一个带有2个荚(单个主机集群)的StatefulSet部署,我希望每个荚都能够安装到主机中的一个基本文件夹,并安装到它下面的一个子文件夹:

基本文件夹挂载:/mnt/disk/ssd

Pod#1 -/mnt/disk/ssd/po-1

Pod#2 -/mnt/disk/ssd/po-2

我只成功地将第一个荚挂载到基本文件夹,但第二个文件夹无法挂载(因为卷已经取下)

这是一卷:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-local-pv
spec:
  capacity:
    storage: 5Gi 
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /mnt/disks/ssd
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntukuber

这是有状态集中的用法:

代码语言:javascript
复制
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: app
  namespace: test-ns
spec:
  serviceName: app
  replicas: 2
....
....
        volumeMounts:
          - name: data
            mountPath: /var/lib/app/data
volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: "local-storage"
        resources:
          requests:
            storage: 2Gi

因此,我基本上希望每个副本都使用自己的子文件夹--如何实现?

==编辑==

我已经取得了一些进展,我可以使用以下的YAML将几个副本挂载到同一个挂载中(我试图在这个应用程序上完成的是rabbitmq --所以我将把应用程序的名称保留为原名)

代码语言:javascript
复制
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-local
  namespace: test-rabbitmq
  labels:
    type: local
spec:
  storageClassName: local
  capacity:
    storage: 6Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/disks"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: hostpath-pvc
  namespace: test-rabbitmq
spec:
  storageClassName: local
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
  selector:
    matchLabels:
      type: local
---

在StatefulSet中,我声明了这个卷:

代码语言:javascript
复制
  volumes:
    - name: rabbitmq-data
      persistentVolumeClaim:
        claimName: hostpath-pvc

并安装“狂犬病-数据”。

这两个荚安装到同一个文件夹,但不会创建子文件夹-这不是可怕的情况,因为默认有rabbitmq的子文件夹-我将尝试把它扩展到每个荚使用一个子文件夹

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 15:15:52

我能够实现上述方案,您需要的是"claimRef“在您的pv绑定您的PVC。请看下面的pv和状态集json

PV-0.json

代码语言:javascript
复制
{
  "kind": "PersistentVolume",
  "apiVersion": "v1",
  "metadata": {
    "name": "pv-data-vol-0",
    "labels": {
      "type": "local"
    }
  },
  "spec": {
    "capacity": {
      "storage": "10Gi"
    },
    "accessModes": [
      "ReadWriteOnce"
    ],
    "storageClassName": "local-storage",
    "local": {
      "path": "/prafull/data/pv-0"
    },
    "claimRef": {
      "namespace": "default",
      "name": "data-test-sf-0"
    },
    "nodeAffinity": {
      "required": {
        "nodeSelectorTerms": [
          {
            "matchExpressions": [
              {
                "key": "kubernetes.io/hostname",
                "operator": "In",
                "values": [
                  "ip-10-0-1-46.ec2.internal"
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

PV-1.json

代码语言:javascript
复制
{
  "kind": "PersistentVolume",
  "apiVersion": "v1",
  "metadata": {
    "name": "pv-data-vol-1",
    "labels": {
      "type": "local"
    }
  },
  "spec": {
    "capacity": {
      "storage": "10Gi"
    },
    "accessModes": [
      "ReadWriteOnce"
    ],
    "storageClassName": "local-storage",
    "local": {
      "path": "/prafull/data/pv-1"
    },
    "claimRef": {
      "namespace": "default",
      "name": "data-test-sf-1"
    },
    "nodeAffinity": {
      "required": {
        "nodeSelectorTerms": [
          {
            "matchExpressions": [
              {
                "key": "kubernetes.io/hostname",
                "operator": "In",
                "values": [
                  "ip-10-0-1-46.ec2.internal"
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

Statefulset.json

代码语言:javascript
复制
{
  "kind": "StatefulSet",
  "apiVersion": "apps/v1beta1",
  "metadata": {
    "name": "test-sf",
    "labels": {
      "state": "test-sf"
    }
  },
  "spec": {
    "replicas": 2,
    "template": {
      "metadata": {
        "labels": {
          "app": "test-sf"
        },
        "annotations": {
          "pod.alpha.kubernetes.io/initialized": "true"
        }
      }
      ...
      ...
    },
    "volumeClaimTemplates": [
      {
        "metadata": {
          "name": "data"
        },
        "spec": {
          "accessModes": [
            "ReadWriteOnce"
          ],
          "storageClassName": "local-storage",
          "resources": {
            "requests": {
              "storage": "10Gi"
            }
          }
        }
      }
    ]
  }
}

将有两个被创建的测试舱-SF-0和test-sf-1,它们将被创建两个PVC数据-测试-sf-0和数据测试-sf-1,分别绑定到PV-0和Pv-1。因此,test-sf-0将写入PV-0中指定的位置,test-sf-1将写入在PV-1上指定的位置。希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52948124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档