#kubernetes #google-cloud-platform #google-kubernetes-engine #persistent-storage #kubernetes-pvc
#kubernetes #google-облачная платформа #google-kubernetes-engine #постоянное хранилище #kubernetes-pvc
Вопрос:
Я пытаюсь определить общий постоянный том в k8s между двумя разными развертываниями, и я столкнулся с некоторыми проблемами:
У меня есть 2 модуля для каждого развертывания, и между развертываниями я пытаюсь настроить общий том — это означает, что если я создам текстовый файл в deplyment1 / pod1 и посмотрю в deplyment1 / pod2 — я не смогу увидеть файл.
Вторая проблема заключается в том, что я не вижу файлы в другом развертывании (deplyment2) — в настоящее время происходит то, что каждый модуль создал свой собственный отдельный том вместо того, чтобы использовать один и тот же том.
В конечном итоге моя цель — создать общий том между модулями и развертываниями. Важно отметить, что я работаю на GKE.
Ниже приведены мои текущие конфигурации
Развертывание 1:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1
namespace: test
spec:
selector:
matchLabels:
app: app1
template:
metadata:
labels:
app: app1
spec:
containers:
- name: server
image: app1
ports:
- name: grpc
containerPort: 11111
resources:
requests:
cpu: 300m
limits:
cpu: 500m
volumeMounts:
- name: test
mountPath: /etc/test/configs
volumes:
- name: test
persistentVolumeClaim:
claimName: my-claim
Развертывание 2:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app2
namespace: test
spec:
selector:
matchLabels:
app: app2
template:
metadata:
labels:
app: app2
spec:
containers:
- name: server
image: app2
ports:
- name: http
containerPort: 22222
resources:
requests:
cpu: 300m
limits:
cpu: 500m
volumeMounts:
- name: test
mountPath: /etc/test/configs
volumes:
- name: test
persistentVolumeClaim:
claimName: my-claim
Постоянный том:
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
namespace: test
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: fast
local:
path: /etc/test/configs
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-nodepool
operator: In
values:
- default-pool
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: my-claim
namespace: test
annotations:
volume.beta.kubernetes.io/storage-class: fast
spec:
accessModes:
- ReadWriteMany
storageClassName: fast
resources:
requests:
storage: 5Gi
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
fstype: ext4
replication-type: regional-pd
и опишите pv и pvc:
$ kubectl describe pvc -n test
Name: my-claim
Namespace: test
StorageClass: fast
Status: Bound
Volume: test-pv
Labels: <none>
Annotations: pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
volume.beta.kubernetes.io/storage-class: fast
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 5Gi
Access Modes: RWX
VolumeMode: Filesystem
Mounted By: <none>
Events: <none>
$ kubectl describe pv -n test
Name: test-pv
Labels: <none>
Annotations: pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: fast
Status: Bound
Claim: test/my-claim
Reclaim Policy: Retain
Access Modes: RWX
VolumeMode: Filesystem
Capacity: 5Gi
Node Affinity:
Required Terms:
Term 0: cloud.google.com/gke-nodepool in [default-pool]
Message:
Source:
Type: LocalVolume (a persistent volume backed by local storage on a node)
Path: /etc/test/configs
Events: <none>
Комментарии:
1. AFAIK, это невозможно. Вы можете настроить контейнер, настроенный с помощью NFS, и создать экспорт, который могут использовать другие контейнеры mount.github.com/kubernetes/examples/tree/master/staging/volumes/nfs
Ответ №1:
Драйвер хранилища CSI GCE-PD не поддерживает ReadWriteMany
. Вам нужно использовать ReadOnlyMany
. Для ReadWriteMany
вас необходимо использовать монтирование GFS.
Из документации о том, как использовать постоянные диски с несколькими устройствами чтения
Создание PersistentVolume
и PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-readonly-pv
spec:
storageClassName: ""
capacity:
storage: 10Gi
accessModes:
- ReadOnlyMany
claimRef:
namespace: default
name: my-readonly-pvc
gcePersistentDisk:
pdName: my-test-disk
fsType: ext4
readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-readonly-pvc
spec:
# Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
# A nil storageClassName value uses the default StorageClass. For details, see
# https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
storageClassName: ""
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 10Gi
Использование PersistentVolumeClaim
в модуле
apiVersion: v1
kind: Pod
metadata:
name: pod-pvc
spec:
containers:
- image: k8s.gcr.io/busybox
name: busybox
command:
- "sleep"
- "3600"
volumeMounts:
- mountPath: /test-mnt
name: my-volume
readOnly: true
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-readonly-pvc
readOnly: true
Теперь у вас может быть несколько модулей на разных узлах, которые могут монтировать это PersistentVolumeClaim
в режиме только для чтения. Однако вы не можете подключать постоянные диски в режиме записи на нескольких узлах одновременно
Комментарии:
1. когда я попытался это сделать, я столкнулся с проблемами. « — test: pod / app1-69f499c8d-srff2: доступно 0/9 узлов: 3 недостаточно процессора, у 6 узлов был конфликт привязки к узлу тома. и это моя проблема. когда модули подключаются, первые модули улавливают громкость, а другие модули из других приложений не могут подключиться к объему. можете ли вы подробнее рассказать о способе nfs?