전체 글 111

[K8S] configMap 과 Demonset을 활용해 인증서 배포하기

Kubernetes 클러스터에 사설 레지스트리 인증서 주입 (DaemonSet 활용)사설 이미지 레지스트리(예: Harbor)를 자체 서명된(self-signed) SSL 인증서와 함께 사용하는 경우, Kubernetes 클러스터의 모든 노드가 해당 레지스트리를 신뢰하도록 인증서를 설치해야 함. 이 과정을 수동으로 진행하는 것은 비효율적이므로, ConfigMap과 DaemonSet을 활용하여 자동화함.ConfigMap의 개념과 활용ConfigMap은 Kubernetes에서 민감하지 않은 설정 데이터(configuration data)를 키-값(key-value) 쌍으로 저장하는 API 객체임. 애플리케이션 코드와 설정을 분리하여 컨테이너 이미지의 재사용성을 높이고, 설정을 중앙에서 관리할 수 있게 해줌...

인프라 2025.08.09

Tailscale 로 zerotrust 아키텍쳐 적용하기

기획 의도클러스터 를 구축 하고 나서보니 내부 서비스들 에 안전하게 접근 할 수 있는 망이 필요했다. 그래서 일반적인 vpn 을 생각했었는데 예전의 경험들통해 공유기에서 L2TP 프로토콜을 통한 vpn은 속도가 너무 느렸다. 그래서 알아 보던 중 일반적인 vpn 이 사용하는 Hub and Spoke 방식의 vpn 을 우선적으로 생각 했었고 wireguard 를 생각했다.그래서 처음에는 wireguard 를 구축 하려 시도 했는데 wireguard 를 사용 하여 vpn을 구축 했을시 한가지 한계점이 있었다. 서버가 일종의 라우터 역할 을 하게 된다는것 이었다. 이것 자체가 문제가 되는 것은 아니였는데 내가 구축 하고자하는 망의 기능 을 구현하는데 있어 부합하지 않았다.내가 vpn을 통해서 구현 하고 싶은 ..

인프라 2025.07.16

[K8S] Harbor : LoadBalancer 및 TLS 설정

1. 배경: 왜 Ingress-Nginx와 MetalLB가 필요한가?Kubernetes 클러스터에 Harbor와 같은 서비스를 배포하면, 기본적으로는 클러스터 내부에서만 접근 가능한 ClusterIP 타입으로 생성된다. 이를 외부에서 접근 가능하게 하려면 NodePort나 LoadBalancer 타입을 사용해야 한다.NodePort의 한계: 클러스터의 모든 노드 IP와 특정 포트(예: 3xxxx)를 통해 접근해야 하므로, URL이 복잡해지고 노드 장애 시 IP를 변경해야 하는 불편함이 있다. 또한, 표준 웹 포트인 80/443을 직접 사용하기 어렵다.LoadBalancer의 필요성: 클라우드 환경(AWS, GCP 등)에서는 LoadBalancer 타입을 지정하면 클라우드 제공업체가 외부 IP를 가진 로드..

인프라 2025.06.17

[K8S] 클러스터의 리소스 분배 전략

Kubernetes 클러스터의 효율적인 리소스 분배 전략이 글에서는 Kubernetes 클러스터의 안정성, 성능, 그리고 비용 효율성을 좌우하는 핵심 요소인 리소스 분배 전략에 대해 알아 보고자 하나. 단순히 Pod를 배포하는 것을 넘어, 클러스터의 자원을 어떻게 효율적으로 할당하고 관리할 것인지에 대한 구체적인 방법론을 알아보자.1. 리소스 단위의 이해: 요청(Request)과 제한(Limit)Kubernetes에서 리소스 관리의 가장 기본적인 단위는 **요청(Request)**과 **제한(Limit)**이다. 이 두 가지 값을 통해 우리는 Pod가 사용할 컴퓨팅 자원(CPU, 메모리)의 경계를 명확히 정의한다.요청 (Request): Pod가 정상적으로 실행되기 위해 보장받아야 할 최소한의 리소스 양..

인프라 2025.06.15

[Jenkins] Jenkins 빌드 머신 설정 하기

Jenkins Agent 설정 (Agent.jar)구조Master ← Agent 연결: Agent 노드가 Master로 접속을 시작하는 방식.Inbound Agent: SSH 방식과 달리 Agent 노드에 Inbound Port를 열 필요가 없음.→ 방화벽 설정이 Agent 노드에 필요 없어 구성이 용이함.전제 조건Agent 노드 OS: Linux (Ubuntu/Debian 기반 예시)Java (JRE) 설치: Agent 프로그램 실행을 위해 JRE가 필요함.# JRE 설치 (예: OpenJDK 21)sudo apt-get updatesudo apt-get install -y openjdk-21-jre연결 절차 (임시)Jenkins UI (노드 관리 -> 신규 노드)에서 제공하는 명령어를 기반으로 Age..

인프라 2025.06.14

[Jenkins] Helm으로 Jenkins 설치하기

Kubernetes 환경에 Helm으로 Jenkins 설치하기이 문서는 Kubernetes 클러스터에 Helm 차트를 사용하여 Jenkins를 설치하고, 데이터의 영구 저장을 위해 영구 볼륨(Persistent Volume)을 설정하는 과정을 기술함.Jenkins와 영구 볼륨(Persistent Volume)의 필요성Kubernetes의 기본 단위인 파드(Pod)는 **비영구적(ephemeral)**이라는 특징을 가짐. 이는 파드가 재시작되거나 다른 노드로 재배치될 경우, 파드 내부에 저장된 모든 데이터가 사라지는 것을 의미함.Jenkins는 다음과 같은 핵심 데이터를 /var/jenkins_home 디렉터리에 저장함:Job 구성: 생성한 모든 빌드 및 배포 파이프라인 설정플러그인: 설치된 모든 플러그인..

인프라 2025.06.13

[K8S] 클러스터 붕괴 원인 분석 및 복구 과정

1. 장애 발생 및 확산 과정운영 중인 Kubernetes 클러스터에서 Harbor 스케일링 작업 중 발생한 초기 오류가, 연쇄 반응을 일으키며 클러스터 전체 붕괴로 이어진 과정을 순서대로 기술함.1. Harbor 설치 후 노드 증설초기 Harbor 설치 후, 클러스터에 워커 노드를 추가했음.2. Harbor 컴포넌트 확장 시도 및 실패증설된 노드에 Pod를 분산시키기 위해 helm upgrade 명령으로 Harbor의 주요 컴포넌트(core, jobservice, registry) 복제본(replica)을 확장하려고 시도함.helm upgrade harbor harbor/harbor -n harbor \ -f values.yaml \ --set core.replicas=2 \ --set jobse..

인프라 2025.06.13

[Proxmox VE] QEMU Guest Agent 설치 및 활성화

QEMU Guest Agent 설치 및 활성화제공된 명령어는 가상 머신(VM) 내에서 QEMU Guest Agent를 설치하고 실행하는 과정임. 이 작업은 Proxmox VE와 같은 가상화 환경에서 VM의 관리 효율성과 성능을 크게 향상시킴.명령어sudo apt update & sudo apt install qemu-guest-agent -ysudo systemctl restart qemu-guest-agent.service QEMU Guest Agent의 역할과 장점QEMU Guest Agent는 가상 머신(게스트 OS) 내에 설치되어 호스트 시스템(예: Proxmox VE)과 통신하는 역할을 수행하는 서비스.정확한 VM 정보 전달: 호스트 시스템이 VM의 현재 IP 주소, OS 정보, 메모리 사용량 ..

인프라 2025.06.09

[K8s] Proxmox VE 위에 K8S 설정하기

[단계 1] 가상 머신(VM) 준비 및 기본 설정클러스터를 구성할 각 노드에 대한 가상 머신을 준비하고, 네트워크에서 식별 가능하도록 고유한 호스트 이름을 설정하는 단계이다.가상 머신 생성Proxmox VE의 템플릿 복제 기능을 사용하여 아래 사양으로 VM을 생성한다.컨트롤 플레인: k8s-master (CPU: 2코어, RAM: 6GB)워커 노드: k8s-worker-01 ~ k8s-worker-06 (CPU: 2코어, RAM: 4GB)호스트 이름 설정생성된 모든 VM에 각각 SSH로 접속하여, hostnamectl 명령어를 통해 사전에 계획된 호스트 이름을 설정한다. Kubernetes 클러스터에서 각 노드는 고유한 이름으로 식별되어야 한다.sudo hostnamectl set-hostname [단계..

인프라 2025.06.01

[K8S] 쿠버네티스 이해 하기

1. 쿠버네티스란 ?과거의 애플리케이션은 모든 기능이 하나의 거대한 단위로 묶인 모놀리식(Monolithic) 아키텍처가 일반적이었다. 이는 개발과 배포가 단순하다는 장점이 있지만, 애플리케이션이 복잡해질수록 수정, 테스트, 배포가 어려워지고 특정 기능의 장애가 전체 시스템의 장애로 이어지는 문제를 가지고 있다.이러한 문제를 해결하기 위해 등장한 것이 **마이크로서비스 아키텍처(MSA)**이다. 각 기능을 독립적인 작은 서비스로 분리하여 개발하고 배포하는 방식이다. MSA는 유연성과 확장성, 장애 격리 측면에서 큰 이점을 제공하지만, 수많은 서비스를 관리하고 배포, 연결하는 것은 새로운 차원의 복잡성을 야기했다.쿠버네티스는 바로 이 마이크로서비스 환경의 복잡성을 해결하기 위한 솔루션이다. 여러 서버(노드..

인프라 2025.05.27