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