Как поменять пространство имен в кубернетес
Скажем, у меня есть два пространства имен k8s-app1 и k8s-app2
Я могу перечислить все модули из определенного пространства имен, используя приведенную ниже команду
kubectl get pods -n <namespace>
нужно добавить пространство имен ко всем командам, чтобы вывести список объектов из соответствующих пространств имен. Есть ли способ установить конкретное пространство имен и список объектов без явного включения пространства имен?
Ответы
Ответ 1
Я смог переключить пространство имен, используя следующие шаги
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 "[email protected]" 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 "[email protected]" 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 "[email protected]" modified.
master $ kubectl get sa
NAME SECRETS AGE
app3-sa 1 2m
default 1 7m
Ответ 2
Мне нравятся короткие ответы, по существу и со ссылками на официальную документацию:
Ответ:
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
Ответ 3
Вы можете использовать команды kubectl:
Переключить только пространство имен:
kubectl config set-context --current --namespace=<namespace>
Создайте новый контекст с определенным пространством имен:
kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
Или используйте дополнения, такие как kubectx & kubens, приведенная ниже команда переключит контекст на kube-system
:
$ kubens kube-system
Еще одна простая альтернатива, которую я предпочитаю, вы не хотите устанавливать сторонние инструменты, это использовать псевдоним.
$ alias kubens='f(){ kubectl config set-context $(kubectl config current-context) --namespace="[email protected]"; unset -f f; }; f'
$ kubens kube-system
Ответ 4
Вы можете использовать следующий пакет под названием kubectx, который позволяет очень легко переключаться между кластерами с помощью kubectx
и переключение между пространствами имен с помощью кубенов
Ответ 5
Решение
npm install -g k8ss
k8ss switch --namespace=your_namespace
kubectl get pods
TL;DR; Объяснение по запросу
Существует пакет npm под названием k8ss
который обозначает K8S Switching between clusters and namespaces
.
Полное использование
k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace
Как и в вашем случае, вам нужно только переключить пространство имен, чтобы вы могли использовать команду без какой-либо конфигурации (как вы уже поместили файл конфигурации в ~/.kube/config
).
Расширенное использование
Если вам нужно переключаться между различными кластерами, вам нужно поместить несколько файлов конфигурации в ваш домашний каталог. В этом случае вы можете перейти к пакету README, чтобы узнать больше.