Kustomize secretGenerator와 Argo CD 동기화 오류 해결하기
·
Devops/Kubernetes
개요이번 글에서는 Kustomize의 secretGenerator를 사용해 Secret을 생성하던 중, Argo CD에서 동기화 오류가 발생한 문제를 정리합니다. 로컬에서는 .env 파일을 기준으로 Secret을 생성해 사용할 수 있었지만, 해당 .env 파일은 민감 정보이기 때문에 GitHub에 업로드하지 않았습니다. 그 결과 Argo CD가 Git 저장소를 기준으로 매니페스트를 생성하는 과정에서 .env 파일을 찾지 못해 에러가 발생했습니다.문제 상황Kustomize에서 다음과 같은 방식으로 Secret을 생성하고 있었습니다.secretGenerator: - name: user-database-secret envs: - secrets/user-database-secret.env그리고 ..
Helm으로 Argo CD 설치 후 Gateway API와 TLS로 접속 구성하기
·
Devops/Kubernetes
이번 글에서는 Kubernetes 클러스터에 Argo CD를 설치하고, Gateway API를 이용해 외부에서 접속할 수 있도록 구성하는 과정을 정리합니다. 설치는 Helm Chart를 사용했으며, 외부 노출은 Gateway API를 통해 처리했습니다. 로컬 테스트 환경에서는 Argo CD가 생성한 인증서를 별도의 TLS Secret으로 복사해 Gateway에서 사용하도록 구성했습니다.구성 개요전체 구성 흐름은 다음과 같습니다.Helm으로 Argo CD 설치Gateway에서 사용할 TLS Secret 준비Gateway와 HTTPRoute를 적용해 Argo CD Server 외부 노출초기 admin 계정으로 로그인Argo CD Application 리소스 생성이 글에서는 Gateway가 HTTPS를 종료하..
Kubernetes kubelet의 컨테이너 로그 로테이션 설정 정리
·
Devops/Kubernetes
Kubernetes에서 컨테이너 로그는 노드에 계속 쌓일 수 있기 때문에, 별도의 관리가 없다면 디스크 사용량 문제가 발생할 수 있습니다.다행히 kubelet은 기본적으로 컨테이너 로그에 대해 로테이션을 수행합니다. 즉, 로그 파일이 일정 크기를 넘으면 새 파일로 교체하고, 오래된 로그 파일은 일정 개수까지만 유지합니다.이번 글에서는 kubelet의 컨테이너 로그 로테이션 기본 설정과, 로그 보관 시 주의할 점을 정리합니다.kubelet의 기본 컨테이너 로그 로테이션 설정Kubernetes 공식 문서에 따르면 kubelet은 컨테이너 로그 로테이션을 위해 다음 설정을 제공합니다.containerLogMaxSize: 10MicontainerLogMaxFiles: 5각 설정의 의미는 다음과 같습니다.cont..
Kubernetes 로컬 환경에 Private Registry 배포하고 이미지 Push/Pull 설정하기
·
Devops/Kubernetes
이번 글에서는 Kubernetes 클러스터 내부에 Private Registry를 배포하고, 로컬 Docker 환경과 Kubernetes 노드에서 해당 Registry를 사용할 수 있도록 설정하는 과정을 정리합니다. 구성은 다음과 같습니다.Registry 데이터를 저장할 PersistentVolume / PersistentVolumeClaimRegistry Pod를 실행할 Deployment외부에서 Registry에 접근하기 위한 NodePort ServiceDocker에서 HTTP Registry로 이미지를 push하기 위한 insecure registry 설정Kubernetes 노드의 containerd에서 HTTP Registry 이미지를 pull할 수 있도록 하는 설정이 예제에서는 NFS 볼륨을 ..
로컬 Kubernetes에서 MetalLB로 LoadBalancer IP 할당하기
·
Devops/Kubernetes
로컬 Kubernetes 클러스터에서는 클라우드 환경처럼 LoadBalancer 타입 Service에 외부 IP가 자동으로 할당되지 않습니다.예를 들어 클라우드 Kubernetes 환경에서는 type: LoadBalancer Service를 생성하면 클라우드 로드밸런서가 생성되고 외부 IP가 할당됩니다.하지만 로컬 Kubernetes 환경에서는 별도의 로드밸런서 구현체가 없기 때문에 Service의 EXTERNAL-IP가 상태로 남는 경우가 많습니다.이 문제를 해결하기 위해 사용할 수 있는 도구가 MetalLB입니다.MetalLB는 로컬 또는 온프레미스 Kubernetes 환경에서 LoadBalancer 타입 Service에 외부 IP를 할당해주는 로드밸런서 구현체입니다.이번 글에서는 MetalLB를 ..
Gateway API와 Envoy Gateway로 로컬 Kubernetes 서비스 노출하기
·
Devops/Kubernetes
Kubernetes에서 서비스를 외부로 노출할 때는 보통 Ingress를 많이 사용합니다.하지만 최근에는 Ingress보다 더 확장성 있고 명확한 라우팅 모델을 제공하는 Gateway API를 사용할 수 있습니다.이번 글에서는 로컬 Kubernetes 환경에서 port-forward 없이 서비스에 접근하기 위해 Gateway API와 Envoy Gateway를 구성한 과정을 정리합니다.구성에 사용한 주요 요소는 다음과 같습니다.Gateway APIKubernetes에서 외부 트래픽을 서비스로 라우팅하기 위한 표준 API입니다.GatewayClass, Gateway, HTTPRoute 같은 리소스를 사용해 라우팅 구성을 정의합니다.Envoy GatewayGateway API를 구현하는 컨트롤러입니다.Gat..
Kubernetes에서 NFS 스토리지 구성하기
·
Devops/Kubernetes
Kubernetes에서 여러 Pod가 하나의 볼륨을 함께 사용해야 하는 경우가 있습니다.대표적으로 ReadWriteMany 접근 모드가 필요한 상황인데, 이때 NFS를 이용하면 비교적 간단하게 공유 스토리지를 구성할 수 있습니다.이번 글에서는 다음 두 가지 방식을 정리합니다.NFS 서버를 직접 구성한 뒤 PV/PVC를 수동으로 생성하는 방식NFS Provisioner를 설치해 PVC 생성 시 PV가 자동으로 생성되도록 하는 방식1. NFS 서버 설정먼저 Control Plane 노드에 NFS 서버를 설치하고, 공유할 디렉터리를 생성합니다.sudo apt install nfs-kernel-server -ysudo mkdir /nfsvolumeecho " Hello NFS Volume " | sudo tee..