Общий каталог для kubernetes Развертывание между его репликами
У меня есть простое развертывание с 2 репликами.
Мне бы хотелось, чтобы у каждой реплики была одна и та же папка хранения (общая папка для загрузки приложений)
Я играл с претензиями и объемами, но еще не получил преимущество, поэтому просил быструю помощь / пример.
apiVersion: apps/v1
kind: Deployment
metadata:
name: 'test-tomcat'
labels:
app: test-tomcat
spec:
selector:
matchLabels:
app: test-tomcat
replicas: 3
template:
metadata:
name: 'test-tomcat'
labels:
app: test-tomcat
spec:
volumes:
- name: 'data'
persistentVolumeClaim:
claimName: claim
containers:
- image: 'tomcat:9-alpine'
volumeMounts:
- name: 'data'
mountPath: '/app/data'
imagePullPolicy: Always
name: 'tomcat'
command: ['bin/catalina.sh', 'jpda', 'run']
kind: PersistentVolume
apiVersion: v1
metadata:
name: volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: claim
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
1 ответ
Прежде всего вам необходимо решить, какой тип постоянного тома использовать. Вот несколько примеров локального кластера:
HostPath - локальный путь на узле. Следовательно, если первый модуль находится на узле 1, а второй - на узле 2, хранилища будут другими. Чтобы решить эту проблему, вы можете использовать один из следующих вариантов. Пример HostPath:
kind: PersistentVolume apiVersion: v1 metadata: name: example-pv labels: type: local spec: storageClassName: manual capacity: storage: 3Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
NFS - Persistent Volume этого типа использует сетевую файловую систему. NFS - это протокол распределенной файловой системы, который позволяет вам монтировать удаленные каталоги на ваших серверах. Вам необходимо установить NFS-сервер перед использованием NFS в Kubernetes; Вот пример, как настроить монтирование NFS в Ubuntu. Пример в Кубернетесе:
apiVersion: v1 kind: PersistentVolume metadata: name: example-pv spec: capacity: storage: 3Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2
GlusterFS - GlusterFS представляет собой масштабируемую распределенную файловую систему, которая объединяет ресурсы дискового хранилища с нескольких серверов в единое глобальное пространство имен. Что касается NFS, вам необходимо установить GlusterFS перед его использованием в Kubernetes; вот ссылка с инструкцией, и еще одна с образцом. Пример в Кубернетесе:
apiVersion: v1 kind: PersistentVolume metadata: name: example-pv annotations: pv.beta.kubernetes.io/gid: "590" spec: capacity: storage: 3Gi accessModes: - ReadWriteMany glusterfs: endpoints: glusterfs-cluster path: myVol1 readOnly: false persistentVolumeReclaimPolicy: Retain --- apiVersion: v1 kind: Service metadata: name: glusterfs-cluster spec: ports: - port: 1 --- apiVersion: v1 kind: Endpoints metadata: name: glusterfs-cluster subsets: - addresses: - ip: 192.168.122.221 ports: - port: 1 - addresses: - ip: 192.168.122.222 ports: - port: 1 - addresses: - ip: 192.168.122.223 ports: - port: 1
После создания Persistent Volume вам необходимо создать PersistaentVolumeClaim. PersistaentVolumeClaim - это ресурс, используемый модулями для запроса томов из хранилища. После создания Persistent VolumeClaim плоскость управления Kubernetes ищет Persistent Volume, который удовлетворяет требованиям заявки. Пример:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
И последний шаг, вам нужно настроить Pod для использования Persistent VolumeClaim. Вот пример:
apiVersion: apps/v1
kind: Deployment
metadata:
name: 'test-tomcat'
labels:
app: test-tomcat
spec:
selector:
matchLabels:
app: test-tomcat
replicas: 3
template:
metadata:
name: 'test-tomcat'
labels:
app: test-tomcat
spec:
volumes:
- name: 'data'
persistentVolumeClaim:
claimName: example-pv-claim #name of the claim should be the same as defined before
containers:
- image: 'tomcat:9-alpine'
volumeMounts:
- name: 'data'
mountPath: '/app/data'
imagePullPolicy: Always
name: 'tomcat'
command: ['bin/catalina.sh', 'jpda', 'run']