ArgoCD 설치 준비 단계 트러블슈팅 정리

728x90

ArgoCD 설치 준비 단계 트러블슈팅 정리

1. 최초 문제 상황

ArgoCD 설치를 위해 namespace를 생성하려고 했다.

kubectl create namespace argocd

하지만 아래 에러가 발생했다.

Unable to connect to the server: dial tcp 127.0.0.1:59542: connectex:
No connection could be made because the target machine actively refused it.

의미

kubectl이 Kubernetes API 서버에 접속하려고 했지만,
127.0.0.1:59542 포트에 API 서버가 떠 있지 않아 연결이 거부된 상황이다.

즉, 이 문제는 ArgoCD namespace 생성 문제가 아니라 Kubernetes 클러스터 접속 문제였다.


2. kubectl이 바라보는 context 확인

현재 kubectl이 어떤 Kubernetes 클러스터를 바라보는지 확인했다.

kubectl config current-context

결과:

argocd-lab

의미

현재 kubectlargocd-lab이라는 context를 바라보고 있었다.

따라서 kubectl create namespace argocd 명령은 현재 PC의 argocd-lab Kubernetes 클러스터에 namespace를 만들려고 한 것이다.


3. 현재 context 상세 확인

다음 명령어로 현재 context의 실제 서버 주소를 확인했다.

kubectl config view --minify

결과 중 핵심 부분:

clusters:
- cluster:
    certificate-authority: C:\Users\admin\.minikube\ca.crt
    server: https://127.0.0.1:59542
  name: argocd-lab

의미

현재 argocd-lab context는 Kubernetes API 서버 주소로 아래 주소를 사용하고 있었다.

https://127.0.0.1:59542

하지만 최초 에러에서 확인했듯이 이 포트는 현재 응답하지 않았다.

즉, kubectl 설정에는 예전 API 서버 포트가 남아 있는데, 실제 minikube 클러스터의 API 서버는 해당 포트에서 동작하지 않는 상태였다.


4. minikube 프로파일 상태 확인

프로파일 상태 : 특정 minikube 클러스터가 지금 켜져 있는지, Kubernetes가 정상 동작 중인지 확인하는 상태 정보입니다.

현재 argocd-lab minikube 프로파일 상태를 확인했다.

minikube status -p argocd-lab

결과:

E0512 09:26:51.487790   31024 status.go:417] kubeconfig endpoint:
got: 127.0.0.1:59542, want: 127.0.0.1:56610

argocd-lab
type: Control Plane
host: Running
kubelet: Stopped
apiserver: Stopped
kubeconfig: Misconfigured

WARNING: Your kubectl is pointing to stale minikube-vm.
To fix the kubectl context, run `minikube update-context`

핵심 내용

got:  127.0.0.1:59542
want: 127.0.0.1:56610

현재 kubectl은 예전 포트인 59542를 보고 있었지만, minikube가 기대하는 현재 포트는 56610이었다.

즉, kubeconfig가 오래된 상태였다.


5. 이 시점의 문제 상태

이때 문제는 두 가지였다.

문제 1. kubeconfig가 stale 상태

kubeconfig: Misconfigured

kubectl 설정이 현재 minikube 클러스터 상태와 맞지 않았다.

문제 2. Kubernetes 구성요소가 멈춰 있음

kubelet: Stopped
apiserver: Stopped

Kubernetes 내부 핵심 구성요소인 kubelet, apiserver도 멈춰 있었다.

따라서 단순히 namespace 생성 명령만 다시 실행해서는 해결되지 않는 상태였다.


6. kubeconfig 갱신 시도

minikube가 안내한 대로 context를 갱신했다.

minikube update-context -p argocd-lab

결과:

* "argocd-lab" 컨텍스트가 127.0.0.1:56610로 갱신되었습니다
* 현재 컨텍스트는 "argocd-lab" 입니다

의미

이 명령으로 kubectl이 바라보는 API 서버 주소가 기존:

127.0.0.1:59542

에서 새 포트:

127.0.0.1:56610

으로 갱신되었다.

즉, kubeconfig의 stale 문제는 1차적으로 해결되었다.


7. minikube 재시작 과정에서 발생한 문제

이후 클러스터를 재시작하려고 다음 명령을 실행했다.

minikube stop -p argocd-lab
minikube start -p argocd-lab --driver=hyperv

하지만 아래 에러가 발생했다.

Exiting due to GUEST_DRIVER_MISMATCH:
The existing "argocd-lab" cluster was created using the "docker" driver,
which is incompatible with requested "hyperv" driver.

의미

기존 argocd-lab 클러스터는 docker driver로 생성된 클러스터였다.

그런데 재시작할 때 --driver=hyperv를 붙여 실행했기 때문에 기존 클러스터의 driver와 요청한 driver가 서로 맞지 않았다.

정리하면:

기존 클러스터 생성 driver: docker
재시작 시 요청한 driver: hyperv
결과: driver mismatch 에러 발생

8. driver mismatch 이후 상태

driver mismatch가 발생한 뒤 상태를 다시 보면:

argocd-lab
type: Control Plane
host: Stopped
kubelet: Stopped
apiserver: Stopped
kubeconfig: Stopped

의미

minikube stop은 성공했지만, minikube start --driver=hyperv는 실패했다.

그래서 결과적으로 argocd-lab 클러스터가 완전히 중지된 상태가 되었다.

이 상태에서는 당연히 아래 명령이 실패한다.

kubectl create namespace argocd

9. HTML Authentication required 에러 발생

그 후 kubectl get nodes 또는 kubectl create namespace argocd 실행 시 아래와 같은 HTML 응답이 나왔다.

Authentication required
/login?from=%2Fapi%3Ftimeout%3D32s

그리고 최종적으로:

Error from server (Forbidden): unknown (post namespaces)

가 발생했다.

의미

정상적인 Kubernetes API 서버라면 이런 HTML 로그인 페이지를 반환하지 않는다.

이 응답은 Kubernetes API 서버의 정상 응답이 아니라, 현재 kubectl이 접근한 포트에서 Kubernetes API 서버가 아닌 다른 웹 서비스 또는 비정상 응답을 받은 것이다.

가장 큰 원인은 이 상태였다.

argocd-lab 클러스터가 stop 된 상태

즉, Kubernetes API 서버가 정상적으로 떠 있지 않은 상태에서 kubectl 명령을 계속 실행했기 때문에 정상적인 Kubernetes API 응답을 받을 수 없었다.


10. 최종 원인 정리

이번 문제의 원인은 하나가 아니라, 순서대로 겹쳐 있었다.

원인 1. kubectl이 오래된 API 서버 포트를 보고 있었음

kubectl: 127.0.0.1:59542
minikube 실제 기대 포트: 127.0.0.1:56610

그래서 최초 에러가 발생했다.

Unable to connect to the server

원인 2. minikube 내부 Kubernetes 구성요소가 멈춰 있었음

kubelet: Stopped
apiserver: Stopped

따라서 kubeconfig만 고쳐도 클러스터가 정상 동작하지 않는 상태였다.

원인 3. 클러스터 driver를 잘못 지정함

기존 클러스터는 docker driver로 생성되어 있었다.

created using the "docker" driver

하지만 재시작 시 Hyper-V driver를 지정했다.

minikube start -p argocd-lab --driver=hyperv

그래서 driver mismatch 에러가 발생했다.


11. 최종 해결 방향

현재 환경에서는 argocd-lab 클러스터를 docker driver로 다시 시작해야 한다.

정답 명령은 이것이다.

minikube start -p argocd-lab --driver=docker

그 다음 context를 다시 맞춘다.

minikube update-context -p argocd-lab

상태 확인:

minikube status -p argocd-lab
kubectl get nodes

정상 상태가 확인되면 namespace를 생성한다.

kubectl create namespace argocd

12. 최종 복구 명령어

아래 순서로 실행한다.

minikube start -p argocd-lab --driver=docker
minikube update-context -p argocd-lab
minikube status -p argocd-lab
kubectl get nodes
kubectl create namespace argocd

13. 기대 정상 상태

minikube status -p argocd-lab 결과가 아래처럼 나와야 한다.

argocd-lab
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

그리고:

kubectl get nodes

실행 시 대략 아래처럼 나와야 한다.

NAME         STATUS   ROLES           AGE   VERSION
argocd-lab   Ready    control-plane   ...

이 상태가 되어야 비로소 ArgoCD namespace 생성이 가능하다.

kubectl create namespace argocd

정상 성공 시:

namespace/argocd created

이미 존재한다면:

Error from server (AlreadyExists): namespaces "argocd" already exists

이 경우는 문제가 아니라 이미 생성되어 있다는 뜻이다.


14. 전체 흐름 요약

ArgoCD namespace 생성 시도
  ↓
kubectl이 127.0.0.1:59542로 접속 시도
  ↓
해당 포트에 Kubernetes API 서버 없음
  ↓
kubectl current-context 확인
  ↓
현재 context는 argocd-lab
  ↓
kubectl config view --minify 확인
  ↓
server가 127.0.0.1:59542로 되어 있음
  ↓
minikube status -p argocd-lab 확인
  ↓
실제 기대 포트는 127.0.0.1:56610
  ↓
kubeconfig stale 상태 확인
  ↓
minikube update-context로 포트 갱신
  ↓
클러스터 재시작 시도
  ↓
잘못된 hyperv driver 지정
  ↓
기존 클러스터는 docker driver라 mismatch 발생
  ↓
argocd-lab 클러스터가 stopped 상태가 됨
  ↓
kubectl 명령 실패
  ↓
docker driver로 다시 시작해야 함

15. 이번 트러블슈팅의 핵심 교훈

kubectl 에러만 보고 바로 ArgoCD 문제로 보면 안 됨

이번 에러는 ArgoCD 설치 문제가 아니라, 그 이전 단계인 Kubernetes 클러스터 연결 문제였다.

kubectl config current-context는 항상 먼저 확인해야 함

현재 명령이 어느 클러스터에 적용되는지 확인해야 한다.

kubectl config current-context

minikube는 profile 단위로 상태를 확인해야 함

이번 클러스터 이름은 argocd-lab이었기 때문에 반드시 -p argocd-lab을 붙여야 한다.

minikube status -p argocd-lab

minikube driver는 기존 생성 driver와 맞춰야 함

기존 클러스터가 docker driver로 만들어졌다면 다시 시작할 때도 docker driver를 써야 한다.

minikube start -p argocd-lab --driver=docker

Hyper-V로 시작하면 안 된다.

minikube start -p argocd-lab --driver=hyperv

이건 이번 상황에서는 실패 원인이었다.


최종 결론

현재 문제는 다음과 같다.

argocd-lab minikube 클러스터가 docker driver 기반인데,
중간에 hyperv driver로 시작하려 해서 실패했고,
현재 클러스터는 stopped 상태이다.

따라서 다음 명령으로 복구해야 한다.

minikube start -p argocd-lab --driver=docker
minikube update-context -p argocd-lab
kubectl get nodes
kubectl create namespace argocd

이후 kubectl get nodes가 정상으로 나오면 ArgoCD 설치 준비 단계로 다시 진입하면 된다.

728x90