Infra Architecture/Kubernetes

[K8S TroubleShooting] no such host

검은 까마귀 2024. 2. 24. 00:11

🔥이슈 정의

기존의 EKS랑 로컬 PC에서 작업을 할 수 있도록 EKS의 설정 문서에 따라 작업을 진행했지만, 클러스터를 삭제했더니 kubectl 명령어를 입력시 삭제된 클러스터를 바라보고 있었기 때문에 "such no host"라는 키워드로 호스트를 찾지 못했다.

 

캡쳐를 해두었어야하는데... 캡쳐를 못해두었다.

🤯사실 수집

호스트가 사라진건 알고 있다. 내가 호스트를 직접 삭제했으니깐.

 

문제는 멍청하게 로컬 PC에서 docker-desktop의 kubectl에 대해서 이것 저것 뜯어보면서 테스트용으로 사용하면서 작업을 진행하고 싶은데 설정을 어떻게 바꿔야하는지 모른다는 것이다. 참으로 멍청했다.

🧐 원인 추론

  1. 호스트를 다시 연결해주면 되지 않을까?
  2. 그렇다면 호스트 설정은 어디서 변경하지?
  3. 근데 만약 한 로컬 PC에서 여러개의 클러스터에 접근하고 싶다면 어떻게하지?
  4. 그럴때마다 설정을 바꿔줘야하나? 접근하고 있는 클러스터를 삭제하고?

자, 우리 똑똑한 구글 개발자들이 이런 디테일한 부분까지 고려하고 설계했다고 난 철썩 같이 믿었고 그 믿음은 배신하지 않았다. kubectl 명령어로도 충분히 해결할 수 있었다.

👏 해결 및 문서화

아래는 kubectl config의 설명서이다.

$ kubectl config --help

Modify kubeconfig files using subcommands like "kubectl config set current-context my-context".

 The loading order follows these rules:

  1.  If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place.
  2.  If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimiting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list.
  3.  Otherwise, ${HOME}/.kube/config is used and no merging takes place.

Available Commands:
  current-context   Display the current-context
  delete-cluster    Delete the specified cluster from the kubeconfig
  delete-context    Delete the specified context from the kubeconfig
  delete-user       Delete the specified user from the kubeconfig
  get-clusters      Display clusters defined in the kubeconfig
  get-contexts      Describe one or many contexts
  get-users         Display users defined in the kubeconfig
  rename-context    Rename a context from the kubeconfig file
  set               Set an individual value in a kubeconfig file
  set-cluster       Set a cluster entry in kubeconfig
  set-context       Set a context entry in kubeconfig
  set-credentials   Set a user entry in kubeconfig
  unset             Unset an individual value in a kubeconfig file
  use-context       Set the current-context in a kubeconfig file
  view              Display merged kubeconfig settings or a specified kubeconfig file

Usage:
  kubectl config SUBCOMMAND [options]

Use "kubectl config <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

 

명령어를 통해서 바꿀수도 있고 3번 처럼 "${HOME}/.kube/config "에 들어가서도 바꿀 수 있지만 나는 kubectl 명령어(1,2번 문제 해결)를 배워 보고자 그렇게 하지않고 help를 활용해서 진행했다.

 

 

confing는 이렇게 구성이 되어있다. 크게 3가지로 구성되어있는데 위를 설정해서 여러 클러스터에 접근할 수 있게된다.(3번 문제의 해결)

  • clusters: apiserver 서버 정보
  • users: apiserver에 접속하기 위한 사용자 목록
  • contexts: user와 cluster사이를 연결

여기서 중요한건  user와 cluster를 연결하는 context가 중요하다. 즉, 해당 내용을 풀어서 작성해보면 어떤 클러스터에 어떤 사용자가 접근하는지 결정하는 요소를 의미한다. 내가 바라보고 있는 cluster에다 kubectl을 날릴 수 있다는 이야기이다.

 

그렇다면 4번 문제가 해결이된다. 접근할때마다 클러스터를 삭제하지 않고 context를 바꿔가면서 접근할 수 있다는 이야기 이다.

 

https://kubernetes.io/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters/

 

다중 클러스터 접근 구성

이 페이지에서는 구성 파일을 사용하여 다수의 클러스터에 접근할 수 있도록 설정하는 방식을 보여준다. 클러스터, 사용자, 컨텍스트가 하나 이상의 구성 파일에 정의된 다음 kubectl config use-conte

kubernetes.io

 

그러니깐 반대로 이야기하면 사용하지 않는 클러스터를 삭제할 수도 있고 추가할 수도 있다는 이야기이며 이를 context를 전환하면서 내가 바라보고 싶은 클러스터를 내가 설정한  user로 접근할 수 있다는 이야기를 말한다.

 

트러블 슈팅하는건 재밌다. 쿠버네티스도 재밌다. 앉으면 시간가는 줄 모른다.

 

 

반응형

'Infra Architecture > Kubernetes' 카테고리의 다른 글

[K8S] Workload - Pods  (0) 2024.02.26
[K8S kubectl] --dry-run 옵션  (0) 2024.02.25
[K8S] Control Plane(Master Node), Worker Node  (0) 2024.02.23
[K8S] Kubernetes(쿠버네티스)  (0) 2023.09.27