कैसे gcloud और minikube के बीच kubectl समूहों को स्विच करें


124

मेरे पास दो अलग-अलग परिवेशों में काम करने वाले कुबेरनेट्स हैं, जैसे कि मेरे स्थानीय परिवेश (मैकबुक रनिंग मिनीब्यूब) और साथ ही Google के कंटेनर इंजन (जीसीई, गूगल क्लाउड पर कुबेरनेट्स)। मैं अपनी YAML फ़ाइलों को विकसित करने और परीक्षण करने के लिए मैकबुक / स्थानीय वातावरण का उपयोग करता हूं और फिर पूरा होने पर, उन्हें जीसीई पर प्रयास करता हूं।

वर्तमान में मुझे व्यक्तिगत रूप से प्रत्येक वातावरण के साथ काम करने की आवश्यकता है: मुझे अपने स्थानीय वातावरण में YAML फ़ाइलों को संपादित करने की आवश्यकता है और, जब तैयार हो, (git) उन्हें एक GCE वातावरण में क्लोन करें और फिर उनका उपयोग / तैनाती करें। यह कुछ हद तक बोझिल प्रक्रिया है।

आदर्श रूप से, मैं अपनी मैकबुक से आसानी से स्थानीय मिनीक्यूब या जीसीई कुबेरनेट्स वातावरण के बीच स्विच करने के लिए कुबेकेल का उपयोग करना चाहूंगा और आसानी से यह निर्धारित कर सकता हूं कि कहां पर यमल फ़ाइल का उपयोग किया जाता है। क्या ऐसा करने के लिए संदर्भों को स्विच करने का एक सरल तरीका है?

जवाबों:


236

आप लोकल (मिनीब्यूब) से गक्लाउड और पीछे की ओर स्विच कर सकते हैं:

kubectl config use-context CONTEXT_NAME

सभी संदर्भों को सूचीबद्ध करने के लिए:

kubectl config get-contexts

आप स्थानीय और gcloud के लिए अलग-अलग वातावरण बना सकते हैं और इसे अलग-अलग yaml फाइलों में डाल सकते हैं।


5
आप इसे अपने kubectl संदर्भों में कैसे जोड़ सकते हैं? क्या इसे करने के लिए gcloud कमांड है? यह पाया: $ gcloud कंटेनर क्लस्टर $ CLUSTER_NAME
जस्टिन थॉमस

उपरोक्त मुझे मूल संदर्भ नहीं दिखा, लेकिन grep 'name:' ~/.kube/configकिया। यह था minikube, इसलिए मैं इसके साथ वापस जा सकता थाkubectl config use-context minikube
जॉर्डन मॉरिस

10

एक तेजी से मानक kubectl आदेशों का शॉर्टकट का उपयोग करने के लिए है kubectx :

  • सूची संदर्भ: kubectx
    • के बराबर kubectl config get-contexts
  • स्विच संदर्भ (फू करने के लिए): kubectx foo
    • के बराबर kubectl config use-context foo

MacOS पर स्थापित करने के लिए: brew install kubectx

कुब्टेक्स पैकेज में नामस्थान स्विच करने के लिए एक समान उपकरण भी शामिल है kubens

यदि आप नियमित रूप से कई संदर्भों और नामस्थानों में काम करते हैं तो ये दोनों सुपर सुविधाजनक हैं।

अधिक जानकारी: https://ahmet.im/blog/kubectx/


6

यदि आप मैक के लिए GUI- आधारित समाधान की तलाश कर रहे हैं और Docker डेस्कटॉप स्थापित है, तो आप Docker Menu Bar आइकन का उपयोग कर सकते हैं। यहां आप "कुबेरनेट्स" मेनू को उन सभी संदर्भों के साथ पा सकते हैं जो आपके कुबेकॉन्फ़िग में हैं और आसानी से उन पर स्विच करते हैं।


यह एक टिप्पणी की तरह अधिक प्रतीत होता है लेकिन उत्तर नहीं।
कोडरपीसी

यह एक महान उत्तर है (विशेष रूप gcloud container clusters get-credentials $CLUSTER_NAMEसे जस्टिन थॉमस की टिप्पणी से स्वीकृत उत्तर के साथ संयुक्त )।
thebjorn

3

नवीनतम 2020 उत्तर यहां है,

कुबेटल संदर्भ के बीच स्विच करने का एक सरल तरीका,

kubectl top nodes **--context=**context01name

kubectl top nodes --context=context02name

आप संदर्भ नाम को संदर्भ की तरह भी स्टोर कर सकते हैं जैसे संदर्भ01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-क्लस्टर -1


2

TL; DR: मैंने AppleScript के माध्यम से Kubernetes संदर्भों को बदलने के लिए एक GUI बनाया। मैं इसे शिफ्ट-सेमी-एक्स के माध्यम से सक्रिय करता हूं।

मेरा भी यही मुद्दा था। यह कमांड लाइन द्वारा एक दर्द स्विचिंग संदर्भ था। मैंने निम्नलिखित AppleScript (इस निर्देशिका में रखा गया है: $ (गृह) / लाइब्रेरी / लिपियों / अनुप्रयोगों / टर्मिनल) को चलाने के लिए एक मुख्य कॉम्बो (शिफ्ट-सीएमडी-एक्स) सेट करने के लिए फास्टस्क्रिप्स का उपयोग किया।

use AppleScript version "2.4" -- Yosemite (10.10) or later
use scripting additions

do shell script "/usr/local/bin/kubectl config current-context"
set curcontext to result

do shell script "/usr/local/bin/kubectl config get-contexts -o name"
set contexts to paragraphs of result

choose from list contexts with prompt "Select Context:" with title "K8s Context Selector" default items {curcontext}
set scriptArguments to item 1 of result

do shell script "/usr/local/bin/kubectl config use-context " & scriptArguments

display dialog "Switched to " & scriptArguments buttons {"ok"} default button 1


1

विभिन्न वातावरणों के लिए रिपॉस में YAML फ़ाइलों को क्लोन करना निश्चित रूप से आदर्श है। आपको जो करना है वह आपकी YAML फ़ाइलों को गति देता है - जो कि पर्यावरण से पर्यावरण के लिए भिन्न मापदंडों को निकाल कर।

आप निश्चित रूप से, कुछ टेम्प्लेटिंग इंजन का उपयोग कर सकते हैं और एक YAML में मूल्यों को अलग कर सकते हैं और एक विशिष्ट वातावरण के लिए YAML का उत्पादन कर सकते हैं। लेकिन यह आसानी से संभव है यदि आप हेल्म चार्ट को अपनाते हैं । कुछ नमूना चार्टों पर एक नज़र डालने के लिए इस गीथूब रेपो में स्थिर निर्देशिका पर जाएं

Wordpress चार्ट का उदाहरण लेने के लिए , आपके पास दो वातावरण के लिए दो अलग-अलग कमांड हो सकते हैं:

देव के लिए:

helm install --name dev-release --set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stable/wordpress

सीएलआई पर इन मूल्यों को पारित करना आवश्यक नहीं है, हालांकि, आप मूल्यों को aptly नामक फ़ाइल में संग्रहीत कर सकते हैं values.ymlऔर आपके पास विभिन्न वातावरणों के लिए अलग-अलग फाइलें हो सकती हैं

आपको हेलम चार्ट मानकों को परिवर्तित करने में कुछ काम की आवश्यकता होगी, लेकिन प्रयास इसके लायक होगा।


1

विभिन्न कुबेरनेट्स वातावरण (उर्फ कुबेरनेट संदर्भ) को बदलने / पढ़ने / हेरफेर करने का विहित उत्तर है, जैसा कि मार्क ने उल्लेख किया है, उपयोग करने के लिए kubectl config, नीचे देखें:

$ kubectl config                                                                                                                                                                                                                 
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

Available Commands:
  current-context Displays the current-context
  delete-cluster  Delete the specified cluster from the kubeconfig
  delete-context  Delete the specified context from the kubeconfig
  get-clusters    Display clusters defined in the kubeconfig
  get-contexts    Describe one or many contexts
  rename-context  Renames a context from the kubeconfig file.
  set             Sets an individual value in a kubeconfig file
  set-cluster     Sets a cluster entry in kubeconfig
  set-context     Sets a context entry in kubeconfig
  set-credentials Sets a user entry in kubeconfig
  unset           Unsets an individual value in a kubeconfig file
  use-context     Sets the current-context in a kubeconfig file
  view            Display merged kubeconfig settings or a specified kubeconfig file

Usage:
  kubectl config SUBCOMMAND [options]

दृश्य के पीछे, एक ~/.kube/configYAML फ़ाइल होती है जो सभी उपलब्ध संदर्भों और प्रत्येक संदर्भों के लिए समापन बिंदुओं के साथ सभी उपलब्ध संदर्भों को संग्रहीत करती है।

Kubectl बंद शेल्फ यह आसान नहीं है विभिन्न kubernetes संदर्भों का प्रबंधन करने के लिए जैसा कि आप शायद पहले से ही जानते हैं। सभी को प्रबंधित करने के लिए अपनी खुद की स्क्रिप्ट को रोल करने के बजाय, एक बेहतर दृष्टिकोण नामक एक परिपक्व टूल का उपयोग करना है kubectx, जिसे "अहमत अल्फ़ बाल्कन" नामक गोगलर द्वारा बनाया गया है, जो कुबेरनेट्स / Google क्लाउड प्लेटफ़ॉर्म डेवलपर पर टीम का अनुभव करता है जो इस तरह टूल टूल बनाता है। मैं इसकी पुरजोर सलाह देता हूँ।

https://github.com/ahmetb/kubectx

$ kctx --help                                                                                                                                                                                                                  
USAGE:
  kubectx                       : list the contexts
  kubectx <NAME>                : switch to context <NAME>
  kubectx -                     : switch to the previous context
  kubectx <NEW_NAME>=<NAME>     : rename context <NAME> to <NEW_NAME>
  kubectx <NEW_NAME>=.          : rename current-context to <NEW_NAME>
  kubectx -d <NAME> [<NAME...>] : delete context <NAME> ('.' for current-context)
                                  (this command won't delete the user/cluster entry
                                  that is used by the context)

  kubectx -h,--help         : show this message

1

नवीनतम (docker 19.03) docker contextकमांड भी देखें

अजीत सिंह रैना ) इसे " डॉकटर 19.03.0 पूर्व-रिलीज़: फास्ट कॉन्टेक्ट स्विचिंग, रूटलेस डॉकर, स्वार्म सर्विसेज के लिए Sysctl समर्थन " में दर्शाते हैं

प्रसंग स्विचिंग

एक संदर्भ अनिवार्य रूप से कॉन्फ़िगरेशन है जिसे आप किसी विशेष क्लस्टर तक पहुंचने के लिए उपयोग करते हैं।

उदाहरण के लिए, मेरे विशेष मामले में, मेरे पास 4 अलग-अलग क्लस्टर हैं - स्थानीय और दूर से चलने वाले झुंड और कुबेरनेट्स का मिश्रण।
मान लें कि मेरे डेस्कटॉप मशीन पर चलने वाला एक डिफ़ॉल्ट क्लस्टर है, Google क्लाउड प्लेटफ़ॉर्म पर चल रहे 2 नोड झुंड क्लस्टर, डॉक खेल के मैदान के साथ प्ले पर चलने वाले 5-नोड क्लस्टर और मिनिक्यूब पर चलने वाला एक एकल-नोड कुबेरनेट क्लस्टर है और मुझे सुंदर एक्सेस करने की आवश्यकता है नियमित तौर पर।

डॉकर संदर्भ सीएलआई का उपयोग करके मैं आसानी से एक क्लस्टर (जो मेरा विकास क्लस्टर हो सकता है) से सेकंड में उत्पादन क्लस्टर का परीक्षण कर सकता हूं।

$ sudo docker context --help
Usage:  docker context COMMAND
Manage contexts
Commands:
  create      Create a context
  export      Export a context to a tar or kubeconfig file
  import      Import a context from a tar file
  inspect     Display detailed information on one or more contexts
  ls          List contexts
  rm          Remove one or more contexts
  update      Update a context
  use         Set the current docker context
Run 'docker context COMMAND --help' for more information on a command.

उदाहरण के लिए:

[:)Captain'sBay=>sudo docker context ls
NAME                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                 ORCHESTRATOR
default *           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://127.0.0.1:16443 (default)   swarm
swarm-context1 

0

यदि आप विभिन्न संदर्भों के बीच स्विच करने का एक सरल तरीका ढूंढ रहे हैं तो शायद यह मदद का होगा।

मैं पहले से ही उल्लेखित kubectxऔर kswitchपटकथाओं से प्रेरित हुआ , जिसे मैं अधिकांश उपयोग के मामलों के लिए सुझा सकता हूं। वे स्विचिंग कार्य को हल करने में मदद कर रहे हैं, लेकिन मेरे लिए कुछ बड़े या कम मानक कॉन्फ़िगरेशन पर टूट रहे हैं ~/.kube/config। इसलिए मैंने एक sys-exec मंगलाचरण आवरण और चारों ओर एक छोटा-सा हाथ बनाया kubectl

आप को कॉल करते हैं कश्मीर पैरामीटर के बिना आप एक स्विच संदर्भ के लिए शीघ्र पकड़ा देखना होगा।

Switch kubectl to a different context/cluster/namespace.
Found following options to select from:
 >>> context: [1] franz
 >>> context: [2] gke_foo_us-central1-a_live-v1
 >>> context: [3] minikube
 --> new num [?/q]:

इसके अलावा, kशॉर्ट-हैंड के रूप में कार्य करना जारी रखता है। निम्नलिखित समतुल्य है:

kubectl get pods --all-namespaces
k get pods -A
k p -A


0

सभी संदर्भ प्राप्त करने के लिए

C:\Users\arun>kubectl config get-contexts

वर्तमान संदर्भ प्राप्त करने के लिए

C:\Users\arun>kubectl config current-context

संदर्भ स्विच करने के लिए

C:\Users\arun>kubectl config use-context <any context name from above list>

-1

हाँ, मुझे लगता है कि यह आपके बारे में क्या पूछ रहा है। अपने वर्तमान विन्यास को देखने के लिए, कुब्लेट विन्यास दृश्य का उपयोग करें। kubectl लोड और निम्न स्थानों से कॉन्फ़िगर करता है (क्रम में)

--kubeconfig=/path/to/.kube/config command line flag
KUBECONFIG=/path/to/.kube/config env variable
$HOME/.kube/config  - The DEFAULT

मैं - kubeconfig का उपयोग करता हूं क्योंकि मैं एक साथ कई समूहों के बीच स्विच करता हूं। थोड़ा बोझिल लेकिन यह अच्छी तरह से काम करता है।

अधिक जानकारी के लिए इन्हें देखें। https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ और https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/


मैं यह नहीं कहता कि उपयोगकर्ता पूछ रहा है कि कुब्तेल के लिए कई कॉन्फिगर का उपयोग कैसे किया जाए। सवाल यह है कि यमल कोड को कई वातावरणों में कैसे उपयोग किया जाए
विशाल बियानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.