DevOps(kubernetes)

[ArgoCD] k8s cluster와 연동하는법 [배스천 서버 Nodeport]

되다 2024. 8. 13. 10:20

Admin 비밀번호

해당 방법을 실행하기 전에 argocd 의 admin계정 password를 알고 있어야 한다

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

해당 명령어를 통해 decode된 admin의 initial password를 확인할 수 있다

 

적용할 클러스터 찾기

kubectl config get-contexts

 

출력 예시

위와 같은 정보가 나오는데 우리는 여기서 NAME에 해당하는 부분으코 클러스터를 추가할 것이다

 

방법 1 : Argocd 파드 내부에서 cluster Add

kubectl exec -it <pod:argocd-server> bash

먼저 argocd 파드 내부로 접속한다

 

argocd login localhost:<컨테이너포트>
Username : admin
Password : decode한 비밀번호

argocd server가 가동되고 있는 파드 내부에서 서버에 접속하는 것이니 url이 아니라 localhost:포트번호로 바로 찔러주면 된다

 

argocd cluster add my-cluster-context

클러스터가 추가된 것을 확인해볼 수 있다.

 

트러블 슈팅

FATA[0004] mkdir /.config: read-only file system

파드에 접속할 때 파일에 Write 권한이 없는 ID로 접속되어서 해당 문제가 발생했다

 

argocd-server deployment 수정

kubectl edit deployment argocd-server

 

argocd-server deployment

spec:
  template:
	spec:
	  containters:
	  - name: argocd-server
		  securityContext:
		    runAsUser: 0
		    runAsGroup: 0

deployment의 해당하는 부분에서 root 권한으로 실행되도록 변경해준다

pv pvc를 마운트하여 쓰기가 가능한 디렉토리를 설정할 수도 있다.

 

방법 2: 배스천 서버에서 cluster Add

방법 1이 되지 않는 경우 배스천 서버에서 cluster add하는 방법이다. 배스천 서버에서 파일

 

배스천 서버에서 argocd 가 설치가 안될경우

1. argocd 파일 다운로드

curl -sSL -o argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64

curl을 통해 바이너리 파일을 다운로드 받는다

 

2. 실행 권한 부여

chmod +x argocd

다운로드한 바이너리 파일에 실행권한을 부여한다

 

3. 경로에서 바이너리 파일 실행

./argocd <argocd_command>

앞으로 해당 경로에서 argocd를 실행할 수 있다

 

배스천 서버에서 argocd login

./argocd login <argocd url> # http 제거해야 한다
Username : admin
Password : decode한 비밀번호

./argocd cluster add my-cluster-context # 위의 cluster name

해당 명령어 후 Y를 입력하면

argocd-manager라는 Service account가 kube-system namespace에 생성되면서 argocd가 cluster에 대한 접근권한을 얻게된다

 

트러블 슈팅

FATA{0000] dial tcp: address tcp///intern-argocd.~~~도메인~~~/: unknown port

url로 로그인을 시도했으나 온프레미스 DNS에서 포트를 반환하지 못하는 경우이다

실수로 http://도메인에서 http를 제거하지 않아 난 오류였지만 Nodeport를 사용해보는 경험이 되었다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: my-namespace
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30007 # 원하는 NodePort 포트 번호
  type: NodePort

argocd-server로 연결해주는 svc에서 노드포트를 열어준다

 

출력 예시

 

포트에서 노드포트가 열린것을 볼 수 있다.


./argocd login 클러스터IP:노드포트

후에 로그인 되면 위의 과정을 진행하면 접속할 수 있다

 

출력 예시