Kubernetes'te ad alanı nasıl değiştirilir


92

Diyelim ki k8s-app1 ve k8s-app2 olmak üzere iki ad alanım var

Aşağıdaki komutu kullanarak belirli ad alanındaki tüm bölmeleri listeleyebilirim

kubectl get pods -n <namespace>

Nesneleri ilgili ad alanlarından listelemek için tüm komutlara ad alanı eklememiz gerekir. Ad alanını açıkça dahil etmeden belirli ad alanını ayarlamanın ve nesneleri listelemenin bir yolu var mı?


Merhaba kubectl config set-context --help, arıyor olabilirsiniz
Suresh Vishnoi

Yanıtlar:


157

Cevaplarımı kısa, özüne ve resmi belgelere referanslarla seviyorum:

Cevap :

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

Kimden :

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

7
Şu komutu çalıştırarak mevcut ad alanının değiştiğini doğrulamak iyi bir uygulamadırkubectl config view | grep namespace:
tet

45

Kubectl komutlarını kullanabilirsiniz:

Yalnızca ad alanını değiştir:

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

Tanımlanmış ad alanıyla yeni bir bağlam oluşturun:

kubectl config set-context gce-dev --user=cluster-admin --namespace=dev
kubectl config use-context gce-dev

Veya kubectx & kubens gibi eklentileri kullanın , aşağıdaki komut bağlamı şu şekilde değiştirecektir kube-system:

$ kubens kube-system 

Tercih ettiğim başka bir kolay alternatif, üçüncü taraf araçlarını yüklemek istemiyorsanız, basit bir yol takma ad kullanmaktır.

$ 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

mevcut ad alanını nasıl kaldırırsınız?
stephen

1
kubectl config set-context --current --namespace=""
Diego Mendes

24

Aşağıdaki adımları kullanarak ad alanını değiştirebildim

kubectl config set-context $(kubectl config current-context) --namespace=<namespace>
kubectl config view | grep namespace
kubectl get pods

Ben böyle test ettim

# 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:Mevcut ad alanını almak için kullanmanız gerekebilir .
dabest1

15

Aşağıdaki paket denilen kullanabilirsiniz kubectx çok kolay kullanarak kümeler arasında geçiş yapmak kubectx

görüntü açıklamasını buraya girin

ve kubens kullanarak ad alanları arasında geçiş yapma

görüntü açıklamasını buraya girin


13

Ben sevmedim kubectx ve kubens onlar için bash-complection için bir tane daha mektup ekleyerek, çünkü kubectl komutu.

Bu yüzden minik kubectl kullanım eklentisi yazdım :

# 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".

İlginizi çekiyorsa, https://github.com/kvaps/kubectl-use adresini kontrol edin.


1
Bu benim açık ara en sevdiğim cevap olmalı! Bunu kubectl komutlarını genişletmeden veya takma ad eklemeden yapmak için oldukça makul ancak maalesef uzun bir komut olsa da, bu çözüm sadece kısa ve kullanımı kolay değil, aynı zamanda - oldukça güzel bir şekilde - basit ve anlaşılır bir alt komutla kubectl'in nasıl düzgün şekilde genişletileceğini de gösteriyor. . Şapkamı size devrediyorum, efendim! ;-)
Saustrup

2

.Zshrc'de bir işlev oluşturdum

ksns() { kubectl config set-context --current --namespace="$1" }

Sonra ararım ksns default


-2

Bir çözüm

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; İstendiği gibi açıklama

Denilen bir npm paketi vardır k8ssaçılımı K8S Switching between clusters and namespaces.

Tam kullanım

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

Sizin durumunuzda olduğu gibi, yalnızca ad alanını değiştirmeniz gerekir, böylece komutu herhangi bir yapılandırma olmadan kullanabilirsiniz (zaten bir yapılandırma dosyasını ~/.kube/config ).

Gelişmiş Kullanım

Farklı kümeler arasında geçiş yapmanız gerekiyorsa, ana dizininize birden çok yapılandırma dosyası koymanız gerekir. Bu durumda daha fazla bilgi edinmek için BENİOKU paketine gidebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.