Несколько постоянных томов в миникубе
Я хочу подключить несколько томов к развертыванию в мини-кубе на одном постоянном томе.
У меня есть приложение, развернутое на 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: {}
1 ответ
В приведенной выше конфигурации вы пытаетесь смонтировать один 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
И в своем развертывании 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
...
Я надеюсь, что это будет полезно для вас