kubernetesで名前空間を切り替える方法


83

たとえば、2つの名前空間k8s-app1とk8s-app2があります

以下のコマンドを使用して、特定の名前空間からすべてのポッドを一覧表示できます

kubectl get pods -n <namespace>

それぞれの名前空間のオブジェクトを一覧表示するには、すべてのコマンドに名前空間を追加する必要があります。名前空間を明示的に含めずに、特定の名前空間を設定してオブジェクトを一覧表示する方法はありますか?


こんにちは kubectl config set-context --helpあなたが探しているかもしれません
SureshVishnoi19年

回答:


142

私は自分の答えが短く、要点があり、公式文書を参照しているのが好きです。

回答

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

6
次のコマンドを実行して、現在の名前空間が変更されたことを検証することをおkubectl config view | grep namespace:
tet

41

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

私が好むもう1つの簡単な代替手段は、サードパーティのツールをインストールしたくないということです。エイリアスを使用することです。

$ 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を

ここに画像の説明を入力してください

kubensを使用して名前空間を切り替える

ここに画像の説明を入力してください


11

kubectxkubensは、kubectlコマンドにbash-complectionの文字をもう1つ追加しているため、私は好きではありませんでした。

だから私は小さなkubectlを書いた-プラグインを使う

# 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を表すnpmパッケージがありますK8S Switching between clusters and namespaces

完全な使用法は

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

あなたの場合のように、名前空間を切り替えるだけでよいので、設定なしでコマンドを使用できます(すでに設定ファイルをに置いているため~/.kube/config)。

高度な使用法

異なるクラスターを切り替える必要がある場合は、ホームディレクトリに複数の構成ファイルを配置する必要があります。この場合、詳細については、パッケージREADMEにアクセスしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.