web-dev-qa-db-ja.com

gcloudとminikubeの間でkubectlクラスターを切り替える方法

Kubernetesは、2つの異なる環境、つまりローカル環境(minikubeを実行しているMacBook)とGoogleのContainer Engine(GCE、Google Cloud上のKubernetes)でうまく機能しています。 MacBook/local環境を使用してYAMLファイルを開発およびテストし、完了したらGCEで試してみます。

現在、各環境で個別に作業する必要があります。ローカル環境でYAMLファイルを編集し、準備ができたらGit環境に(git)クローンしてから使用/デプロイする必要があります。これはやや面倒なプロセスです。

理想的には、Macbookからkubectlを使用して、ローカルのminikubeまたはGCE Kubernetes環境を簡単に切り替え、YAMLファイルが使用されている場所を簡単に判断したいと思います。これを行うためにコンテキストを切り替える簡単な方法はありますか?

65
Eric Broda

ローカル(minikube)からgcloudに切り替えるには、次を使用します。

kubectl config use-context CONTEXT_NAME

すべてのコンテキストをリストするには:

kubectl config get-contexts

ローカルとgcloudに異なる環境を作成し、別々のyamlファイルに配置できます。

125
Mark

Mac用のGUIベースのソリューションを探していて、Dockerデスクトップをインストールしている場合は、Dockerメニューバーアイコンを使用できます。ここでは、kubeconfigにあるすべてのコンテキストを含む「Kubernetes」メニューを検索し、それらを簡単に切り替えることができます。

3
zCHIP

標準のkubectlコマンドへのより高速なショートカットは、 kubectx を使用することです。

  • コンテキストのリスト:kubectx
    • kubectl config get-contextsと同等
  • コンテキストの切り替え(fooへ):kubectx foo
    • kubectl config use-context fooと同等

MacOSにインストールするには:brew install kubectx

Kubectxパッケージには、kubensという名前空間を切り替えるための同様のツールも含まれています。

これら2つは、複数のコンテキストと名前空間で定期的に作業する場合に非常に便利です。

詳細: https://ahmet.im/blog/kubectx/

2
Taylor Edmiston

さまざまな環境のリポジトリ間でYAMLファイルを複製することは、間違いなく理想的です。あなたがすべきことは、YAMLファイルをテンプレート化することです-環境ごとに異なるパラメーターを抽出することによって。

もちろん、テンプレートエンジンを使用してYAMLの値を分離し、特定の環境用にYAMLを生成できます。しかし、これは Helm Charts を採用すると簡単に実行できます。いくつかのサンプルチャートを見るには、この安定したディレクトリに移動してください Github repo

Wordpress chart の例を挙げると、2つの環境に2つの異なるコマンドを使用できます。

開発者向け:

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

ただし、CLIでこれらの値を渡す必要はありません。適切なvalues.ymlというファイルに値を保存でき、環境ごとに異なるファイルを作成できます。

Helmチャート標準への変換には多少の作業が必要ですが、努力する価値はあります。

1
Vishal Biyani

TL; DR:AppleScriptを介してKubernetesコンテキストを切り替えるGUIを作成しました。 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
cwingrav

最新(docker 19.03) docker context command も確認してください。

Ajeet Singh Raina )は、「 Docker 19.03.0プレリリース:高速コンテキスト切り替え、ルートレスDocker、SwarmサービスのSysctlサポート 」で説明しています

Context Switching

コンテキストは基本的に、特定のクラスターにアクセスするために使用する構成です。

たとえば、特定のケースでは、ローカルとリモートで実行されているSwarmとKubernetesの混在する4つの異なるクラスターがあるとします。
デスクトップマシンで実行されているデフォルトクラスター、Google Cloud Platformで実行されている2ノードSwarmクラスター、DockerプレイグラウンドでのPlayで実行されている5ノードクラスター、Minikubeで実行されている単一ノードKubernetesクラスターがあるとしますかなり定期的にアクセスする必要があります。

DockerコンテキストCLIを使用すると、1つのクラスター(私の開発クラスターである可能性があります)から本番クラスターへのテストを簡単に切り替えることができます。

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

異なる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コンテキストを簡単に管理できません。これらすべてを管理するために独自のスクリプトを展開するよりも、Kubernetes/Google Cloud Platform開発者エクスペリエンスチームに所属する「Ahmet Alp Balkan」という名前のGoogle社員が作成したkubectxという成熟したツールを使用することをお勧めします。強くお勧めします。

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
0
Devy

これを何度も入力するのにうんざりしたので、コンテキストを切り替える簡単なbashユーティリティを作成しました

enter image description here

ここで見つけることができます https://github.com/josefkorbel/kube-switch

0
Josef Korbel