たとえば、k8s-app1とk8s-app2という2つの名前空間があるとします。
以下のコマンドを使用して、特定の名前空間からすべてのポッドを一覧表示できます
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 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
次のいずれかの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
kubectxとkubensはもう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 を確認してください。