Як переключити простір імен у kubernetes


92

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

Я можу перерахувати всі стручки з конкретного простору імен, використовуючи команду нижче

kubectl get pods -n <namespace>

Нам потрібно додати простір імен до всіх команд, щоб перерахувати об’єкти з відповідних просторів імен. Чи є спосіб встановити конкретний простір імен та об'єкти списку без явного включення простору імен?


Привіт, kubectl config set-context --helpможливо, ви шукаєте
Суреш Вішной

Відповіді:


157

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

Відповідь :

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

7
Доброю практикою є перевірка того, що поточний простір імен змінився, виконавши наступну командуkubectl config view | grep namespace:
тет

45

Ви можете використовувати команди 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 & kubens , команда нижче переведе контекст на kube-system:

$ kubens kube-system 

Ще одна проста альтернатива, яку я віддаю перевагу, якщо ви не хочете встановлювати сторонні інструменти, простий спосіб - використовувати псевдонім.

$ alias kubens='kubectl config set-context --current --namespace '
$ alias kubectx='kubectl config use-context '

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

як зняти поточний простір імен?
Стівен

1
kubectl config set-context --current --namespace=""
Дієго Мендес

24

Мені вдалося змінити простір імен, використовуючи наведені нижче дії

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

1
Можливо, вам доведеться скористатися kubectl config view --minify | grep namespace:для отримання поточного простору імен.
dabest1

15

Ви можете використати наступний пакет під назвою kubectx, який полегшує перемикання між кластерами за допомогою kubectx

введіть тут опис зображення

і перемикання між просторами імен за допомогою кубенів

введіть тут опис зображення


13

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

Тож я щойно написав крихітний плагін 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


1
Це має бути моя улюблена відповідь на сьогодні! Хоча існує цілком розумна, але, на жаль, довга команда, щоб зробити це без розширення або згладжування команд kubectl, це рішення є не тільки коротким і солодким у використанні, але воно також - досить приємно - демонструє, як правильно розширити kubectl за допомогою простої і зрозумілої підкоманди . Я даю вам шапку, добрий пане! ;-)
Сауструп

2

Я створив функцію в .zshrc

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

Тоді дзвоню ksns default


-2

Вирішення

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; Пояснення за запитом

Існує НПЙ пакет під назвою k8ssякий виступає за K8S Switching between clusters and namespaces.

Повне використання

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

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

Розширене використання

Якщо вам потрібно перемикатися між різними кластерами, вам потрібно помістити кілька конфігураційних файлів у домашній каталог. У цьому випадку ви можете перейти до пакету README, щоб дізнатись більше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.