Cách chuyển các cụm kubectl giữa gcloud và minikube


124

Tôi có Kubernetes hoạt động tốt trong hai môi trường khác nhau, cụ thể là trong môi trường cục bộ của tôi (MacBook chạy minikube) và cũng như trên Công cụ chứa của Google (GCE, Kubernetes trên Google Cloud). Tôi sử dụng MacBook / môi trường cục bộ để phát triển và kiểm tra các tệp YAML của mình và sau đó, sau khi hoàn thành, hãy thử chúng trên GCE.

Hiện tại, tôi cần làm việc với từng môi trường riêng lẻ: Tôi cần chỉnh sửa tệp YAML trong môi trường cục bộ của mình và khi sẵn sàng, (git) sao chép chúng sang môi trường GCE và sau đó sử dụng / triển khai chúng. Đây là một quá trình hơi rườm rà.

Tốt nhất, tôi muốn sử dụng kubectl từ Macbook của mình để dễ dàng chuyển đổi giữa các môi trường minikube cục bộ hoặc GCE Kubernetes và để dễ dàng xác định vị trí các tệp YAML được sử dụng. Có cách nào đơn giản để chuyển đổi ngữ cảnh để làm điều này không?

Câu trả lời:


236

Bạn có thể chuyển từ cục bộ (minikube) sang gcloud và quay lại bằng:

kubectl config use-context CONTEXT_NAME

để liệt kê tất cả các ngữ cảnh:

kubectl config get-contexts

Bạn có thể tạo các môi trường khác nhau cho local và gcloud và đặt nó trong các tệp yaml riêng biệt.


5
Làm cách nào để bạn thêm nó vào ngữ cảnh kubectl của mình? Có lệnh gcloud đến để làm điều đó không? Đã tìm thấy: $ gcloud container cluster cluster get-credentials $ CLUSTER_NAME
Justin Thomas

Ở trên không cho tôi thấy bối cảnh ban đầu, nhưng grep 'name:' ~/.kube/configđã làm. Đó là minikube, vì vậy tôi có thể quay lại nó vớikubectl config use-context minikube
Jordan Morris

10

Một phím tắt nhanh hơn cho các lệnh kubectl tiêu chuẩn là sử dụng kubectx :

  • Liệt kê các bối cảnh: kubectx
    • Tương đương với kubectl config get-contexts
  • Chuyển ngữ cảnh (sang foo): kubectx foo
    • Tương đương với kubectl config use-context foo

Để cài đặt trên macOS: brew install kubectx

Gói kubectx cũng bao gồm một công cụ tương tự để chuyển đổi không gian tên được gọi kubens.

Hai cái này siêu tiện lợi nếu bạn làm việc trong nhiều bối cảnh và không gian tên thường xuyên.

Thông tin thêm: https://ahmet.im/blog/kubectx/


6

Nếu bạn đang tìm kiếm một giải pháp dựa trên GUI cho Mac và đã cài đặt Docker Desktop, bạn có thể sử dụng biểu tượng Docker Menu Bar. Tại đây, bạn có thể tìm thấy menu "Kubernetes" với tất cả các ngữ cảnh bạn có trong kubeconfig của mình và dễ dàng chuyển đổi giữa chúng.


Điều này xuất hiện giống như một bình luận nhưng không phải là một câu trả lời.
coderpc

Đây là một câu trả lời tuyệt vời (đặc biệt là kết hợp với gcloud container clusters get-credentials $CLUSTER_NAMEtừ bình luận của Justin Thomas đến câu trả lời được chấp nhận).
thebjorn

3

Câu trả lời mới nhất năm 2020 là ở đây,

Một cách đơn giản để chuyển đổi giữa ngữ cảnh kubectl,

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

kubectl top nodes --context=context02name

Bạn cũng có thể lưu trữ tên ngữ cảnh dưới dạng env như context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1


2

TL; DR: Tôi đã tạo GUI để chuyển đổi ngữ cảnh Kubernetes qua AppleScript. Tôi kích hoạt nó qua shift-cmd-x.

Tôi cũng có cùng một vấn đề. Đó là một khó khăn khi chuyển đổi bối cảnh bằng dòng lệnh. Tôi đã sử dụng FastScripts để đặt tổ hợp phím (shift-cmd-x) để chạy AppleScript sau (được đặt trong thư mục này: $ (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

Sao chép các tệp YAML trên các kho lưu trữ cho các môi trường khác nhau chắc chắn là lý tưởng. Việc bạn cần làm là tạo khuôn mẫu các tệp YAML của mình - bằng cách trích xuất các thông số khác nhau giữa các môi trường.

Tất nhiên, bạn có thể sử dụng một số công cụ tạo khuôn mẫu và tách các giá trị trong một YAML và tạo ra YAML cho một môi trường cụ thể. Nhưng điều này có thể dễ dàng thực hiện được nếu bạn áp dụng Biểu đồ Helm . Để xem một số biểu đồ mẫu, hãy truy cập thư mục ổn định tại repo Github này

Để lấy một ví dụ về biểu đồ Wordpress , bạn có thể có hai lệnh khác nhau cho hai môi trường:

Đối với nhà phát triển:

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

Tuy nhiên, không cần thiết phải chuyển các giá trị này trên CLI, bạn có thể lưu trữ các giá trị trong một tệp có tên aptly values.ymlvà bạn có thể có các tệp khác nhau cho các môi trường khác nhau

Bạn sẽ cần một số công việc để chuyển đổi sang các tiêu chuẩn biểu đồ Helm, nhưng nỗ lực sẽ xứng đáng.


1

Như Mark đã đề cập, câu trả lời chính tắc của việc chuyển đổi / đọc / thao tác với các môi trường kubernetes khác nhau (hay còn gọi là ngữ cảnh kubernetes), như Mark đã đề cập, là sử dụng 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]

Đằng sau cảnh, có một ~/.kube/configtệp YAML lưu trữ tất cả các ngữ cảnh có sẵn với thông tin xác thực và điểm cuối tương ứng của chúng cho từng ngữ cảnh.

Kubectl ra mắt không giúp bạn dễ dàng quản lý các bối cảnh kubernetes khác nhau như bạn có thể đã biết. Thay vì sử dụng tập lệnh của riêng bạn để quản lý tất cả những điều đó, một cách tiếp cận tốt hơn là sử dụng một công cụ dành cho người lớn được gọi là kubectx, được tạo bởi một nhân viên Google tên là "Ahmet Alp Balkan", người của Kubernetes / nhà phát triển Google Cloud Platform trải nghiệm Nhóm xây dựng công cụ như thế này. Tôi khuyên bạn nên nó.

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

Kiểm tra cũng là (Docker 19.03) mới nhất docker contextlệnh .

Ajeet Singh Raina ) minh họa điều đó trong " Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services "

Chuyển đổi ngữ cảnh

Ngữ cảnh về cơ bản là cấu hình mà bạn sử dụng để truy cập một cụm cụ thể.

Ví dụ, trong trường hợp cụ thể của tôi, tôi có 4 cụm khác nhau - kết hợp giữa Swarm và Kubernetes chạy cục bộ và từ xa.
Giả sử rằng tôi có một cụm mặc định đang chạy trên máy Desktop của mình, Cụm Swarm 2 nút chạy trên Google Cloud Platform, Cụm 5 nút chạy trên sân chơi Play with Docker và một cụm Kubernetes một nút chạy trên Minikube và tôi cần phải truy cập khá thường xuyên.

Sử dụng docker context CLI, tôi có thể dễ dàng chuyển từ một cụm (có thể là cụm phát triển của tôi) để thử nghiệm sang cụm sản xuất trong vài giây.

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

Ví dụ:

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

Trong trường hợp bạn có thể đang tìm kiếm một cách đơn giản để chuyển đổi giữa các ngữ cảnh khác nhau, có thể điều này sẽ hữu ích.

Tôi lấy cảm hứng từ kubectxkswitchcác tập lệnh đã được đề cập, mà tôi có thể đề xuất cho hầu hết các trường hợp sử dụng. Họ đang giúp giải quyết nhiệm vụ chuyển đổi, nhưng đang phá vỡ đối với tôi trên một số cấu hình tiêu chuẩn lớn hơn hoặc ít hơn ~/.kube/config. Vì vậy, tôi đã tạo một trình bao bọc lời gọi sys-execute và một bản tóm tắt xung quanh kubectl.

Nếu bạn gọi k mà không có tham số, bạn sẽ thấy một lời nhắc bị chặn để chuyển ngữ cảnh.

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

Xa hơn, ktiếp tục hoạt động như một tay ngắn. Sau đây là tương đương:

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

0

Liệt kê các bối cảnh

kubectl config get-contexts

Chuyển đổi ngữ cảnh

kubectl config set current-contex MY-CONTEXT

0

Để có được tất cả ngữ cảnh

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

Để có được bối cảnh hiện tại

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

Để chuyển đổi ngữ cảnh

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

-1

vâng, tôi nghĩ đây là những gì bạn yêu cầu về. Để xem cấu hình hiện tại của bạn, hãy sử dụng chế độ xem cấu hình kubectl. kubectl tải và hợp nhất cấu hình từ các vị trí sau (theo thứ tự)

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

tôi sử dụng --kubeconfig vì tôi chuyển đổi rất nhiều giữa nhiều cụm. nó hơi cồng kềnh nhưng nó hoạt động tốt.

xem những cái này để biết thêm thông tin. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/https://kubernetes.io/docs/concept/cluster-administration/authenticate-across-clusters-kubeconfig/


Tôi không tink người dùng sẽ được hỏi về làm thế nào để sử dụng nhiều configs cho Kubectl Câu hỏi đặt ra là khoảng cách sử dụng mã YAML trên nhiều môi trường
Vishal Biyani
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.