gcloud와 minikube간에 kubectl 클러스터를 전환하는 방법


124

저는 Kubernetes가 두 가지 환경, 즉 내 로컬 환경 (minikube를 실행하는 MacBook)과 Google의 Container Engine (GCE, Kubernetes on Google Cloud)에서 잘 작동합니다. 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
요르단 모리스

10

표준 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/


6

Mac 용 GUI 기반 솔루션을 찾고 있고 Docker Desktop이 설치되어있는 경우 Docker 메뉴 모음 아이콘을 사용할 수 있습니다. 여기에서 kubeconfig에있는 모든 컨텍스트가있는 "Kubernetes"메뉴를 찾을 수 있으며 이들 사이를 쉽게 전환 할 수 있습니다.


이것은 댓글처럼 보이지만 대답은 아닙니다.
coderpc

이것은 훌륭한 대답입니다 (특히 gcloud container clusters get-credentials $CLUSTER_NAMEJustin 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

요약 : 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을 생성 할 수 있습니다. 그러나 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 차트 표준으로 변환하려면 약간의 작업이 필요하지만 그만한 가치가 있습니다.


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 컨텍스트를 쉽게 관리 할 수 ​​없습니다. 모든 것을 관리하기 위해 자체 스크립트를 롤링하는 것보다 더 나은 접근 방식은 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 Pre-Release : Fast Context Switching, Rootless Docker, Sysctl support for Swarm Services "에서 설명합니다.

컨텍스트 전환

컨텍스트는 기본적으로 특정 클러스터에 액세스하는 데 사용하는 구성입니다.

예를 들어 제 특별한 경우에 로컬 및 원격으로 실행되는 Swarm과 Kubernetes의 혼합이라는 4 개의 다른 클러스터가 있다고 가정 해 보겠습니다.
내 데스크톱 컴퓨터에서 실행되는 기본 클러스터, Google Cloud Platform에서 실행되는 2 노드 Swarm 클러스터, Docker 플레이 그라운드에서 실행되는 5 노드 클러스터 및 Minikube에서 실행되는 단일 노드 Kubernetes 클러스터가 있고 pretty에 액세스해야한다고 가정합니다. 정기적으로.

Docker 컨텍스트 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 

0

다른 컨텍스트간에 전환하는 간단한 방법을 찾고있는 경우 도움이 될 수 있습니다.

나는 영감을 얻었다 kubectxkswitch스크립트는 이미 내가 가장 사용하기 경우에 추천 할 수있는 언급했다. 그들은 스위칭 작업을 해결하는 데 도움이되지만 ~/.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

0

컨텍스트 나열

kubectl config get-contexts

컨텍스트 전환

kubectl config set current-contex MY-CONTEXT

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 구성보기를 사용하십시오. 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/


나는 문제는 여러 환경에서 YAML 코드를 사용하는 방법을 주위에 사용자가 Kubectl에 대해 여러 CONFIGS를 사용하는 방법에 대한 질문입니다 팅크하지 않습니다
이씨 Biyani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.