たとえば、2つの名前空間k8s-app1とk8s-app2があります
以下のコマンドを使用して、特定の名前空間からすべてのポッドを一覧表示できます
kubectl get pods -n <namespace>
それぞれの名前空間のオブジェクトを一覧表示するには、すべてのコマンドに名前空間を追加する必要があります。名前空間を明示的に含めずに、特定の名前空間を設定してオブジェクトを一覧表示する方法はありますか?
回答:
私は自分の答えが短く、要点があり、公式文書を参照しているのが好きです。
回答:
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:
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
kubectl config set-context --current --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:
現在の名前空間を取得するために使用する必要がある場合があります。
kubectxとkubensは、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を確認してください
npm install -g k8ss
k8ss switch --namespace=your_namespace
kubectl get pods
k8ss
を表すnpmパッケージがありますK8S Switching between clusters and namespaces
。
完全な使用法は
k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace
あなたの場合のように、名前空間を切り替えるだけでよいので、設定なしでコマンドを使用できます(すでに設定ファイルをに置いているため~/.kube/config
)。
異なるクラスターを切り替える必要がある場合は、ホームディレクトリに複数の構成ファイルを配置する必要があります。この場合、詳細については、パッケージREADMEにアクセスしてください。
kubectl config set-context --help
あなたが探しているかもしれません