gcloud와 minikube간에 kubectl 클러스터를 전환하는 방법
저는 Kubernetes가 두 가지 환경, 즉 내 로컬 환경 (minikube를 실행하는 MacBook)과 Google의 Container Engine (GCE, Kubernetes on Google Cloud)에서 잘 작동합니다. 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 파일에 넣을 수 있습니다.
Mac 용 GUI 기반 솔루션을 찾고 있고 Docker Desktop이 설치되어있는 경우 Docker 메뉴 모음 아이콘을 사용할 수 있습니다. 여기서 kubeconfig에있는 모든 컨텍스트가 포함 된 "Kubernetes"메뉴를 찾을 수 있으며 이들 사이를 쉽게 전환 할 수 있습니다.
표준 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/
요약 : 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
다른 환경의 저장소에서 YAML 파일을 복제하는 것은 확실히 이상적입니다. 해야 할 일은 환경마다 다른 매개 변수를 추출하여 YAML 파일을 템플릿 화하는 것입니다.
물론 일부 템플릿 엔진을 사용하고 YAML에서 값을 분리하고 특정 환경에 대한 YAML을 생성 할 수 있습니다. 그러나 Helm Charts 를 채택하면 쉽게 할 수 있습니다 . 샘플 차트를 살펴 보려면이 Github 저장소의 stable 디렉토리로 이동하세요.
Wordpress 차트 의 예를 들어 보려면 두 가지 환경에 대해 두 가지 다른 명령을 사용할 수 있습니다.
Dev의 경우 :
helm install --name dev-release --set \ wordpressUsername=dev_admin, \ wordpressPassword=dev_password, \ mariadb.mariadbRootPassword=dev_secretpassword \ stable/wordpress
CLI에서이 값을 전달할 필요는 없지만 aptly라는 파일에 값을 저장할 values.yml
수 있으며 환경에 따라 다른 파일을 가질 수 있습니다.
Helm 차트 표준으로 변환하려면 약간의 작업이 필요하지만 그만한 가치가 있습니다.
최신 (docker 19.03) docker context
명령 도 확인하십시오 .
Ajeet Singh Raina ) illustrates it in "Docker 19.03.0 Pre-Release: Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services"
A context is essentially the configuration that you use to access a particular cluster.
Say, for example, in my particular case, I have 4 different clusters – mix of Swarm and Kubernetes running locally and remotely.
Assume that I have a default cluster running on my Desktop machine , 2 node Swarm Cluster running on Google Cloud Platform, 5-Node Cluster running on Play with Docker playground and a single-node Kubernetes cluster running on Minikube and that I need to access pretty regularly.Using docker context CLI I can easily switch from one cluster(which could be my development cluster) to test to production cluster in seconds.
$ 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.
For example:
[:)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
I got bored of typing this over and over so I wrote a simple bash utility to switch contexts
You can find it here https://github.com/josefkorbel/kube-switch
The canonical answer of switching/reading/manipulating different kubernetes environments (aka kubernetes contexts) is, as Mark mentioned, to use kubectl config
, see below:
$ 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]
Behind the scene, there is a ~/.kube/config
YAML file that stores all the available contexts with their corresponding credentials and endpoints for each contexts.
Kubectl off the shelf doesn't make it easy to manage different kubernetes contexts as you probably already know. Rather than rolling your own script to manage all that, a better approach is to use a mature tool called kubectx
, created by a Googler named "Ahmet Alp Balkan" who's on Kubernetes / Google Cloud Platform developer experiences Team that builds tooling like this. I highly recommend it.
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
In case you might be looking for a simple way to switch between different contexts maybe this will be of help.
I got inspired by kubectx
and kswitch
scripts already mentioned, which I can recommend for most use-cases. They are helping with solving the switching task, but are breaking for me on some bigger or less standard configurations of ~/.kube/config
. So I created a sys-exec invocation wrapper and a short-hand around kubectl
.
If you call k without params you would see an intercepted prompt to switch context.
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]:
Further, k
continues to act as a short-hand. The following is equivalent:
kubectl get pods --all-namespaces
k get pods -A
k p -A
yes, i think this is what your asking about. To view your current config, use kubectl config view. kubectl loads and merges config from the following locations (in order)
--kubeconfig=/path/to/.kube/config command line flag
KUBECONFIG=/path/to/.kube/config env variable
$HOME/.kube/config - The DEFAULT
i use --kubeconfig since i switch alot between multiple clusters. its slightly cumbersome but it works well.
see these for more info. https://kubernetes.io/docs/tasks/administer-cluster/share-configuration/ and https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/
'Programing' 카테고리의 다른 글
Android Spanned, SpannedString, Spannable, SpannableString 및 CharSequence (0) | 2020.09.18 |
---|---|
SpanSizeLookup을 사용하여 GridLayoutManager의 항목에 대한 범위 설정 (0) | 2020.09.18 |
WWW 여부 WWW, 기본 사이트 이름으로 무엇을 선택해야합니까? (0) | 2020.09.18 |
목록 내에서 항목을 이동 하시겠습니까? (0) | 2020.09.18 |
stdClass 객체를 다른 클래스로 변환 / 캐스트 (0) | 2020.09.18 |