Kubectl kümelerini gcloud ve minikube arasında değiştirme


124

Kubernetes'im iki farklı ortamda, yani yerel ortamımda (minikube çalıştıran MacBook) ve Google'ın Container Engine'de (GCE, Google Cloud'da Kubernetes) iyi çalışıyor. YAML dosyalarımı geliştirmek ve test etmek için MacBook / yerel ortamı kullanıyorum ve ardından tamamladıktan sonra GCE'de deniyorum.

Şu anda her ortamla ayrı ayrı çalışmam gerekiyor: Yerel ortamımdaki YAML dosyalarını düzenlemem ve hazır olduğunda (git) onları bir GCE ortamına klonlamam ve ardından bunları kullanmam / dağıtmam gerekiyor. Bu biraz külfetli bir süreçtir.

İdeal olarak, yerel minikube veya GCE Kubernetes ortamları arasında kolayca geçiş yapmak ve YAML dosyalarının nerede kullanıldığını kolayca belirlemek için Macbook'umdan kubectl kullanmak istiyorum. Bunu yapmak için bağlamları değiştirmenin basit bir yolu var mı?

Yanıtlar:


237

Yerelden (minikube) gcloud'a ve şunlarla geri dönebilirsiniz:

kubectl config use-context CONTEXT_NAME

tüm bağlamları listelemek için:

kubectl config get-contexts

Local ve gcloud için farklı ortamlar oluşturabilir ve bunları ayrı yaml dosyalarına koyabilirsiniz.


5
Onu kubectl bağlamlarınıza nasıl eklersiniz? Bunu yapmak için bir gcloud komutu var mı? Buldum: $ gcloud kapsayıcı kümeleri kimlik bilgilerini alıyor $ CLUSTER_NAME
Justin Thomas

Yukarıdakiler bana orijinal bağlamı göstermedi, ancak grep 'name:' ~/.kube/configyaptı. Öyleydi minikube, böylece ona geri dönebildimkubectl config use-context minikube
Jordan Morris

10

Daha hızlı bir standart kubectl komutlara kısayol kullanım etmektir kubectx :

  • Bağlamları listeleyin: kubectx
    • Eşittir kubectl config get-contexts
  • İçeriği değiştir (foo'ya): kubectx foo
    • Eşittir kubectl config use-context foo

MacOS'a yüklemek için: brew install kubectx

Kubectx paketi de ad alanlarını değiştirmek için benzer bir araç içerir kubens.

Düzenli olarak birden çok bağlamda ve ad alanında çalışıyorsanız, bu ikisi çok kullanışlıdır.

Daha fazla bilgi: https://ahmet.im/blog/kubectx/


6

Mac için GUI tabanlı bir çözüm arıyorsanız ve Docker Desktop kuruluysa, Docker Menü Çubuğu simgesini kullanabilirsiniz. Burada, kubeconfig'inizde sahip olduğunuz tüm bağlamların bulunduğu "Kubernetes" menüsünü bulabilir ve aralarında kolayca geçiş yapabilirsiniz.


Bu daha çok bir yoruma benziyor ama bir cevap değil.
coderpc

Bu harika bir cevaptır (özellikle gcloud container clusters get-credentials $CLUSTER_NAMEJustin Thomas'ın kabul edilen cevaba yaptığı yorumla birlikte).
thebjorn

3

En son 2020 cevabı burada,

Kubectl bağlamı arasında geçiş yapmanın basit bir yolu,

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

kubectl top nodes --context=context02name

Ayrıca bağlam adını, context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1 gibi ortam olarak da depolayabilirsiniz.


2

TL; DR: Kubernetes bağlamlarını AppleScript aracılığıyla değiştirmek için bir GUI oluşturdum. Shift-cmd-x ile etkinleştiriyorum.

Ben de aynı sorunu yaşadım. Komut satırında ağrı değiştiren bir bağlamdı. Aşağıdaki AppleScript'i çalıştırmak için bir anahtar kombinasyonu (shift-cmd-x) ayarlamak için FastScripts kullandım (bu dizine yerleştirilir: $ (HOME) / Library / Scripts / Applications / Terminal).

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 dosyalarını farklı ortamlar için depolarda klonlamak kesinlikle idealdir. Yapmanız gereken, ortamdan ortama farklılık gösteren parametreleri ayıklayarak YAML dosyalarınızı şablon haline getirmektir.

Elbette, bazı şablon oluşturma motoru kullanabilir ve bir YAML'deki değerleri ayırabilir ve belirli bir ortam için YAML'yi üretebilirsiniz. Ancak Dümen Grafiklerini kullanırsanız bu kolayca yapılabilir . Bazı örnek tablolara göz atmak için bu Github deposundaki kararlı dizine gidin

Wordpress grafiğine bir örnek vermek gerekirse, iki ortam için iki farklı komutunuz olabilir:

Dev için:

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

Bu değerleri CLI üzerinden geçirmek gerekli değildir ancak değerleri aptly adlı bir dosyada saklayabilir ve values.ymlfarklı ortamlar için farklı dosyalara sahip olabilirsiniz.

Dümen haritası standartlarına dönüştürmek için biraz çalışmaya ihtiyacınız olacak, ancak çabaya değecek.


1

Farklı kubernetes ortamlarını (aka kubernetes bağlamları) değiştirme / okuma / manipüle etmenin kanonik cevabı, Mark'ın da bahsettiği gibi kullanmaktır kubectl config, aşağıya bakınız:

$ 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]

Sahnenin arkasında, ~/.kube/configmevcut tüm bağlamları her bağlam için karşılık gelen kimlik bilgileri ve uç noktalarıyla depolayan bir YAML dosyası vardır.

Raftaki Kubectl, muhtemelen zaten bildiğiniz gibi farklı kubernetes bağlamlarını yönetmeyi kolaylaştırmaz. Tüm bunları yönetmek için kendi komut dosyanızı kullanmak yerine, daha iyi bir yaklaşım, kubectxKubernetes / Google Cloud Platform'da bulunan "Ahmet Alp Balkan" adlı bir Google çalışanı tarafından oluşturulan olgun bir araç kullanmaktır . Şiddetle tavsiye ederim.

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

En son (docker 19.03) docker contextkomutunu da kontrol edin .

Ajeet Singh Raina ) bunu göstermektedir " Docker 19.03.0 Ön Release: Hızlı Bağlam Anahtarlama, Köksüz Docker, Sürü Hizmetleri Sysctl destek "

Bağlam Değiştirme

Bağlam, esasen belirli bir kümeye erişmek için kullandığınız yapılandırmadır.

Örneğin, benim özel durumumda, 4 farklı kümem var - yerel ve uzaktan çalışan Swarm ve Kubernetes karışımı.
Masaüstü makinemde çalışan varsayılan bir kümem, Google Cloud Platform üzerinde çalışan 2 düğümlü Swarm Kümesi, Docker oyun alanı ile Play üzerinde çalışan 5 Düğümlü Küme ve Minikube üzerinde çalışan tek düğümlü bir Kubernetes kümesine sahip olduğumu ve kolayca erişmem gerektiğini varsayalım. düzenli olarak.

Docker context CLI kullanarak saniyeler içinde üretim kümesine test etmek için bir kümeden (bu benim geliştirme kümem olabilir) kolayca geçiş yapabilirim.

$ 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.

Örneğin:

[:)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

Farklı bağlamlar arasında geçiş yapmanın basit bir yolunu arıyor olabilirsiniz, belki bu yardımcı olabilir.

Ben tarafından ilham geldi kubectxve kswitchkomut zaten çoğu kullanım senaryoları için tavsiye edebilir, hangi bahsetti. Anahtarlama görevinin çözülmesine yardımcı oluyorlar, ancak bazı daha büyük veya daha az standart konfigürasyonlarda beni kırıyorlar ~/.kube/config. Bu yüzden bir sys-exec çağrı sarmalayıcısı ve kısa bir el oluşturdum kubectl.

Eğer ararsanız k params olmadan bir anahtar bağlamına istemi ele görecekti.

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]:

Dahası, kkısa bir el olarak hareket etmeye devam ediyor. Aşağıdakiler eşdeğerdir:

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

0

Bağlamları listeleyin

kubectl config get-contexts

Bağlamları değiştir

kubectl config set current-contex MY-CONTEXT

0

Tüm bağlamı elde etmek için

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

Güncel bağlamı elde etmek için

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

Bağlamı değiştirmek için

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

-1

evet, bence sorduğun şey bu. Mevcut yapılandırmanızı görüntülemek için kubectl yapılandırma görünümünü kullanın. kubectl, aşağıdaki konumlardan yapılandırmayı yükler ve birleştirir (sırayla)

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

--kubeconfig kullanıyorum çünkü çok sayıda küme arasında geçiş yapıyorum. biraz hantal ama iyi çalışıyor.

daha fazla bilgi için bunlara bakın. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ ve https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/


Kullanıcının Kubectl için birden çok yapılandırmanın nasıl kullanılacağını sorduğunu sanmıyorum Soru, Yaml kodunun birden çok ortamda nasıl kullanılacağıyla ilgili
Vishal Biyani
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.