[英]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
如果您正在尋找適用於 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
切換/讀取/操作不同的 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 文件,這個工具可能對你有用,否則kubectx
或kubectl config use-context
可能就足夠了。
例如,它添加了從vault
讀取、搜索時熱重載以及加快后續搜索的索引等功能。
您可以從這里安裝它。
編輯:現在還包括直接支持 GKE。 因此,您可以使用和發現 kubeconfig 文件,而無需手動下載和更新它們。
如果您可能正在尋找一種在不同上下文之間切換的簡單方法,那么這可能會有所幫助。
我受到已經提到的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
是的,我想這就是你要問的。 要查看當前配置,請使用 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.