谷歌云平台(GCP):安装多个卷kubernetes

时间:2019-09-20 06:51:12

标签: kubernetes google-cloud-platform

我正在通过Google云平台(GCP)kubernetes引擎设置容器。我需要以这种方式创建容器来挂载多个卷。这些数量必须是持久的,因此我采用了NFS方法。我有一个正在运行NFS服务的VM,它会导出几个目录。

我在下面提供yaml示例文件。

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myapp-branch
  labels:
    component: myapp-branch
spec:
  template:
    metadata:
      labels:
        component: myapp-branch
    spec:
      imagePullSecrets:
       - name: myprivatekey
      containers:
        - name: myapp-branch
          image: mydockerrepo/myapp/webapp:6.6
          command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 100 ; done"]
          env:
          - name: myapp_UID
            value: "1011"
          - name: myapp_GID
            value: "1011"
          - name: myapp_USER 
            value: "myapp_branch"
          - name: myapp_XMS_G
            value: "1"
          - name: myapp_XMX_G
            value: "6"
          volumeMounts:
          - mountPath: /mypath1/path1
            name: pvstorestorage
          - mountPath: /mypath2/path2
            name: mykeys
      volumes:
      - name: pvstorestorage
        persistentVolumeClaim:
          claimName: standalone
      - name: mykeys
        persistentVolumeClaim:
          claimName: conf

PVAndPVC.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: standalone
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: standalone
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: conf
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path2"

---    

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: conf
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi

应用它们后,我看到容器的两个卷挂载(/ mypath1 / path1和/ mypath2 / path2)都被挂载到nfs的相同挂载点(/ exports / path2,第二个)。这是在persistentVolumeClaim中发生的,我尝试了EmptyDir,它的工作正常。 如果有人尝试过这种方法并且知道解决方案,那将真的很有帮助。

1 个答案:

答案 0 :(得分:1)

您必须在PVC(PersistentVolumeClaim)定义中添加一条规则,以使其与各自正确的PV(PersistentVolume)相匹配。

具有相同的名称是不够的。

将PV和PVC的定义更改为(未测试):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: standalone
  labels:
    type: standalone
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path1"
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: conf
  labels:
    type: conf
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.2.1.6
    path: "/exports/path2"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: standalone
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      type: standalone
---    

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: conf
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      type: conf

(通常,我在PV中添加了meta.labels.type,在PVC中添加了spec.selector.matchLabels)

另外,使用kubectl get pvkubectl get pvc来查看其工作原理并简化调试过程