วิธีสลับคลัสเตอร์ kubectl ระหว่าง gcloud และ minikube


124

ฉันมี Kubernetes ทำงานได้ดีในสองสภาพแวดล้อมที่แตกต่างกันคือในสภาพแวดล้อมท้องถิ่นของฉัน (MacBook ที่ใช้ minikube) และใน Container Engine ของ Google (GCE, Kubernetes บน Google Cloud) ฉันใช้ MacBook / สภาพแวดล้อมในพื้นที่เพื่อพัฒนาและทดสอบไฟล์ YAML ของฉันจากนั้นเมื่อเสร็จสิ้นให้ลองใช้ GCE

ขณะนี้ฉันจำเป็นต้องทำงานกับแต่ละสภาพแวดล้อมทีละรายการ: ฉันต้องการแก้ไขไฟล์ YAML ในสภาพแวดล้อมภายในเครื่องของฉันและเมื่อพร้อมแล้ว (git) จะโคลนไฟล์เหล่านั้นไปยังสภาพแวดล้อม GCE จากนั้นจึงใช้ / ปรับใช้ นี่เป็นกระบวนการที่ค่อนข้างยุ่งยาก

ตามหลักการแล้วฉันต้องการใช้ kubectl จาก Macbook ของฉันเพื่อสลับไปมาระหว่างสภาพแวดล้อม minikube หรือ GCE Kubernetes ในพื้นที่ได้อย่างง่ายดายและเพื่อกำหนดตำแหน่งที่จะใช้ไฟล์ YAML ได้อย่างง่ายดาย มีวิธีง่ายๆในการสลับบริบทเพื่อทำสิ่งนี้หรือไม่?

คำตอบ:


237

คุณสามารถเปลี่ยนจาก local (minikube) เป็น gcloud และย้อนกลับด้วย:

kubectl config use-context CONTEXT_NAME

เพื่อแสดงรายการบริบททั้งหมด:

kubectl config get-contexts

คุณสามารถสร้างสภาพแวดล้อมที่แตกต่างกันสำหรับโลคัลและ gcloud และวางไว้ในไฟล์ yaml แยกกัน


5
คุณจะเพิ่มลงในบริบท kubectl ของคุณได้อย่างไร? มีคำสั่ง gcloud มาให้ทำหรือไม่? พบแล้ว: คลัสเตอร์คอนเทนเนอร์ $ gcloud ได้รับข้อมูลรับรอง $ CLUSTER_NAME
Justin Thomas

ข้างต้นไม่ได้แสดงให้ฉันเห็นบริบทดั้งเดิม แต่เป็นgrep 'name:' ~/.kube/configเช่นนั้น มันเป็นminikubeดังนั้นฉันสามารถเปลี่ยนกลับไปด้วยkubectl config use-context minikube
จอร์แดนมอร์ริส

10

ทางลัดที่เร็วกว่าสำหรับคำสั่ง kubectl มาตรฐานคือการใช้kubectx :

  • บริบทรายการ: kubectx
    • เทียบเท่ากับ kubectl config get-contexts
  • เปลี่ยนบริบท (เป็น foo): kubectx foo
    • เทียบเท่ากับ kubectl config use-context foo

ในการติดตั้งบน macOS: brew install kubectx

แพคเกจ kubectx นี้ยังรวมถึงเครื่องมือที่คล้ายกันสำหรับ namespaces kubensเปลี่ยนเรียกว่า

สองสิ่งนี้สะดวกมากหากคุณทำงานในหลายบริบทและเนมสเปซเป็นประจำ

ข้อมูลเพิ่มเติม: https://ahmet.im/blog/kubectx/


6

หากคุณกำลังมองหาโซลูชันที่ใช้ GUI สำหรับ Mac และติดตั้ง Docker Desktop ไว้คุณสามารถใช้ไอคอน Docker Menu Bar ได้ ที่นี่คุณจะพบเมนู "Kubernetes" พร้อมบริบททั้งหมดที่คุณมีใน kubeconfig และสลับไปมาได้อย่างง่ายดาย


สิ่งนี้ดูเหมือนมากกว่าความคิดเห็น แต่ไม่ใช่คำตอบ
coderpc

นี่เป็นคำตอบที่ดี (โดยเฉพาะเมื่อรวมกับgcloud container clusters get-credentials $CLUSTER_NAMEความคิดเห็นของ Justin Thomas ต่อคำตอบที่ยอมรับ)
thebjorn

3

คำตอบล่าสุดในปี 2020 อยู่ที่นี่

วิธีง่ายๆในการสลับระหว่างบริบท kubectl

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

kubectl top nodes --context=context02name

คุณยังสามารถจัดเก็บชื่อบริบทเป็น env เช่น context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1


2

TL; DR: ฉันสร้าง GUI เพื่อสลับบริบท Kubernetes ผ่าน AppleScript ฉันเปิดใช้งานผ่าน shift-cmd-x

ฉันก็มีปัญหาเดียวกันเช่นกัน มันเป็นความเจ็บปวดในการเปลี่ยนบริบทโดยใช้บรรทัดคำสั่ง ฉันใช้ FastScripts เพื่อตั้งค่าคำสั่งผสมคีย์ (shift-cmd-x) เพื่อเรียกใช้ AppleScript ต่อไปนี้ (อยู่ในไดเรกทอรีนี้: $ (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 ข้าม repos สำหรับสภาพแวดล้อมที่แตกต่างกันนั้นเหมาะอย่างยิ่ง สิ่งที่คุณต้องทำคือทำให้ไฟล์ YAML ของคุณเป็นเทมเพลตโดยแยกพารามิเตอร์ที่แตกต่างกันไปในแต่ละสภาพแวดล้อม

แน่นอนคุณสามารถใช้เครื่องมือสร้างเทมเพลตและแยกค่าใน YAML และสร้าง YAML สำหรับสภาพแวดล้อมเฉพาะ แต่นี้เป็นไปได้อย่างง่ายดายถ้าคุณนำมาใช้แผนภูมิพวงมาลัย หากต้องการดูแผนภูมิตัวอย่างบางส่วนให้ไปที่ไดเร็กทอรีที่เสถียรที่repo Githubนี้

ในการยกตัวอย่างแผนภูมิ Wordpressคุณสามารถมีคำสั่งที่แตกต่างกันสองคำสั่งสำหรับสองสภาพแวดล้อม:

สำหรับ Dev:

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

ไม่จำเป็นต้องส่งผ่านค่าเหล่านี้ไปยัง CLI แต่คุณสามารถเก็บค่าไว้ในไฟล์ที่เรียกว่า aptly values.ymlและคุณอาจมีไฟล์ที่แตกต่างกันสำหรับสภาพแวดล้อมที่แตกต่างกัน

คุณจะต้องทำงานบางอย่างในการแปลงเป็นมาตรฐานแผนภูมิ Helm แต่ความพยายามจะคุ้มค่า


1

คำตอบที่เป็นที่ยอมรับของการสลับ / การอ่าน / การจัดการสภาพแวดล้อม kubernetes ที่แตกต่างกัน (aka kubernetes contexts) คือตามที่ Mark กล่าวถึงเพื่อใช้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/configไฟล์ YAML ที่เก็บบริบทที่มีอยู่ทั้งหมดพร้อมข้อมูลรับรองและจุดสิ้นสุดที่สอดคล้องกันสำหรับแต่ละบริบท

Kubectl ออกจากชั้นวางไม่ได้ทำให้ง่ายต่อการจัดการบริบท kubernetes ที่แตกต่างกันอย่างที่คุณทราบอยู่แล้ว วิธีที่ดีกว่าคือการใช้เครื่องมือสำหรับผู้ใหญ่ที่เรียกว่าkubectx"Ahmet Alp Balkan" ซึ่งเป็นทีมพัฒนา Kubernetes / Google Cloud Platform ซึ่งเป็นผู้พัฒนา Kubernetes / Google Cloud Platform ซึ่งเป็นทีมที่สร้างเครื่องมือเช่นนี้ ฉันขอแนะนำอย่างยิ่ง

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 contextคำสั่งล่าสุด (นักเทียบท่า 19.03) ด้วย

Ajeet Singh Raina ) แสดงใน " Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services "

การสลับบริบท

บริบทโดยพื้นฐานแล้วคือการกำหนดค่าที่คุณใช้เพื่อเข้าถึงคลัสเตอร์เฉพาะ

ตัวอย่างเช่นในกรณีเฉพาะของฉันฉันมี 4 คลัสเตอร์ที่แตกต่างกัน - การผสมผสานระหว่าง Swarm และ Kubernetes ที่ทำงานในพื้นที่และจากระยะไกล
สมมติว่าฉันมีคลัสเตอร์เริ่มต้นที่ทำงานบนเครื่องเดสก์ท็อปของฉัน 2 โหนด Swarm Cluster ที่ทำงานบน Google Cloud Platform คลัสเตอร์ 5 โหนดที่ทำงานบน Play with Docker playground และคลัสเตอร์ Kubernetes โหนดเดียวที่ทำงานบน Minikube และฉันต้องเข้าถึงได้สวย สม่ำเสมอ

การใช้คลัสเตอร์บริบทของนักเทียบท่าฉันสามารถเปลี่ยนจากคลัสเตอร์หนึ่ง (ซึ่งอาจเป็นคลัสเตอร์การพัฒนาของฉัน) เพื่อทดสอบเป็นคลัสเตอร์การผลิตในไม่กี่วินาที

$ 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เสื้อคลุมภาวนาและรอบสั้นมือ

หากคุณเรียกkโดยไม่มีพารามิเตอร์คุณจะเห็นข้อความแจ้งการดักฟังเพื่อเปลี่ยนบริบท

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 kubectl โหลดและผสาน config จากตำแหน่งต่อไปนี้ (ตามลำดับ)

--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/


ฉันไม่คิดว่าผู้ใช้จะถามเกี่ยวกับวิธีใช้การกำหนดค่าหลายรายการสำหรับ Kubectl คำถามคือเกี่ยวกับวิธีการใช้รหัส Yaml ในหลายสภาพแวดล้อม
Vishal Biyani
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.