Почему постоянный том Kubernetes не имеет пространства имен?

Контекст:
Изначально у меня был набор файлов k8s. Ресурсы из файлов были развернуты и хорошо работали в пространстве имен «пространство имен1».
Затем я попытался установить еще одну копию всей инфраструктуры k8s в пространство имен «namespace2», поместив все, что у меня было, в новую диаграмму Helm.
В файле Values.yaml диаграммы Helm для пространства имен каждого ресурса установлено значение «namespace2», поскольку все файлы yaml k8s были преобразованы мной в файлы шаблонов Helm и изменен способ использования namespace: {{ .Values.namespace }} для всех ресурсов.
Helm не сообщил мне, что у меня уже есть постоянный том в пространстве имен «».
Пытаясь понять, что не так, я посмотрел на постоянные тома, используя

kubectl get -n namespace1 pv
kubectl get -n namespace2 pv
kubectl get -n "" pv
kubectl get -n '' pv
kubectl describe -n namespace1 pv
kubectl describe -n namespace2 pv
kubectl describe -n "" pv
kubectl describe -n '' pv

и я заметил, что всегда вижу одни и те же два существующих постоянных тома, которые изначально были развернуты в пространстве имен «пространство имен1».
По крайней мере, я думал, что развернул их в этом пространстве имен.
Я проверил файл YAML, определяющий постоянные тома, и убедился, что для томов правильно настроено пространство имен «namespace1». Тогда я попробовал

kubectl get -A pv

и получил

NAMESPACE   NAME                                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS   REASON   AGE
            persistentvolume/resdb-pv-volume    100Mi      RWO            Retain           Bound    some-stuff/resdb-pv-claim    respv                   27d
            persistentvolume/sondb-pv-volume    100Mi      RWO            Retain           Bound    some-stuff/sondb-pv-claim    sonpv                   27d

Вопрос:
Почему у постоянных томов не отображается пространство имен в выводе kubectl get?
Поле пространства имен также не отображается в выводе kubectl describe. В выводе вообще нет поля Namespace:.
Разве постоянные тома вообще не имеют пространства имен, к которому они принадлежат?
Это известный сбой/ошибка Minikube 1.32.0 или базовой версии Kubernetes 1.28.3, которую я использую?

Обычно вам не нужно вручную создавать PersistentVolumes, и, возможно, ответом на вашу реальную проблему будет удаление их из диаграммы Helm. Когда вы копируете PersistentVolumeClaims в новое пространство имен (или, что лучше, копируете StatefulSet и позволяете кластеру создавать PVC), кластер должен автоматически предоставлять новые соответствующие PersistentVolumes.

David Maze 16.04.2024 01:17

@DavidMaze, мне интересно, можно ли заставить мои необлачные установки выделять PV, соответствующие PVC? Я всегда думал, что PV может быть предоставлен автоматически различными поставщиками облачных услуг, чего не происходит в случае установки k8s на персональный компьютер.

Alexander Ites 16.04.2024 09:34
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
3
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Постоянные тома (PV) в Kubernetes — это ресурсы всего кластера, то есть они не принадлежат какому-либо конкретному пространству имен. Вот почему, когда вы проверяете PV с помощью kubectl, вы не видите для них указанное пространство имен.

В отличие от PV, Persistent Volume Claims (PVC) привязаны к конкретным пространствам имен. Таким образом, хотя PVC должны находиться в определенном пространстве имен, к заявленным ими PV можно получить доступ из любого пространства имен во всем кластере.

Такая конструкция позволяет при необходимости совместно использовать PV и получать к ним доступ со стороны PVC из разных пространств имен. Поведение, которое вы видите, является нормальным и не является сбоем или ошибкой в ​​Minikube или Kubernetes.

Немного странно, что конфигурация постоянного тома k8 позволяет устанавливать значение в поле пространства имен.

Alexander Ites 16.04.2024 09:32

Другие вопросы по теме