Powiedzmy, mam dwie przestrzenie nazw k8s-app1 i k8s-app2
Mogę wyświetlić listę wszystkich podów z określonej przestrzeni nazw, używając poniższego polecenia
kubectl get pods -n <namespace>
Musimy dołączyć przestrzeń nazw do wszystkich poleceń, aby wyświetlić listę obiektów z odpowiednich przestrzeni nazw. Czy istnieje sposób na ustawienie określonej przestrzeni nazw i listy obiektów bez jawnego dołączania przestrzeni nazw?
kubernetes
namespaces
P Ekambaram
źródło
źródło
kubectl config set-context --help
może być, którego szukaszOdpowiedzi:
Lubię moje odpowiedzi krótkie, rzeczowe iz odniesieniami do oficjalnej dokumentacji:
Odpowiedź :
kubectl config set-context --current --namespace=my-namespace
Od :
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
źródło
kubectl config view | grep namespace:
Możesz użyć poleceń kubectl:
Zmień tylko przestrzeń nazw:
kubectl config set-context --current --namespace=<namespace>
Utwórz nowy kontekst ze zdefiniowaną przestrzenią nazw:
kubectl config set-context gce-dev --user=cluster-admin --namespace=dev kubectl config use-context gce-dev
Lub użyj dodatków, takich jak kubectx i kubens , poniższe polecenie zmieni kontekst na
kube-system
:$ kubens kube-system
Inną prostą alternatywą, którą wolę, jeśli nie chcesz instalować narzędzi innych firm, prostym sposobem jest użycie aliasu.
$ 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
źródło
kubectl config set-context --current --namespace=""
Udało mi się zmienić przestrzeń nazw, wykonując poniższe czynności
kubectl config set-context $(kubectl config current-context) --namespace=<namespace> kubectl config view | grep namespace kubectl get pods
Tak właśnie przetestowałem
# 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
źródło
kubectl config view --minify | grep namespace:
aby uzyskać aktualną przestrzeń nazw.Możesz użyć następującego pakietu o nazwie kubectx, który bardzo ułatwia przełączanie się między klastrami za pomocą kubectx
i przełączanie się między przestrzeniami nazw za pomocą kubens
źródło
Nie podobały mi się kubectx i kubens, ponieważ dodają jeszcze jedną literę dla komplementacji bash do polecenia kubectl .
Właśnie napisałem małą wtyczkę 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".
Jeśli Cię to interesuje, sprawdź https://github.com/kvaps/kubectl-use
źródło
Utworzyłem funkcję w .zshrc
ksns() { kubectl config set-context --current --namespace="$1" }
Wtedy dzwonię
ksns default
źródło
Rozwiązanie
npm install -g k8ss k8ss switch --namespace=your_namespace kubectl get pods
TLDR; Wyjaśnienie zgodnie z żądaniem
Jest to pakiet o nazwie npm
k8ss
co oznaczaK8S Switching between clusters and namespaces
.Pełne wykorzystanie jest
k8ss switch --cluster=your_new_cluster --namespace=your_new_namespace
Tak jak w twoim przypadku, musisz tylko zmienić przestrzeń nazw, więc możesz użyć polecenia bez żadnej konfiguracji (ponieważ umieściłeś już plik konfiguracyjny w
~/.kube/config
).Zaawansowane użycie
Jeśli chcesz przełączać się między różnymi klastrami, musisz umieścić wiele plików konfiguracyjnych w katalogu domowym. W takim przypadku możesz przejść do pakietu README, aby dowiedzieć się więcej.
źródło