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

#kubernetes #namespaces

#kubernetes #пространства имен

Вопрос:

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

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

 kubectl get pods -n <namespace>
  

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

Комментарии:

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

Ответ №1:

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

Ответ:

 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
  

Комментарии:

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

2. В качестве альтернативы, можно просто получить пространство имен без каких-либо других инструментов, используя kubectl config view -o jsonpath={.contexts[].context.namespace}

Ответ №2:

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

  • Переключать пространство имен только с помощью команд 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 amp; kubens, приведенная ниже команда переключит контекст на 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
  

Комментарии:

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

2. kubectl config set-context --current --namespace=""

Ответ №3:

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

 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: для получения текущего пространства имен.

Ответ №4:

Мне не понравились 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 с помощью простой и понятной подкоманды. Я снимаю шляпу перед вами, добрый сэр! 😉

Ответ №5:

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

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

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

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

Ответ №6:

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

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

Затем я вызываю ksns default

Ответ №7:

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

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

 kubectl krew install kubens
  

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

 kubens <namespace> 
  

Ответ №8:

  • kubectx — для переключения контекстов / кластеров. Может быть установлен с помощью «brew install kubectx»

  • kubens — для переключения между пространствами имен в кластере. Также может быть установлен с помощью «brew install kubens»

Ответ №9:

kubie может переключать контекст и пространства имен. если у вас установлен fzf, интерфейс будет значительно улучшен.

  • kubie ctx показать список доступных контекстов (если установлен fzf, отобразить меню контекстов, которое можно выбрать)
  • kubie ctx <context> переключите текущую оболочку на заданный контекст (создает оболочку, если не оболочку kubie)
  • kubie ctx - вернитесь к предыдущему контексту
  • kubie ctx <context> -r создать рекурсивную оболочку в заданном контексте
  • kubie ctx <context> -n <namespace> создайте оболочку в заданном контексте и пространстве имен
  • kubie ns показать список доступных пространств имен (если установлен fzf, отобразить меню пространств имен, которое можно выбрать)
  • kubie ns <namespace> переключите текущую оболочку на заданное пространство имен
  • kubie ns - переключитесь обратно в предыдущее пространство имен
  • kubie ns <namespace> -r создайте рекурсивную оболочку в заданном пространстве имен

Ответ №10:

OKD сделает это с меньшим количеством ввода (как и многие другие вещи).

Итак, после загрузки oc Client Tools с Github (ссылка) измените пространство имен (да, в стандартном кластере k8s, а не только в OKD), введя:

oc project <my_ns>

И для проверки:

oc project

Ответ №11:

Решение

 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, чтобы узнать больше.