簡體   English   中英

minikube中的多個持久卷

[英]Multiple persistent volumes in minikube

我想根據一個持久性卷聲明將多個volumeMount附加到minikube中的部署。

我有一個部署了tomcat的應用程序,需要保留三個不同的文件夾(/ var / log / app,/ var / lib / app,/ etc / app)。 當容器啟動時,我應該在每個目錄中獲取文件,但是只會填充日志,並且應用程序將失敗。 知道我的Yaml是正確的還是以錯誤的方式進行處理?

K8s yaml:

apiVersion: v1

kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 6Gi
  hostPath:
    path: /data/pv-volume
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: manual
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  selector:
    matchLabels:
      app: app
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - image: app:latest
        name: app
        env:
        - name: JAVA_OPTS
          value: -Xms64M -Xmx512M
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "512Mi"
            cpu: "250m"
          limits:
            memory: "1024Mi"
            cpu: "500m"
        volumeMounts:
          - name: pv-storage1
            mountPath: /var/log/app
            subPath: log
          - name: pv-storage1
            mountPath: /var/lib/app
            subPath: lib
          - name: pv-storage1
            mountPath: /etc/app
            subPath: etc
        tty: true
      volumes:
      - name: pv-storage1
        persistentVolumeClaim:
          claimName: pv-claim
      restartPolicy: Always
status: {}

V2:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume-log
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /data/pv-volume/log
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-log
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume-lib
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /data/pv-volume/lib
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-lib
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume-etc
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /data/pv-volume/etc
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-etc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: manual
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: endpoint
  labels:
    app: endpoint
spec:
  selector:
    matchLabels:
      app: endpoint
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        app: endpoint
    spec:
      containers:
      - image: endpoint:latest
        name: endpoint
        env:
        - name: JAVA_OPTS
          value: -Xms64M -Xmx1024M
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "1024Mi"
            cpu: "250m"
          limits:
            memory: "2048Mi"
            cpu: "500m"
        volumeMounts:
          - name: pv-storage-log
            mountPath: /var/log
          - name: pv-storage-lib
            mountPath: /var/lib
          - name: pv-storage-etc
            mountPath: /etc
        tty: true
      volumes:
      - name: pv-storage-log
        persistentVolumeClaim:
          claimName: pv-claim-log
      - name: pv-storage-lib
        persistentVolumeClaim:
          claimName: pv-claim-lib
      - name: pv-storage-etc
        persistentVolumeClaim:
          claimName: pv-claim-etc
      restartPolicy: Always
status: {}

使用上面的配置,您嘗試將一個PV掛載到多個目錄,這意味着它們將與PV配置上的主機路徑攜帶相同的數據。

如果要使用具有不同內容的多個不同目錄,則需要為每個目錄創建PV和PVC,如下所示:

kind: PersistentVolume
metadata:
  name: pv-volume-log
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 6Gi
  hostPath:
    path: /data/pv-volume/log
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-log
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: manual

---
kind: PersistentVolume
metadata:
  name: pv-volume-lib
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 6Gi
  hostPath:
    path: /data/pv-volume/lib
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-lib
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: manual
---
kind: PersistentVolume
metadata:
  name: pv-volume-etc
spec:
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 6Gi
  hostPath:
    path: /data/pv-volume/etc
  storageClassName: manual
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-etc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: manual

然后在您的Deployment yaml中添加這些卷並將卷分別附加到mountPath:

...
      volumes:
      - name: pv-storage-log
        persistentVolumeClaim:
          claimName: pv-claim-log
      - name: pv-storage-lib
        persistentVolumeClaim:
          claimName: pv-claim-lib
      - name: pv-storage-etc
        persistentVolumeClaim:
          claimName: pv-claim-etc
      restartPolicy: Always
...

希望對您有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM