Saya telah Kubernetes bekerja dengan baik di dua lingkungan yang berbeda, yaitu di lingkungan setempat (MacBook berjalan minikube) dan juga di Google's Kontainer Mesin (GCE, Kubernetes di Google Cloud). Saya menggunakan MacBook/lingkungan setempat untuk mengembangkan dan menguji file YAML dan kemudian, setelah selesai, coba mereka di GCE.
Saat ini saya perlu untuk bekerja dengan lingkungan masing-masing secara individual: saya perlu mengedit file YAML dalam lingkungan lokal dan, ketika siap, (git) klon mereka untuk GCE lingkungan dan kemudian menggunakan/menyebarkan mereka. Ini adalah agak rumit proses.
Idealnya, saya ingin menggunakan kubectl dari Macbook saya untuk dengan mudah beralih di antara lokal minikube atau GCE Kubernetes lingkungan dan untuk dengan mudah menentukan di mana file YAML yang digunakan. Ada cara sederhana untuk beralih konteks untuk melakukan hal ini?
Anda dapat beralih dari lokal (minikube) untuk gcloud dan kembali dengan:
kubectl config menggunakan konteks CONTEXT_NAME
untuk daftar semua konteks:
kubectl config mendapatkan-konteks
Anda dapat membuat enviroments berbeda untuk lokal dan gcloud dan memasukkannya ke dalam memisahkan file yaml.
Jika anda'kembali mencari GUI berbasis solusi untuk Mac dan memiliki Docker Desktop diinstal, anda dapat menggunakan Docker Menu Bar icon. Di sini anda dapat menemukan "Kubernetes" menu dengan semua konteks yang anda miliki di anda kubeconfig dan mudah beralih di antara mereka.
Lebih cepat shortcut untuk standar kubectl perintah adalah dengan menggunakan kubectx:
kubectx
kubectl config mendapatkan-konteks
kubectx foo
kubectl config menggunakan konteks foo
Untuk install di macOS: brew install kubectx
Yang kubectx paket ini juga termasuk alat serupa untuk beralih namespaces yang disebut kubens
.
Kedua adalah super nyaman jika anda bekerja dalam berbagai konteks dan namespaces secara teratur.
Info lebih lanjut: https://ahmet.im/blog/kubectx/
TL;DR: saya membuat sebuah GUI untuk beralih Kubernetes konteks melalui AppleScript. Saya mengaktifkannya melalui pergeseran-cmd-x.
Saya juga punya masalah yang sama. Itu adalah rasa sakit switching konteks dengan command line. Aku digunakan FastScripts untuk mengatur kombinasi tombol (shift-cmd-x) untuk menjalankan berikut AppleScript (ditempatkan dalam direktori ini: $(HOME)/Perpustakaan/Script/Aplikasi/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
Kloning file YAML di repos untuk lingkungan yang berbeda pasti ideal. Apa yang anda lakukan adalah templatize anda file YAML - dengan mengekstrak parameter yang berbeda dari lingkungan ke lingkungan.
Anda dapat, tentu saja, menggunakan beberapa template engine dan memisahkan nilai-nilai dalam YAML dan menghasilkan YAML untuk lingkungan tertentu. Tapi ini dapat dilakukan dengan mudah jika anda mengadopsi Helm Grafik. Untuk melihat beberapa contoh grafik pergi ke stabil direktori saat ini Github repo
Untuk mengambil contoh dari Wordpress grafik, anda bisa memiliki dua perintah yang berbeda untuk dua lingkungan:
Untuk Dev:
helm menginstal-nama dev-rilis-set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stabil/wordpress
Hal ini tidak perlu untuk lulus nilai-nilai ini pada CLI meskipun, anda dapat menyimpan nilai-nilai dalam sebuah file yang bernama aptly nilai-nilai.yml
dan anda bisa memiliki file yang berbeda untuk lingkungan yang berbeda
Anda akan memerlukan beberapa pekerjaan di konversi ke grafik Helm standar, namun upaya akan sia-sia.
Periksa juga terbaru (docker 19.03) docker konteks perintah
.
Ajeet Singh Raina ) menggambarkan hal ini di "Docker 19.03.0 Pra-Rilis: Cepat Context Switching, tak Menentu Docker, Sysctl dukungan untuk Segerombolan Jasa"
konteks pada dasarnya adalah konfigurasi yang anda gunakan untuk mengakses satu rumpun tertentu.
Katakanlah, misalnya, dalam kasus tertentu, saya memiliki 4 cluster yang berbeda – campuran Swarm dan Kubernetes berjalan secara lokal dan jarak jauh. Asumsikan bahwa saya memiliki gugus default yang berjalan pada Desktop saya mesin , 2 node Segerombolan Cluster yang berjalan pada Google Cloud Platform, 5-Node Cluster yang berjalan pada Bermain dengan Docker bermain dan single-node Kubernetes cluster yang berjalan pada Minikube dan bahwa saya perlu untuk akses yang cukup secara teratur.
Menggunakan docker konteks CLI saya dapat dengan mudah beralih dari satu cluster(yang bisa saya pengembangan klaster) untuk menguji untuk 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.
Misalnya:
[:)Kapten'sBay=>sudo docker konteks ls NAMA KETERANGAN DOCKER AKHIR KUBERNETES AKHIR ORCHESTRATOR default * Saat ini DOCKER_HOST berdasarkan konfigurasi unix:///var/run/docker.kaus kaki https://127.0.0.1:16443 (default) swarm swarm-context1
Dalam hal ini anda mungkin akan mencari cara sederhana untuk beralih antara konteks yang berbeda mungkin ini akan bisa membantu.
Aku terinspirasi oleh kubectx
dan kswitch
script yang sudah disebutkan, yang bisa saya sarankan untuk menggunakan sebagian besar kasus. Mereka membantu dengan pemecahan beralih tugas, tapi yang melanggar untuk saya pada beberapa lebih atau kurang standar konfigurasi ~/.kube/config
. Jadi saya membuat sebuah sys-exec doa wrapper dan tangan pendek sekitar kubectl
.
Jika anda menelepon k tanpa params anda akan melihat dicegat prompt 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, k
terus bertindak sebagai tangan pendek. Berikut adalah ekuivalen:
kubectl get pods --all-namespaces
k get pods -A
k p -A
Aku bosan mengetik selama ini jadi saya menulis sebuah bash sederhana utilitas untuk beralih konteks
Anda dapat menemukannya di sini https://github.com/josefkorbel/kube-switch
Kanonik jawaban switching/membaca/memanipulasi berbeda kubernetes lingkungan (alias kubernetes konteks), sebagai Tanda yang disebutkan, untuk menggunakan 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]
Behind the scene, ada ~/.kube/config
YAML file yang menyimpan semua tersedia dengan konteks mereka sesuai mandat dan titik akhir untuk masing-masing konteks.
Kubectl dari rak doesn't membuatnya mudah untuk mengelola berbagai kubernetes konteks seperti yang anda mungkin sudah tahu. Daripada bergulir script sendiri untuk mengelola semua itu, pendekatan yang lebih baik adalah dengan menggunakan matang alat yang disebut kubectx
, yang dibuat oleh seorang karyawan google yang bernama "Ahmet Alp Balkan" yang's pada Kubernetes / Google Cloud Platform pengembang pengalaman Tim yang membangun perkakas seperti ini. Saya sangat merekomendasikan hal ini.
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
ya, saya pikir ini adalah apa yang anda tanyakan. Untuk melihat anda saat ini config, gunakan kubectl config lihat. kubectl beban dan menyatu config dari lokasi berikut (dalam urutan)
--kubeconfig=/path/to/.kube/config command line flag
KUBECONFIG=/path/to/.kube/config env variable
$HOME/.kube/config - The DEFAULT
saya gunakan --kubeconfig sejak saya beralih alot antara beberapa kelompok. sedikit rumit tapi itu bekerja dengan baik.
melihat 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/