Скажем, у меня есть два пространства имен k8s-app1 и k8s-app2.
Я могу перечислить все модули из определенного пространства имен, используя приведенную ниже команду.
kubectl get pods -n <namespace>
Нам нужно добавить пространство имен ко всем командам, чтобы получить список объектов из соответствующих пространств имен. Есть ли способ установить конкретное пространство имен и список объектов без явного включения пространства имен?

Мне удалось переключить пространство имен, выполнив следующие шаги.
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:, чтобы получить текущее пространство имен.
Есть несколько вариантов:
kubectl config set-context --current --namespace=<namespace>
kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev
kube-system:$ kubens kube-system
$ 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
как отключить текущее пространство имен?
kubectl config set-context --current --namespace = ""Вы можете использовать следующий пакет с именем 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:
npm install -g k8ss
k8ss switch --namespace=your_namespace
kubectl get pods
Существует пакет 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 с помощью простой и понятной подкоманды. . Снимаю шляпу перед вами, добрый сэр! ;-)
Я создал функцию в .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>
Привет
kubectl config set-context --helpвозможно вы ищете