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
의미
현재 kubectl은 argocd-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 설치 준비 단계로 다시 진입하면 된다.