Все системные службы в Kubernetes развернуты в пространстве имен, обычно называемом kube-system. Откуда это?
Как отмечено в хорошей документации есть три пространства имен, которые Kubernetes изначально запускает с:
- default - Пространство имен по умолчанию для объектов без другого пространства имен.
- kube-system - Пространство имен для объектов, созданных системой Kubernetes.
- kube-public - Пространство имен создается автоматически и доступно для чтения всем пользователям (включая тех, кто не прошел проверку подлинности). Это пространство имен в основном зарезервировано для использования кластером, в случае если некоторые ресурсы должны быть видимыми и доступными для чтения во всем кластере. Открытый аспект этого пространства имен - это всего лишь соглашение, а не требование.
Вы можете изменить default
пространство имен на любое пространство имен по своему вкусу, используя kubectl config
контекстную обработку.
Что если я хотел бы изменить это на другое пространство имен?
Это было бы запутанным и довольно рискованным делом ... Для кластера, созданного kubeadm, вы можете найти соответствующие манифесты в / etc / kubernetes / manifest, но там не просто достаточно изменить пространство имен, есть массив карт конфигурации, сертификаты и вещи для рассмотрения пространства имен. И даже если вам удастся это сделать, то есть причина для удаления флага api-сервера master-service-namespace
, поскольку вы можете прервать неявные ссылки GKE, и могут возникнуть подобные проблемы. Все сводится к тому, что не рекомендуется менять пространство имен kube-system.
Edit:
Ниже приведена выдержка из kuberentes source , где вы можете увидеть, как эти пространства имен изначально определены.
// NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
NamespaceDefault string = "default"
// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
NamespaceAll string = ""
// NamespaceNone is the argument for a context when there is no namespace.
NamespaceNone string = ""
// NamespaceSystem is the system namespace where we place system components.
NamespaceSystem string = "kube-system"
// NamespacePublic is the namespace where we place public info (ConfigMaps)
NamespacePublic string = "kube-public"
Вы можете найти больше ссылок на kube-system через кодовую базу, вот еще один пример:
// "kube-system" is the default scheduler lock object namespace
SchedulerDefaultLockObjectNamespace string = "kube-system"
И так далее ...