使用Kubernetes装载多个卷:一个有用一个没用

csga3l58  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(3)|浏览(120)

我试图创建一个Kubernetes pod,其中包含一个容器,该容器上安装了两个外部卷。我的.yml pod文件是:

apiVersion: v1
kind: Pod
metadata:
  name: my-project
  labels:
    name: my-project
spec:
  containers:
    - image: my-username/my-project
      name: my-project
      ports:
        - containerPort: 80
          name: nginx-http
        - containerPort: 443
          name: nginx-ssl-https
      imagePullPolicy: Always
      volumeMounts:
        - mountPath: /home/projects/my-project/media/upload
          name: pd-data
        - mountPath: /home/projects/my-project/backups
          name: pd2-data
  imagePullSecrets:
    - name: vpregistrykey
  volumes:
    - name: pd-data
      persistentVolumeClaim:
        claimName: pd-claim
    - name: pd2-data
      persistentVolumeClaim:
        claimName: pd2-claim

我正在使用Persistent Volumes和Persisten Volume Claims,如下所示:PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pd-disk
  labels:
    name: pd-disk
spec:
  capacity:
    storage: 250Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: "pd-disk"
    fsType: "ext4"

PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pd-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 250Gi

我最初使用以下命令创建了磁盘:$ gcloud compute disks create --size 250GB pd-disk第二个磁盘和第二个PV和PVC也是如此。当我创建pod时,一切似乎都正常,没有抛出错误。奇怪的部分来了其中一个路径正在正确安装(因此是持久的),另一个正在被擦除,每次我重新启动吊舱...
我试过从头开始重建一切,但没有任何改变。此外,从pod描述中可以看出,两个卷似乎都已正确挂载:

$ kubectl describe pod my-project
Name:       my-project
...
Volumes:
  pd-data:
    Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pd-claim
    ReadOnly: false
  pd2-data:
    Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  pd2-claim
    ReadOnly: false

任何帮助都很感激。谢谢

iyr7buue

iyr7buue1#

Kubernetes documentation声明:
卷不能挂载到其他卷上,也不能与其他卷有硬链接
我也遇到了同样的问题,在我的情况下,问题是两个卷的挂载都有重叠的挂载路径,即。都以/var/开头。
他们安装后没有问题修复。

vohkndzv

vohkndzv2#

我没有看到任何直接的问题,这种行为如上所述已经发生!但是我更希望您尝试使用“Deployment”而不是许多here建议的“Pod”,特别是在使用PV和PVC时。部署需要处理许多事情来维护“期望状态”。我已经附上了我的代码下面为您的参考工作,这两个卷是持久的,即使在删除/终止/重新启动,因为这是由部署的所需状态管理.
你会发现我的代码和你的代码有两个不同之处:
1.我有一个部署对象而不是pod
1.我正在使用GlusterFs作为我的音量。
部署yml.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
  namespace: platform
  labels:
    component: nginx
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        component: nginx
    spec:
      nodeSelector:
        role: app-1
      containers:
        - name: nginx
          image: vip-intOAM:5001/nginx:1.15.3
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - mountPath: "/etc/nginx/conf.d/"
            name: nginx-confd
          - mountPath: "/var/www/"
            name: nginx-web-content
      volumes:
      - name: nginx-confd
        persistentVolumeClaim:
          claimName: glusterfsvol-nginx-confd-pvc
      - name: nginx-web-content
        persistentVolumeClaim:
          claimName: glusterfsvol-nginx-web-content-pvc

我的PV之一

apiVersion: v1
kind: PersistentVolume
metadata:
  name: glusterfsvol-nginx-confd-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  glusterfs:
    endpoints: gluster-cluster
    path: nginx-confd
    readOnly: false
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    name: glusterfsvol-nginx-confd-pvc
    namespace: platform

PVC用于上述

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: glusterfsvol-nginx-confd-pvc
  namespace: platform
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
3npbholx

3npbholx3#

一个可能的原因是两个PV中的volumeHandle相同,这将导致无法将两个PV安装到同一个pod中。

相关问题