Kubernetesは、2つの異なる環境、つまりローカル環境(minikubeを実行しているMacBook)とGoogleのContainer Engine(GCE、Google Cloud上のKubernetes)でうまく機能しています。 MacBook/local環境を使用してYAMLファイルを開発およびテストし、完了したらGCEで試してみます。
現在、各環境で個別に作業する必要があります。ローカル環境でYAMLファイルを編集し、準備ができたらGit環境に(git)クローンしてから使用/デプロイする必要があります。これはやや面倒なプロセスです。
理想的には、Macbookからkubectlを使用して、ローカルのminikubeまたはGCE Kubernetes環境を簡単に切り替え、YAMLファイルが使用されている場所を簡単に判断したいと思います。これを行うためにコンテキストを切り替える簡単な方法はありますか?
ローカル(minikube)からgcloudに切り替えるには、次を使用します。
kubectl config use-context CONTEXT_NAME
すべてのコンテキストをリストするには:
kubectl config get-contexts
ローカルとgcloudに異なる環境を作成し、別々のyamlファイルに配置できます。
Mac用のGUIベースのソリューションを探していて、Dockerデスクトップをインストールしている場合は、Dockerメニューバーアイコンを使用できます。ここでは、kubeconfigにあるすべてのコンテキストを含む「Kubernetes」メニューを検索し、それらを簡単に切り替えることができます。
標準のkubectlコマンドへのより高速なショートカットは、 kubectx を使用することです。
kubectx
kubectl config get-contexts
と同等kubectx foo
kubectl config use-context foo
と同等MacOSにインストールするには:brew install kubectx
Kubectxパッケージには、kubens
という名前空間を切り替えるための同様のツールも含まれています。
これら2つは、複数のコンテキストと名前空間で定期的に作業する場合に非常に便利です。
さまざまな環境のリポジトリ間で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チャート標準への変換には多少の作業が必要ですが、努力する価値はあります。
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
最新(docker 19.03) docker context
command も確認してください。
Ajeet Singh Raina )は、「 Docker 19.03.0プレリリース:高速コンテキスト切り替え、ルートレスDocker、SwarmサービスのSysctlサポート 」で説明しています
コンテキストは基本的に、特定のクラスターにアクセスするために使用する構成です。
たとえば、特定のケースでは、ローカルとリモートで実行されている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
異なる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
これを何度も入力するのにうんざりしたので、コンテキストを切り替える簡単なbashユーティリティを作成しました
ここで見つけることができます https://github.com/josefkorbel/kube-switch