🔥이슈 정의
기존의 EKS랑 로컬 PC에서 작업을 할 수 있도록 EKS의 설정 문서에 따라 작업을 진행했지만, 클러스터를 삭제했더니 kubectl 명령어를 입력시 삭제된 클러스터를 바라보고 있었기 때문에 "such no host"라는 키워드로 호스트를 찾지 못했다.
캡쳐를 해두었어야하는데... 캡쳐를 못해두었다.
🤯사실 수집
호스트가 사라진건 알고 있다. 내가 호스트를 직접 삭제했으니깐.
문제는 멍청하게 로컬 PC에서 docker-desktop의 kubectl에 대해서 이것 저것 뜯어보면서 테스트용으로 사용하면서 작업을 진행하고 싶은데 설정을 어떻게 바꿔야하는지 모른다는 것이다. 참으로 멍청했다.
🧐 원인 추론
- 호스트를 다시 연결해주면 되지 않을까?
- 그렇다면 호스트 설정은 어디서 변경하지?
- 근데 만약 한 로컬 PC에서 여러개의 클러스터에 접근하고 싶다면 어떻게하지?
- 그럴때마다 설정을 바꿔줘야하나? 접근하고 있는 클러스터를 삭제하고?
자, 우리 똑똑한 구글 개발자들이 이런 디테일한 부분까지 고려하고 설계했다고 난 철썩 같이 믿었고 그 믿음은 배신하지 않았다. 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/
그러니깐 반대로 이야기하면 사용하지 않는 클러스터를 삭제할 수도 있고 추가할 수도 있다는 이야기이며 이를 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 |