Как переключить пространство имен в kubernetes

Скажем, у меня есть два пространства имен k8s-app1 и k8s-app2.

Я могу перечислить все модули из определенного пространства имен, используя приведенную ниже команду.

kubectl get pods -n <namespace>

Нам нужно добавить пространство имен ко всем командам, чтобы получить список объектов из соответствующих пространств имен. Есть ли способ установить конкретное пространство имен и список объектов без явного включения пространства имен?

Привет kubectl config set-context --help возможно вы ищете

Suresh Vishnoi 27.03.2019 10:36
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
162
1
134 121
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Мне удалось переключить пространство имен, выполнив следующие шаги.

kubectl config set-context $(kubectl config current-context) --namespace=<namespace>
kubectl config view | grep namespace
kubectl get pods

Вот как я тестировал

# Create namespaces k8s-app1, k8s-app2 and k8s-app3
master $ kubectl create ns k8s-app1
namespace/k8s-app1 created
master $ kubectl create ns k8s-app2
namespace/k8s-app2 created
master $ kubectl create ns k8s-app3
namespace/k8s-app3 created

# Create Service Account app1-sa in k8s-app1
# Service Account app2-sa in k8s-app2
# Service Account app3-sa in k8s-app3
master $ kubectl create sa app1-sa -n k8s-app1
serviceaccount/app1-sa created
master $ kubectl create sa app2-sa -n k8s-app2
serviceaccount/app2-sa created
master $ kubectl create sa app3-sa -n k8s-app3
serviceaccount/app3-sa created

# Switch namespace
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app1
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl config view | grep namespace
    namespace: k8s-app1
master $ kubectl get sa
NAME      SECRETS   AGE
app1-sa   1         1m
default   1         6m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app2
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app2-sa   1         2m
default   1         7m
master $
master $ kubectl config set-context $(kubectl config current-context) --namespace=k8s-app3
Context "kubernetes-admin@kubernetes" modified.
master $ kubectl get sa
NAME      SECRETS   AGE
app3-sa   1         2m
default   1         7m

Возможно, вам придется использовать kubectl config view --minify | grep namespace:, чтобы получить текущее пространство имен.

dabest1 11.11.2019 20:18

Есть несколько вариантов:

  • Переключение пространства имен только с помощью команд kubectl::
kubectl config set-context --current --namespace=<namespace>
  • Или создайте новый контекст с определенным пространством имен:
kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev
  • Или используйте дополнения, такие как kubectx и кубенс, приведенная ниже команда переключит контекст на kube-system:
$ kubens kube-system 
  • Или, еще одна простая альтернатива, которая мне нравится без установки сторонних инструментов, — это использование псевдонима bash (linux).
$ alias kubens='kubectl config set-context --current --namespace '
$ alias kubectx='kubectl config use-context '

// Usage
$ kubens kube-system    //Switch to a different namespace
$ kubectx docker        //Switch to separate context

как отключить текущее пространство имен?

tread 13.05.2020 09:47
kubectl config set-context --current --namespace = ""
Diego Mendes 13.05.2020 13:49

Вы можете использовать следующий пакет с именем kubectx, который позволяет очень легко переключаться между кластерами с помощью kubectx.

и переключение между пространствами имен с помощью кубенс

Мне нравятся мои ответы короткие, по делу и со ссылками на официальную документацию:

Отвечать:

kubectl config set-context --current --namespace=my-namespace

От:

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

# permanently save the namespace for all subsequent kubectl commands in that context.
kubectl config set-context --current --namespace=ggckad-s2

Рекомендуется проверить, изменилось ли текущее пространство имен, выполнив следующую команду kubectl config view | grep namespace:

tet 12.07.2019 07:28

Решение

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Объяснение по запросу

Существует пакет npm под названием k8ss, что означает K8S Switching between clusters and namespaces.

Полное использование

k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace

Как и в вашем случае, вам нужно только переключить пространство имен, поэтому вы можете использовать команду без какой-либо настройки (поскольку вы уже поместили файл конфигурации в ~/.kube/config).

Расширенное использование

Если вам нужно переключаться между разными кластерами, вам нужно поместить несколько файлов конфигурации в свой домашний каталог. В этом случае вы можете перейти на пакет README, чтобы узнать больше.

Мне не понравились kubectx и кубенс, потому что они добавляют еще одну букву для bash-дополнения к команде кубектл.

Поэтому я просто написал крошечный плагин kubectl-use:

# kubectl use prod
Switched to context "prod".

# kubectl use default
Switched to namespace "default".

# kubectl use stage kube-system
Switched to context "stage".
Switched to namespace "kube-system".

Если вам это интересно, проверьте https://github.com/kvaps/kubectl-use

Это должен быть мой любимый ответ на сегодняшний день! Несмотря на то, что существует вполне разумная, но, к сожалению, длинная команда, позволяющая сделать это без расширения или псевдонимов команд kubectl, это решение не только короткое и приятное в использовании, но также довольно хорошо демонстрирует, как правильно расширить kubectl с помощью простой и понятной подкоманды. . Снимаю шляпу перед вами, добрый сэр! ;-)

Saustrup 28.06.2020 18:02

Я создал функцию в .zshrc

ksns() { kubectl config set-context --current --namespace = "$1" }

Тогда я звоню ksns default

Проверьте https://krew.sigs.k8s.io/ У них есть множество плагинов для разных вариантов использования.

Для установки https://krew.sigs.k8s.io/docs/user-guide/setup/install/

kubectl krew install kubens

то после выполнения следующей команды будет установлен текущий контекст для вас

kubens <namespace> 

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