728x90
설치 준비
Helm 설치
- helm이 설치되어 있는지 확인하자
- helm은 rancher desktop을 설치할때 같이 설치 된다.
brew install helm
Helm version 확인
➜ ~ helm version
version.BuildInfo{Version:"v3.18.6", GitCommit:"b76a950f6835474e0906b96c9ec68a2eff3a6430", GitTreeState:"clean", GoVersion:"go1.24.6"}
k8s namespace 추가
- namespace : kafka-eda
➜ ~ kubectl create namespace kafka-eda
namespace/kafka-eda created
생성된 네임스페이스 확인
➜ ~ kubectl get ns
NAME STATUS AGE
default Active 32d
kafka-eda Active 2m24s
kube-node-lease Active 32d
kube-public Active 32d
kube-system Active 32d
Helm ArgoCd 저장소(repository)추가
➜ ~ helm repo add argo https://argoproj.github.io/argo-helm
"argo" has been added to your repositories
➜ ~ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "argo" chart repository
Update Complete. ⎈Happy Helming!⎈
Argo Cd 설치
➜ ~ helm install argocd argo/argo-cd -n kafka-eda
NAME: argocd
LAST DEPLOYED: Fri Oct 10 13:27:05 2025
NAMESPACE: kafka-eda
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
In order to access the server UI you have the following options:
1. kubectl port-forward service/argocd-server -n kafka-eda 8080:443
and then open the browser on http://localhost:8080 and accept the certificate
2. enable ingress in the values file `server.ingress.enabled` and either
- Add the annotation for ssl passthrough: https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#option-1-ssl-passthrough
- Set the `configs.params."server.insecure"` in the values file and terminate SSL at your ingress: https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#option-2-multiple-ingress-objects-and-hosts
After reaching the UI the first time you can login with username: admin and the random password generated during the installation. You can find the password by running:
kubectl -n kafka-eda get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
(You should delete the initial secret afterwards as suggested by the Getting Started Guide: https://argo-cd.readthedocs.io/en/stable/getting_started/#4-login-using-the-cli)
설치된 파드 확인
➜ ~ kubectl get pods -n kafka-eda
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 4m57s
argocd-applicationset-controller-795cf49b79-b68gj 1/1 Running 0 4m57s
argocd-dex-server-f57c579d8-2cpzl 1/1 Running 0 4m57s
argocd-notifications-controller-5446b75d4f-k7j25 1/1 Running 0 4m57s
argocd-redis-55dc698fd5-j758f 1/1 Running 0 4m57s
argocd-repo-server-694f5d9b64-xz54m 1/1 Running 0 4m57s
argocd-server-5d9b85c948-mxszb 1/1 Running 0 4m57s
➜ ~
클러스터내의 모든 설치된 서비스(service) 정보 정보 확인
➜ ~ kubectl get svc -n kafka-eda
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-applicationset-controller ClusterIP 10.43.153.157 <none> 7000/TCP 14m
argocd-dex-server ClusterIP 10.43.26.28 <none> 5556/TCP,5557/TCP 14m
argocd-redis ClusterIP 10.43.188.120 <none> 6379/TCP 14m
argocd-repo-server ClusterIP 10.43.32.182 <none> 8081/TCP 14m
argocd-server ClusterIP 10.43.163.11 <none> 80/TCP,443/TCP 14m
type이 ClusterIP로 되어 있다.
바로 접근하고 싶다면 , CusterIP 타입이라 외부 에서 바로 접속이 되지 않음으로 포트 포워딩을 진행해 준다.
➜ ~ kubectl port-forward svc/argocd-server -n kafka-eda 8080:443
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
Handling connection for 8080
Handling connection for 8080
Handling connection for 8080
혹은 ClusterIP를 NodePort 타입으로 변경하여 사용 할 수도 있다. (아래 페이지 참고 )
여기서는 ingress를 사용하겠다.
argocd-server 정보 확인
➜ ~ kubectl describe svc argocd-server -n kafka-eda
Name: argocd-server
Namespace: kafka-eda
Labels: app.kubernetes.io/component=server
app.kubernetes.io/instance=argocd
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=argocd-server
app.kubernetes.io/part-of=argocd
app.kubernetes.io/version=v3.1.8
helm.sh/chart=argo-cd-8.6.0
Annotations: meta.helm.sh/release-name: argocd
meta.helm.sh/release-namespace: kafka-eda
Selector: app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-server
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.43.163.11
IPs: 10.43.163.11
Port: http 80/TCP
TargetPort: 8080/TCP
Endpoints: 10.42.0.35:8080
Port: https 443/TCP
TargetPort: 8080/TCP
Endpoints: 10.42.0.35:8080
Session Affinity: None
Internal Traffic Policy: Cluster
argo cd ingress 적용
기존에 이미 helm으로 argo cd를 설치하였다면 helm upgrade로 가능하다. 만약 설치하였으나 수동으로 즉 kubectl로 삭제한 리소스가 있다면 helm uninstall로 모두 삭제한후에 helm install 을 수행한다.
ingress를 사용하기 위한 values.yaml 파일
# values.yaml
# ===================================================
# Argo CD 헬름 설치 시 사용자 정의 설정 파일
# 로컬 Rancher Desktop 환경용 (Ingress 포함)
# ===================================================
server:
# Argo CD 서버(웹 UI) Ingress 설정
ingress:
enabled: true # Ingress 사용 여부
ingressClassName: "nginx" # 사용할 Ingress Controller 클래스 이름
hosts:
- argocd.localhost # 접근할 도메인 (로컬에서는 /etc/hosts에 등록)
paths:
- / # 기본 경로
annotations:
kubernetes.io/ingress.class: nginx # Ingress Controller 식별용 어노테이션
tls: [] # 로컬 테스트이므로 TLS(https) 비활성화
service:
type: ClusterIP # 기본 내부 서비스 타입 (LoadBalancer 아님)
extraArgs:
- --insecure # self-signed 인증서 경고 무시 (로컬 환경 편의용)
configs:
cm:
timeout.reconciliation: 180s # 앱 동기화 주기 (기본 180초)
controller:
# Argo CD Application Controller 리소스 제한 설정
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
repoServer:
# Git Repo에서 매니페스트를 처리하는 Repo Server 리소스 설정
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 300m
memory: 512Mi
redis:
# 캐싱용 Redis 리소스 설정 (Argo CD 내부 구성요소)
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 200m
memory: 256Mi
Ingress Controller 설치
- Rancher Desktop엔 기본으로 설치되어 있지 않음으로 추가하고 설정 한다.
# 레파지토리 추가
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# ingress-nginx 설치
helm install ingress-nginx ingress-nginx/ingress-nginx -n kube-system
업데이트 방법
helm upgrade argocd argo/argo-cd \
-n kafka-eda \
-f values.yaml
호스트 변경
127.0.0.1 argocd.example.com
접속
https://argocd.example.com
## 비밀번호 확인
kubectl -n kafka-eda get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
# 아이디 기본 admin

트러블 슈팅
완전삭제후 재설치 방법
# 삭제
# pvc 및 secret 모두 삭제 함
helm uninstall argocd -n kafka-eda
kubectl delete pvc -n kafka-eda -l app.kubernetes.io/instance=argocd
kubectl delete secret -n kafka-eda argocd-initial-admin-secret --ignore-not-found
# 재설치
helm install argocd argo/argo-cd \
-n kafka-eda \
-f values.yaml
엔직엑스 설치 명령어 및 내용 참고
- 인그레스가 설치되고나면 설치정보와 함께 사용 예시가 나온다.
# 인그레스 엔직엑스 설치
➜ k8s git:(feature/keda) ✗ helm install ingress-nginx ingress-nginx/ingress-nginx -n kube-system
NAME: ingress-nginx
LAST DEPLOYED: Fri Oct 10 14:11:16 2025
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the load balancer IP to be available.
You can watch the status by running 'kubectl get service --namespace kube-system ingress-nginx-controller --output wide --watch'
An example Ingress that makes use of the controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
namespace: foo
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- pathType: Prefix
backend:
service:
name: exampleService
port:
number: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
apiVersion: v1
kind: Secret
metadata:
name: example-tls
namespace: foo
data:
tls.crt: <base64 encoded cert>
tls.key: <base64 encoded key>
type: kubernetes.io/tls
트러블슈팅시 사용 명령어
# kube-system 네임스페이스의 인그레스 확인용
kubectl get all -n kube-system
# kube-system 네임스페이스의 파드 확인
kubectl get pod -n kube-system
# 네임스페이스 확인
kubectl get ns
# 서비스 정보 확인
kubectl get svc argocd-server -n kafka-eda
# 인그레스 정보 확인
kubectl get ingress -n kafka-eda
# 서비스의 인그레스 상세 셋팅 확인
kubectl describe ingress argocd-server -n kafka-eda
인그레스적용후 404 에러
rancher를 설치하게 되면 기본 traffic load balancer controller 가 설치되게 되고 새로 설치한 nginx ingress 와 충돌하게 되어 우리가 설정한 https://argocd.example.com 의로 연결되지 못하는 증상이 있다.
아래 명령어로 kube-systme의 namespage의 service들을 검색해 보면 traffic 서비스가 보인다.
# kubectl get service --namespage kube-system
argocd-server git:(feature/keda) ✗ kubectl get all -n kube-system
NAME READY STATUS RESTARTS AGE
pod/coredns-64fd4b4794-k6qn9 1/1 Running 4 (4h22m ago) 32d
pod/helm-install-traefik-crd-tr567 0/1 Completed 0 32d
pod/helm-install-traefik-wb4r7 0/1 Completed 1 32d
**pod/ingress-nginx-controller-79945f9c84-82wfz 1/1 Running 0 52m**
pod/local-path-provisioner-774c6665dc-7tszg 1/1 Running 6 (4h21m ago) 32d
pod/metrics-server-7bfffcd44-z6zdd 1/1 Running 6 (4h21m ago) 32d
pod/svclb-ingress-nginx-controller-8d15026f-qqhb5 0/2 Pending 0 52m
pod/svclb-traefik-9dac72cd-fb7qz 2/2 Running 8 (4h22m ago) 32d
**pod/traefik-c98fdf6fb-8gnxn 1/1 Running 4 (4h22m ago) 32d**
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
**service/ingress-nginx-controller LoadBalancer 10.43.128.197 <pending> 80:32665/TCP,443:30740/TCP 52m**
service/ingress-nginx-controller-admission ClusterIP 10.43.102.248 <none> 443/TCP 52m
service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 32d
service/metrics-server ClusterIP 10.43.21.198 <none> 443/TCP 32d
**service/traefik LoadBalancer 10.43.219.242 192.168.5.15 80:30329/TCP,443:30645/TCP 32d**
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/svclb-ingress-nginx-controller-8d15026f 1 1 0 1 0 <none> 52m
daemonset.apps/svclb-traefik-9dac72cd 1 1 1 1 1 <none> 32d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/coredns 1/1 1 1 32d
**deployment.apps/ingress-nginx-controller 1/1 1 1 52m**
deployment.apps/local-path-provisioner 1/1 1 1 32d
deployment.apps/metrics-server 1/1 1 1 32d
**deployment.apps/traefik 1/1 1 1 32d**
NAME DESIRED CURRENT READY AGE
replicaset.apps/coredns-64fd4b4794 1 1 1 32d
replicaset.apps/ingress-nginx-controller-79945f9c84 1 1 1 52m
replicaset.apps/local-path-provisioner-774c6665dc 1 1 1 32d
replicaset.apps/metrics-server-7bfffcd44 1 1 1 32d
replicaset.apps/traefik-c98fdf6fb 1 1 1 32d
NAME STATUS COMPLETIONS DURATION AGE
job.batch/helm-install-traefik Complete 1/1 6s 32d
job.batch/helm-install-traefik-crd Complete 1/1 5s
# 트레픽 인그레스 삭제
helm uninstall traefik --namespace kube-system
‘traefik’ 을 삭제한 뒤에 정상적으로 nginx ingress 로 동작되는것을 확인 할 수 있다.
'devops > Kubernetes' 카테고리의 다른 글
| kubernetes Ingress 란? (0) | 2025.10.30 |
|---|---|
| Spring boot KEDA 예제 (0) | 2025.10.12 |
| kubernetes namespage (0) | 2024.04.25 |
| kubernetes nodeport 란? k8s 네트워크 구성 (1) | 2024.04.25 |
| kubernetes minikube install (0) | 2024.04.25 |