web-dev-qa-db-ja.com

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

たとえば、k8s-app1とk8s-app2という2つの名前空間があるとします。

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

kubectl get pods -n <namespace>

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

46
P Ekambaram

以下の手順を使用して名前空間を切り替えることができました

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
21
P Ekambaram

私は私の回答を簡潔に、要点まで、そして公式ドキュメントへの参照とともに好きです:

回答

kubectl config set-context --current --namespace=my-namespace

From

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
81
PussInBoots

次のいずれかのkubectlコマンドを使用できます。

名前空間のみを切り替える:

kubectl config set-context --current --namespace=<namespace>

名前空間を定義して新しいコンテキストを作成します。

kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

または kubectx&kubens のようなアドオンを使用して、以下のコマンドでコンテキストをkube-systemに切り替えます。

$ kubens kube-system

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

$ alias kubens='f(){ kubectl config set-context $(kubectl config current-context) --namespace="$@";  unset -f f; }; f'
$ kubens kube-system
14
Diego Mendes

kubectx と呼ばれる次のパッケージを使用すると、kubectxを使用してクラスターを簡単に切り替えることができます

enter image description here

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

enter image description here

10
Mohamed Saleh

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

だから私は小さな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 を確認してください。

5
kvaps