기본적으로 Git 리포지토리를 수정하여 상태를 동기화하는 것이 GitOps의 정석적인 방식이겠지만, 개발 환경 ArgoCD에서 Auto Sync를 활성화하고, API를 통해 버전 정보만 갱신하여 Parameter Override를 수행하는 방식을 해봤다. 1. 인증 토큰(JWT) 발급ArgoCD API를 호출하기 위해서는 먼저 세션 토큰을 발급받아야 한다. 관리자 또는 사용자 계정 정보를 사용하여 /api/v1/session 엔드포인트에 POST 요청을 보낸다.ARGOCD_TOKEN=$(curl -s -k -X POST \ -H "Content-Type: application/json" \ -d '{"username":"", "password":""}' \ https://${ARGOCD_SERVER..
Linux
Kubernetes 환경에서 기본적으로 제공하는 CPU, Memory 메트릭이 아닌, 애플리케이션 고유의 메트릭(Custom Metric)을 기반으로 HPA(Horizontal Pod Autoscaler)를 구성하는 방법을 정리한다. 본 예제에서는 Apache HTTP Server(httpd)의 busy_workers 메트릭을 사용하여 트래픽 증가 시 자동으로 파드를 스케일 아웃하는 과정을 다룬다. 테스트한 전체 구조는 다음과 같다.1. Prometheus Adapter 설치Kubernetes의 HPA가 Prometheus의 메트릭을 이해할 수 있도록 prometheus-adapter를 설치한다. 이를 통해 Prometheus 쿼리 결과를 Kubernetes Custom Metrics API로 변환할 수..
개요서비스 로그를 활용한 Grafana 시각화를 목적으로, 서버에서 발생하는 서비스 로그를 파싱하여 유의미한 지표(Metric)를 추출하기 위해 mtail을 사용한다.mtail 설치 방법릴리스 페이지 확인: 공식 GitHub 릴리스 페이지에서 자신의 운영체제와 아키텍처에 맞는 최신 버전을 확인한다.다운로드: wget이나 curl을 사용하여 바이너리를 다운로드한다.wget https://github.com/google/mtail/releases/download/v3.0.8/mtail_3.0.8_linux_amd64.tar.gz압축 해제: 다운로드한 파일의 압축을 해제한다.tar -xzvf mtail_3.0.8_linux_amd64.tar.gz실행 파일 이동: 압축 해제 후 생성된 mtail 바이너리 파일을..
Ansible을 이용하여 배포를 자동화하는 시나리오를 설명한다. 제시된 예제는 Ansible의 핵심 구성 요소인 inventory, playbook, role, template이 어떻게 배포 파이프라인을 자동화하는지 보여준다.전체 구조는 다음과 같다ansible-deploy/├── inventory.ini # (inventory) 대상 서버 목록├── svc_deploy.yml # (playbook) 작업 흐름의 시작점└── roles/ # (role) 재사용 가능한 작업 단위들의 모음 ├── config/ # 'config' role │ └── tasks/ │ └── mai..
Minikube와 같은 단일 노드 환경은 쿠버네티스를 쉽고 빠르게 체험할 수 있는 좋은 도구지만 컨트롤 플레인과 워커 노드가 어떻게 상호작용하며 클러스터를 이루는지 그 기본 구조를 이해하기 위해, 가상머신(VM) 3대를 이용하여 쿠버네티스 환경을 구축해본다. 항목버전OSRocky Linux 8.10Kubernetesv1.32.3Containerd1.6.32Ansible2.16.3 진행 과정에서 ansible을 사용했다. ansible의 간단한 설정 방법은 https://hd-engineering.tistory.com/13 Ansible 간단 설정1. SSH 키 배포 (초기 설정)SSH 키 생성 (제어 노드에서)ssh-keygen# → 엔터 3번 (기본 경로 및 패스프레이즈 없이 생성)대상 노드에 공개 키..
rsync(Remote Sync)는 원격 또는 로컬 컴퓨터 간에 파일과 디렉터리를 효율적으로 동기화하는 데 사용한다1. 기본 사용법 및 핵심 옵션rsync [옵션] [소스 경로] [목적지 경로]가장 보편적으로 사용하는 아카이브 모드 예시# source_directory/의 내용을 destination_directory/로 동기화한다.rsync -avz source_directory/ destination_directory/-a (archive): 아카이브 모드. 권한(-p), 소유권(-o, -g), 심볼릭 링크(-l), 타임스탬프(-t) 등 파일의 주요 속성을 대부분 그대로 보존한다. 내부적으로 -rlptgoD 옵션을 합친 것과 동일하게 동작한다.-v (verbose): 동기화 진행 상황을 터미널에 상세..
1단계: Spring Boot 애플리케이션 Docker 이미지 build, push jar 파일을 실행할 수 있는 Docker 이미지를 만들고, Kubernetes 클러스터가 접근할 수 있도록 Docker Hub와 같은 컨테이너 레지스트리에 push해야함.Dockerfile 작성프로젝트 루트에 다음과 같이 Dockerfile을 작성.# 베이스 이미지로 OpenJDK 17 버전.FROM openjdk:17# 빌드 시 인자로 jar 파일의 경로.ARG JAR_FILE=*.jar# jar 파일을 app.jar 라는 이름으로 컨테이너에 복사.COPY ${JAR_FILE} app.jar# 컨테이너가 시작될 때 실행될 명령어.ENTRYPOINT ["java","-jar","/app.jar"]Docker 이미지 bu..
1. SSH 키 배포 (초기 설정)SSH 키 생성 (제어 노드에서)ssh-keygen# → 엔터 3번 (기본 경로 및 패스프레이즈 없이 생성)대상 노드에 공개 키 배포for i in {1..5}; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@ygbaek0${i}.gitcluster.comdone비밀번호 없이 SSH 접속 가능2. 설정 파일/etc/ansible/ansible.cfg[defaults]inventory=/etc/ansible/hosts# SSH 최초 접속 시 host key 확인 절차 생략host_key_checking = False3. 인벤토리 파일/etc/ansible/hosts[cluster]ygbaek01.cluster.comygbaek02.cluster..