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


124

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

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

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

回答:


236

ローカル(minikube)からgcloudに切り替えて、次のように戻すことができます。

kubectl config use-context CONTEXT_NAME

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

kubectl config get-contexts

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


5
それをkubectlコンテキストにどのように追加しますか?それを行うためのgcloudコマンドはありますか?見つかった:$ gcloud container clusters get-credentials $ CLUSTER_NAME
Justin Thomas

上記は私に元のコンテキストを示しませんでしたが、示しましたgrep 'name:' ~/.kube/config。だったminikubeので、次のように切り替えることができましたkubectl config use-context minikube
Jordan Morris

10

標準の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/


6

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


これはコメントのように見えますが、答えではありません。
coderpc

これは素晴らしい答えです(特にgcloud container clusters get-credentials $CLUSTER_NAME、Justin Thomasのコメントから受け入れられた答えへの組み合わせ)。
thebjorn

3

最新の2020の回答はこちらです。

kubectlコンテキストを切り替える簡単な方法

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

kubectl top nodes --context=context02name

また、context01name = gke _ $ {GOOGLE_CLOUD_PROJECT} _us-central1-a_standard-cluster-1のように、コンテキスト名をenvとして保存することもできます。


2

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

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

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

Wordpressチャートを例に取ると、2つの環境に対して2つの異なるコマンドを使用できます。

開発者向け:

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環境(別名kubernetesコンテキスト)の切り替え/読み取り/操作の標準的な答えは、を使用する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コンテキストを簡単に管理できません。すべてを管理するために独自のスクリプトをロールするのではなく、kubectxKubernetes / Google Cloud Platformの開発者エクスペリエンスチームに所属する「Ahmet Alp Balkan」というGoogle社員が作成した成熟したツールを使用するのがより良いアプローチです。このようなツールを構築しています。私はそれを強くお勧めします。

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 19.03)docker contextコマンドも確認してください。

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

コンテキストの切り替え

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

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

docker context 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

異なるコンテキスト間を切り替える簡単な方法を探している場合は、これが役立つでしょう。

既に言及されkubectxているkswitchスクリプトや、ほとんどのユースケースに推奨できるスクリプトに触発されました。彼らは切り替えタスクの解決を手助けしていますが、の標準よりも大きいまたは少ない構成ではうまくいきません~/.kube/config。そのため、sys-exec呼び出しラッパーと省略形を作成しましたkubectl

paramsなしで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 config viewを使用します。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.