簡體   English   中英

如何在 gcloud 和 minikube 之間切換 kubectl 集群

[英]How to switch kubectl clusters between gcloud and minikube

我讓 Kubernetes 在兩種不同的環境中運行良好,即在我的本地環境(運行 minikube 的 MacBook)和 Google 的容器引擎(GCE,Google Cloud 上的 Kubernetes)上。 我使用 MacBook/本地環境來開發和測試我的 YAML 文件,然后在完成后在 GCE 上試用它們。

目前我需要單獨處理每個環境:我需要在本地環境中編輯 YAML 文件,准備好后,(git) 將它們克隆到 GCE 環境,然后使用/部署它們。 這是一個有些麻煩的過程。

理想情況下,我想在我的 Macbook 上使用 kubectl 在本地 minikube 或 GCE Kubernetes 環境之間輕松切換,並輕松確定 YAML 文件的使用位置。 有沒有一種簡單的方法來切換上下文來做到這一點?

您可以從本地(minikube)切換到 gcloud 並返回:

kubectl config use-context CONTEXT_NAME

列出所有上下文:

kubectl config get-contexts

您可以為本地和 gcloud 創建不同的環境,並將其放在單獨的 yaml 文件中。

列出上下文

kubectl config get-contexts

切換上下文

kubectl config set current-context MY-CONTEXT

標准 kubectl 命令的更快快捷方式是使用kubectx

  • 列出上下文: kubectx
    • 相當於kubectl config get-contexts
  • 切換上下文(到 foo): kubectx foo
    • 相當於kubectl config use-context foo

在 macOS 上安裝: brew install kubectx

kubectx 包還包括一個名為kubens的類似工具,用於切換命名空間。

如果您經常在多個上下文和命名空間中工作,這兩個非常方便。

更多信息: https ://ahmet.im/blog/kubectx/

如果您正在尋找適用於 Mac 的基於 GUI 的解決方案並安裝了 Docker Desktop,則可以使用 Docker 菜單欄圖標。 在這里,您可以找到“Kubernetes”菜單,其中包含您在 kubeconfig 中擁有的所有上下文,並可以在它們之間輕松切換。

獲取所有上下文

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>

2020年最新答案在這里,

一種在 kubectl 上下文之間切換的簡單方法,

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

kubectl top nodes --context=context02name

您還可以將上下文名稱存儲為 env,如 context01name=gke_${GOOGLE_CLOUD_PROJECT}_us-central1-a_standard-cluster-1

我厭倦了一遍又一遍地輸入這個,所以我寫了一個簡單的 bash 實用程序來切換上下文

在此處輸入圖像描述

你可以在這里找到它https://github.com/josefkorbel/kube-switch

切換/讀取/操作不同的 kubernetes 環境(又名 kubernetes 上下文)的規范答案是,正如 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”的 Google 員工創建,他在 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

TL;DR:我創建了一個 GUI 來通過 AppleScript 切換 Kubernetes 上下文。 我通過 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

跨存儲庫為不同環境克隆 YAML 文件絕對是理想的選擇。 你要做的是模板化你的 YAML 文件——通過提取因環境而異的參數。

當然,您可以使用一些模板引擎並分離 YAML 中的值,並為特定環境生成 YAML。 但如果您采用Helm Charts ,這很容易實現。 要查看一些示例圖表,請轉到此Github 存儲庫中的穩定目錄

Wordpress 圖表為例,您可以針對兩種環境使用兩種不同的命令:

對於開發:

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

雖然沒有必要在 CLI 上傳遞這些值,但您可以將這些值存儲在一個名為values.yml的文件中,並且您可以為不同的環境使用不同的文件

您需要做一些工作才能轉換為 Helm 圖表標准,但這些努力是值得的。

還要檢查最新的 (docker 19.03) docker context command

Ajeet Singh Raina )在“ Docker 19.03.0 預發布版:快速上下文切換、無根 Docker、對 Swarm 服務的 Sysctl 支持”中對此進行了說明

上下文切換

上下文本質上是您用來訪問特定集群的配置。

舉例來說,在我的特定情況下,我有 4 個不同的集群——本地和遠程運行的 Swarm 和 Kubernetes 的混合。
假設我有一個默認集群在我的桌面機器上運行,2 節點 Swarm 集群在 Google Cloud Platform 上運行,5 節點集群在 Play with Docker playground 上運行,單節點 Kubernetes 集群在 Minikube 上運行,我需要訪問 pretty經常。

使用 docker context CLI,我可以在幾秒鍾內輕松地從一個集群(可能是我的開發集群)切換到測試生產集群。

$ 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

我使用kubeswitch (免責聲明:我編寫了該工具),它可以像kubectx一樣使用,但專為大量 kubeconfig 文件而設計。 如果你必須處理成百上千個 kubeconfig 文件,這個工具可能對你有用,否則kubectxkubectl config use-context可能就足夠了。

例如,它添加了從vault讀取、搜索時熱重載以及加快后續搜索的索引等功能。

您可以從這里安裝它。

編輯:現在還包括直接支持 GKE。 因此,您可以使用和發現 kubeconfig 文件,而無需手動下載和更新它們。

如果您可能正在尋找一種在不同上下文之間切換的簡單方法,那么這可能會有所幫助。

我受到已經提到的kubectxkswitch腳本的啟發,我可以推薦它們用於大多數用例。 他們正在幫助解決切換任務,但在~/.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

是的,我想這就是你要問的。 要查看當前配置,請使用 kubectl config view。 kubectl 從以下位置加載並合並配置(按順序)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM