Cara mengganti kluster kubectl antara gcloud dan minikube


124

Saya memiliki Kubernetes yang bekerja dengan baik di dua lingkungan yang berbeda, yaitu di lingkungan lokal saya (MacBook menjalankan minikube) dan juga di Google Container Engine (GCE, Kubernetes di Google Cloud). Saya menggunakan MacBook / lingkungan lokal untuk mengembangkan dan menguji file YAML saya dan kemudian, setelah selesai, mencobanya di GCE.

Saat ini saya perlu bekerja dengan setiap lingkungan secara individual: Saya perlu mengedit file YAML di lingkungan lokal saya dan, jika siap, (git) mengkloningnya ke lingkungan GCE dan kemudian menggunakan / menerapkannya. Ini adalah proses yang agak rumit.

Idealnya, saya ingin menggunakan kubectl dari Macbook saya untuk dengan mudah beralih antara lingkungan minikube lokal atau GCE Kubernetes dan untuk dengan mudah menentukan di mana file YAML digunakan. Adakah cara sederhana untuk mengganti konteks untuk melakukan ini?

Jawaban:


236

Anda dapat beralih dari lokal (minikube) ke gcloud dan kembali dengan:

kubectl config use-context CONTEXT_NAME

untuk mendaftar semua konteks:

kubectl config get-contexts

Anda dapat membuat lingkungan yang berbeda untuk local dan gcloud dan meletakkannya di file yaml terpisah.


5
Bagaimana Anda menambahkannya ke konteks kubectl Anda? Apakah ada perintah gcloud untuk melakukannya? Ketemu: $ gcloud cluster container get-credentials $ CLUSTER_NAME
Justin Thomas

Di atas tidak menunjukkan konteks aslinya, tetapi menunjukkan grep 'name:' ~/.kube/config. Itu minikube, jadi saya bisa beralih kembali ke itu dengankubectl config use-context minikube
Jordan Morris

10

Jalan pintas yang lebih cepat ke perintah kubectl standar adalah dengan menggunakan kubectx :

  • Buat daftar konteks: kubectx
    • Setara dengan kubectl config get-contexts
  • Ganti konteks (ke foo): kubectx foo
    • Setara dengan kubectl config use-context foo

Untuk menginstal di macOS: brew install kubectx

Paket kubectx juga menyertakan alat serupa untuk berpindah namespace yang disebut kubens.

Keduanya sangat nyaman jika Anda bekerja dalam berbagai konteks dan ruang nama secara teratur.

Info lebih lanjut: https://ahmet.im/blog/kubectx/


6

Jika Anda mencari solusi berbasis GUI untuk Mac dan menginstal Docker Desktop, Anda dapat menggunakan ikon Menu Bar Docker. Di sini Anda dapat menemukan menu "Kubernetes" dengan semua konteks yang Anda miliki di kubeconfig dan dengan mudah beralih di antaranya.


Ini lebih seperti sebuah komentar tetapi bukan sebuah jawaban.
coderpc

Ini adalah jawaban yang bagus (terutama digabungkan dengan gcloud container clusters get-credentials $CLUSTER_NAMEkomentar dari Justin Thomas hingga jawaban yang diterima).
thebjorn

3

Jawaban terbaru 2020 ada di sini,

Cara sederhana untuk beralih di antara konteks kubectl,

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

kubectl top nodes --context=context02name

Anda juga dapat menyimpan nama konteks sebagai env seperti context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1


2

TL; DR: Saya membuat GUI untuk mengganti konteks Kubernetes melalui AppleScript. Saya mengaktifkannya melalui shift-cmd-x.

Saya juga memiliki masalah yang sama. Itu adalah konteks pengalihan rasa sakit oleh baris perintah. Saya menggunakan FastScripts untuk mengatur kombo kunci (shift-cmd-x) untuk menjalankan AppleScript berikut (ditempatkan di direktori ini: $ (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

Mengkloning file YAML di repo untuk lingkungan yang berbeda sangatlah ideal. Yang harus Anda lakukan adalah membuat template file YAML Anda - dengan mengekstrak parameter yang berbeda dari lingkungan ke lingkungan.

Anda tentu saja dapat menggunakan beberapa mesin template dan memisahkan nilai dalam sebuah YAML dan menghasilkan YAML untuk lingkungan tertentu. Tapi ini mudah dilakukan jika Anda mengadopsi Diagram Helm . Untuk melihat beberapa bagan contoh, buka direktori stabil di repo Github ini

Untuk mengambil contoh bagan Wordpress , Anda dapat memiliki dua perintah berbeda untuk dua lingkungan:

Untuk Dev:

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

Tidak perlu meneruskan nilai-nilai ini pada CLI, Anda dapat menyimpan nilai dalam sebuah file bernama aptly values.ymldan Anda dapat memiliki file yang berbeda untuk lingkungan yang berbeda.

Anda akan membutuhkan usaha untuk mengubah ke standar bagan Helm, tetapi usaha itu akan sia-sia.


1

Jawaban kanonik untuk beralih / membaca / memanipulasi lingkungan kubernetes yang berbeda (alias konteks kubernetes) adalah, seperti yang disebutkan Mark, untuk digunakan kubectl config, lihat di bawah ini:

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

Di balik layar, ada ~/.kube/configfile YAML yang menyimpan semua konteks yang tersedia dengan kredensial dan endpoint yang sesuai untuk setiap konteks.

Kubectl off the shelf tidak membuatnya mudah untuk mengelola konteks kubernetes yang berbeda seperti yang mungkin sudah Anda ketahui. Daripada memutar skrip Anda sendiri untuk mengelola semua itu, pendekatan yang lebih baik adalah dengan menggunakan fitur dewasa yang disebut kubectx, dibuat oleh Googler bernama "Ahmet Alp Balkan" yang berada di Kubernetes / Google Cloud Platform developer, mengalami Tim yang membuat fitur seperti ini. Saya sangat merekomendasikannya.

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

Periksa juga terbaru (buruh pelabuhan 19,03) docker contextperintah .

Ajeet Singh Raina ) mengilustrasikannya dalam " Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services "

Pengalihan Konteks

Konteks pada dasarnya adalah konfigurasi yang Anda gunakan untuk mengakses cluster tertentu.

Katakanlah, misalnya, dalam kasus khusus saya, saya memiliki 4 cluster berbeda - campuran Swarm dan Kubernetes yang berjalan secara lokal dan jarak jauh.
Asumsikan bahwa saya memiliki cluster default yang berjalan di mesin Desktop saya, 2 node Swarm Cluster yang berjalan di Google Cloud Platform, 5-Node Cluster berjalan di Play dengan Docker playground dan cluster Kubernetes node tunggal yang berjalan di Minikube dan saya perlu mengaksesnya secara teratur.

Menggunakan CLI konteks buruh pelabuhan Saya dapat dengan mudah beralih dari satu cluster (yang bisa menjadi cluster pengembangan saya) untuk menguji ke cluster produksi dalam hitungan detik.

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

Sebagai contoh:

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

Jika Anda mungkin mencari cara sederhana untuk beralih di antara konteks yang berbeda mungkin ini akan membantu.

Saya terinspirasi oleh kubectxdan kswitchskrip telah disebutkan, yang dapat saya rekomendasikan untuk sebagian besar kasus penggunaan. Mereka membantu menyelesaikan tugas pengalihan, tetapi melanggar beberapa konfigurasi standar yang lebih besar atau kurang dari ~/.kube/config. Jadi saya membuat pembungkus permintaan sys-exec dan short-hand kubectl.

Jika Anda memanggil k tanpa params, Anda akan melihat prompt dicegat untuk beralih konteks.

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

Selanjutnya, kterus bertindak sebagai tangan pendek. Berikut ini setara:

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

0

Buat daftar konteks

kubectl config get-contexts

Ganti konteks

kubectl config set current-contex MY-CONTEXT

0

Untuk mendapatkan semua konteks

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

Untuk mendapatkan konteks saat ini

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

Untuk mengganti konteks

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

-1

ya, saya pikir ini yang Anda tanyakan. Untuk melihat konfigurasi Anda saat ini, gunakan kubectl config view. kubectl memuat dan menggabungkan konfigurasi dari lokasi berikut (secara berurutan)

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

saya menggunakan --kubeconfig karena saya beralih banyak di antara beberapa cluster. itu sedikit rumit tetapi bekerja dengan baik.

lihat ini untuk info lebih lanjut. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ dan https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/


Saya tidak berpikir bahwa pengguna bertanya tentang bagaimana menggunakan beberapa konfigurasi untuk Kubectl. Pertanyaannya adalah tentang bagaimana menggunakan kode Yaml di berbagai lingkungan
Vishal Biyani
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.