नामस्थान को कुबेरनेट में कैसे स्विच करें


92

कहते हैं, मेरे पास दो नामस्थान k8s-app1 और k8s-app2 हैं

मैं नीचे दिए गए आदेश का उपयोग करके विशिष्ट नाम स्थान से सभी पॉड्स को सूचीबद्ध कर सकता हूं

kubectl get pods -n <namespace>

हमें संबंधित नामस्थान से ऑब्जेक्ट्स को सूचीबद्ध करने के लिए सभी कमांडों को नामस्थान संलग्न करने की आवश्यकता है। क्या स्पष्ट नाम शामिल किए बिना विशिष्ट नामस्थान और सूची ऑब्जेक्ट सेट करने का एक तरीका है?


हाय kubectl config set-context --helpआप देख रहे होंगे
सुरेश विश्नोई

जवाबों:


157

मुझे अपने उत्तर संक्षिप्त हैं, इस बिंदु पर और आधिकारिक दस्तावेज़ीकरण के संदर्भ में:

उत्तर :

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

7
यह मान्य करने के लिए एक अच्छा अभ्यास है कि वर्तमान नाम स्थान निम्नलिखित कमांड को निष्पादित करके बदल गया हैkubectl config view | grep namespace:
tet

45

आप 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 जैसे addons का उपयोग करें, नीचे दी गई कमांड संदर्भ को स्विच करेगी kube-system:

$ kubens kube-system 

एक और आसान विकल्प जो मुझे पसंद है, यदि आप तीसरे पक्ष के उपकरण स्थापित नहीं करना चाहते हैं, तो एक सरल तरीका उपनाम का उपयोग कर रहा है।

$ 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

आप क्यूरेंट नेमस्पेस कैसे परेशान करते हैं?
स्टीफन

1
kubectl config set-context --current --namespace=""
डिएगो मेंडेस

24

मैं नीचे दिए गए चरणों का उपयोग करके नामस्थान स्विच करने में सक्षम था

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

1
आपको kubectl config view --minify | grep namespace:वर्तमान नाम स्थान प्राप्त करने के लिए उपयोग करना पड़ सकता है ।
dabest1

15

आप कुब्टेक्स नामक निम्नलिखित पैकेज का उपयोग कर सकते हैं जो कुब्टेक्स का उपयोग करके क्लस्टर के बीच स्विच करना बहुत आसान बनाता है

यहां छवि विवरण दर्ज करें

और कुबेंस का उपयोग करके नामस्थान के बीच स्विच करना

यहां छवि विवरण दर्ज करें


13

मुझे कुब्टेक्स और कुबेंस पसंद नहीं थे, क्योंकि वे कुबेटल को बैश- संकलन के लिए एक और पत्र जोड़ रहे हैं कमांड के ।

इसलिए मैंने सिर्फ छोटे - छोटे कुब्ज-उपयोग प्लगइन लिखे :

# 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 देखें


1
यह अब तक मेरा पसंदीदा जवाब है! हालांकि कुबेकल आदेशों को विस्तारित या अलियास किए बिना ऐसा करने के लिए एक बहुत ही उचित लेकिन दुर्भाग्य से लंबी आज्ञा है, यह समाधान न केवल छोटा और उपयोग करने के लिए मीठा है, बल्कि यह भी है - काफी अच्छी तरह से - यह दर्शाता है कि एक सरल और समझने योग्य उपकमांड के साथ कुबेटल को कैसे ठीक से बढ़ाया जाए। । मैं अपनी टोपी आपको देता हूं, अच्छा सर! ;-)
सासेनुप

2

मैंने .zshrc में एक फंक्शन बनाया

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

फिर मैं फोन करता हूं ksns default


-2

एक तरकीब

npm install -g k8ss

k8ss switch --namespace=your_namespace
kubectl get pods

TLDR; अनुरोध के अनुसार स्पष्टीकरण

वहाँ एक NPM पैकेज कहा जाता है k8ssजो के लिए खड़ा है K8S Switching between clusters and namespaces

पूरा उपयोग है

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

जैसा कि आपके मामले में, आपको केवल नाम स्थान स्विच करने की आवश्यकता है, इसलिए आप बिना किसी कॉन्फ़िगरेशन के कमांड का उपयोग कर सकते हैं (जैसा कि आप पहले से एक कॉन्फ़िगरेशन फ़ाइल डालते हैं ~/.kube/config)।

उन्नत उपयोग

यदि आपको अलग-अलग समूहों के बीच स्विच करने की आवश्यकता है, तो आपको अपने होम डायरेक्टरी में कई कॉन्फिगर फाइल रखने की जरूरत है। इस मामले में आप अधिक जानने के लिए पैकेज README पर जा सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.