개발 이슈

AWS EKS 클러스터에 접속해서 특정 작업 또는 정보를 확인하기

주인장 꼬비 2023. 5. 13. 18:02

글을 작성하게 된 계기

회사에서 개발 도중에 stage 환경에 띄워져있는 특정 pod이 5분간격으로 터졌다. dev에서는 잘 되는데 stage에서만 발생하는 문제였고, 문제가 발생하는 RPC도 로컬에서 연결해서 확인해봤을때는 정상적으로 동작했다. 인프라쪽에서 최근에 보안관련 설정을 했었는데 그때 뭔가 잘못 건드려서 발생하는 문제같았지만 확실하게 하고싶어서 옆자리 사수님께도 얘기해 봤다. 

 

이때 사수가 "eks 에 접속해서 확인해봐야 정확히 알 것 같아요!" 라고 하셨지만 나는 어떻게 해야하는지 구체적으로 몰랐다. 결국 실장님이 인프라담당자에게 관련 이슈에 대해서 전달하고, 내게 eks 접속과 관련해서 커맨드를 알려주고 설명을 쭉 해주셨다.

 

쿠버네티스에 대해서 강의를 들은 적은 있지만 대충 억지로 공부했어서 실장님이 설명해주신 얘기를 듣고 바로 이해를 하지 못했다. 이제는 피할 수 없다... 피하면 안된다...

 

우선, 내가 이해하기 쉽게 기록해야 내 머릿속에 잘 들어갈 것 같아서, 전달 받았던 커맨드와 간단한 설명을 정리하여 글을 작성하기로 결정했다. 

 

 

대략적인 커맨드

다음 명령어들은 AWS EKS 클러스터에 접속해서 해당 클러스터 내부의 리소스를 관리하고 모니터링하기 위해 사용된 명령어들이다.

$ aws eks update-kubeconfig --region ap-northeast-2 --name stg-ext-cluster --profile stage

$ vim ~/.kube/config

$ kubectl config use-context stg-ext

$ kubectl get all -n tsed-service-system

$ kubectl exec -it pod/api-6bf59c4df6-7jp5s -n tsed-service-system -- /bin/bash

$ kubectl exec -it pod/api-6bf59c4df6-7jp5s -n tsed-service-system -- sh

$ kubectl describe pod/api-6bf59c4df6-7jp5s -n tsed-service-system

$ kubectl logs pod/api-6bf59c4df6-7jp5s -n tsed-service-system

 

1. aws eks update-kubeconfig --region ap-northeast-2 --name stg-ext-cluster --profile stage

이 명령어는 AWS CLI를 사용하여 Amazon Elastic Kubernetes Service (Amazon EKS) 클러스터의 kubeconfig 파일을 업데이트하는 명령어이다. 이 명령어를 실행하면, 지정한 EKS 클러스터의 kubeconfig 파일이 업데이트되어 해당 클러스터에 접속할 수 있는 인증 정보와 엔드포인트 정보가 kubeconfig 파일에 추가된니다. 이후 kubectl과 같은 Kubernetes CLI 도구를 사용하여 해당 클러스터에 대한 명령어를 실행할 수 있게 된니다.

  • aws eks: AWS CLI의 eks 서비스를 호출하는 부분입니다.
  • update-kubeconfig: kubeconfig 파일을 업데이트하는 명령어입니다. kubeconfig 파일은 Kubernetes 클러스터에 접속할 때 필요한 설정 정보를 담고 있습니다.
  • --region ap-northeast-2: Amazon EKS 클러스터가 위치한 AWS 리전을 지정합니다. 이 경우, ap-northeast-2는 서울 리전을 나타냅니다.
  • --name stg-ext-cluster: 업데이트할 EKS 클러스터의 이름을 지정합니다. 여기서는 "stg-ext-cluster"라는 클러스터를 업데이트합니다.
  • --profile stage: AWS CLI 프로파일을 지정합니다. 프로파일은 AWS 자격 증명 설정 정보를 가리키며, 여기서는 "stage"라는 프로파일을 사용합니다.

 

2. vim ~/.kube/config

누구나 아는 config 파일을 수정하는 명령어이다. ~/.kube/config 파일은 Kubernetes 클러스터에 접속할 때 사용되는 kubeconfig 파일이다. 이 파일은 클러스터 연결 정보, 인증 정보, 사용자 권한 등을 포함하고 있다. 기본적으로 사용자의 디렉토리에 위치하며, Kubernetes 클러스터에 접속하기 위해 kubectl 같은 Kubernetes CLI 도구가 참조하는 파일이다.

 

이때 클러스터의 컨텍스트 이름을 stg-ext 로 수정했다.

 

3. kubectl config use-context stg-ext

kubeconfig 파일에서 특정 컨텍스트를 사용하도록 설정하는 명령어이다. 여기서 "stg-ext"는 vim으로 클러스터에 붙여준 컨텍스트 이름이다.

 

4. kubectl get all -n tsed-service-system

"tsed-service-system" 네임스페이스에 있는 모든 리소스를 가져오는 명령어이다. get 명령어는 Kubernetes 리소스를 조회하는 데 사용되며, all은 모든 리소스 유형을 의미한다. 

 

5. kubectl exec -it pod/api-6bf59c4df6-7jp5s -n tsed-service-system -- /bin/bash

"tsed-service-system" 네임스페이스에 있는 "api-6bf59c4df6-7jp5s"라는 이름의 POD에서 대화형 bash 쉘을 실행한다.

 

6. kubectl exec -it pod/api-6bf59c4df6-7jp5s -n tsed-service-system -- sh

"tsed-service-system" 네임스페이스에 있는 "api-6bf59c4df6-7jp5s"라는 이름의 POD에서 대화형 sh 쉘을 실행한다. 아마도 사수님이 얘기한 거는 이걸로 접속해서 해당 pod을 확인해보라는 것이 아니었나 싶다.

 

7. kubectl describe pod/api-6bf59c4df6-7jp5s -n tsed-service-system

"tsed-service-system" 네임스페이스에 있는 "api-6bf59c4df6-7jp5s"라는 이름의 POD에 대한 자세한 정보를 출력한다. describe는 지정된 리소스의 상세 정보를 표시하는 명령어이다.

 

8. kubectl logs pod/api-6bf59c4df6-7jp5s -n scope-system

"tsed-service-system" 네임스페이스에 있는 "api-6bf59c4df6-7jp5s"라는 이름의 POD의 로그를 출력한다. grafana 나 argoCD를 통해서 로그를 확인하는 것이 편하지만, 혹시나 이러한 모니터링 도구를 사용할 수 없는 상황에 사용하면 될 것 같다.