전체 글
-
Redis는 스토리지 공간 사용 용도DevOps 2025. 3. 23. 13:36
Redis는 기본적으로 인메모리(in-memory) 데이터베이스지만, 스토리지(디스크 공간)도 중요한 역할을 합니다. 아래에 Redis가 스토리지를 사용하는 주요 용도를 정리해볼게요. Redis가 스토리지를 사용하는 주요 용도1. 지속성(Persistence) – 데이터 저장Redis는 메모리에서 동작하지만, 장애 발생 시 데이터를 복구할 수 있도록 디스크에 데이터를 저장할 수 있는 Persistence(지속성) 기능을 제공합니다.🔸 RDB (Redis Database Snapshot)일정 주기마다 메모리 상태 전체를 디스크에 저장 (스냅샷)저장 위치: dump.rdb적은 디스크 I/O, 빠른 복구 속도단점: 마지막 스냅샷 이후의 데이터는 유실 가능🔸 AOF (Append Only File)모든 쓰기..
-
Kubernetes Operator의 RequeueAfter 개념Kubernetes 2025. 3. 22. 18:17
Kubernetes Operator를 만들 때 Reconcile 루프를 일정 시간 후 다시 실행하도록 예약하는 메커니즘입니다.Kubernetes의 controller-runtime 라이브러리에서 주로 사용되고, 특히 외부 상태 동기화, 실패 재시도, 일정 주기 polling이 필요할 때 유용해요. 기본 개념: RequeueAfterreturn ctrl.Result{RequeueAfter: 30 * time.Second}, nil 이 코드는 다음과 같은 의미예요:"현재 리소스에 대해 30초 후에 다시 Reconcile을 호출해줘."즉, Reconcile을 강제로 예약해서 재호출하도록 만드는 기능입니다. 왜 필요할까?Reconcile() 함수는 일반적으로 리소스에 이벤트가 발생했을 때만 호출됩니다.하지만 다..
-
Kubernetes의 동작 철학 중 하나인 Level-Triggered 방식의 개념Kubernetes 2025. 3. 22. 18:10
Kubernetes의 동작 철학 중 하나인 Level-Triggered 방식은 Kubernetes가 어떻게 상태를 감지하고 반응(reconcile) 하는지를 이해하는 데 아주 핵심적인 개념입니다.이걸 Edge-Triggered와 비교하면서 설명하면 훨씬 명확해져요. Kubernetes는 Level-Triggered 방식으로 동작하며,이는 Polling 기반 + 이벤트 알림을 혼합한 구조예요.핵심은 “현재 상태와 원하는 상태의 차이를 계속 관찰하고, 필요할 때만 동작”한다는 점입니다. 개념 정리구분Edge-TriggeredLevel-Triggered (K8s 방식)의미변화가 발생했을 때만 트리거됨원하는 상태와 현재 상태의 차이를 지속적으로 확인예시파일이 변경된 순간에만 이벤트 발생“이 파일이 이 상태인지”..
-
K8S Operator의 Custom Resource 상태 정보를 외부 DB나 외부 API 호출을 통해서 업데이트 해야하는 경우Kubernetes 2025. 3. 22. 17:58
Kubernetes Operator에서 Custom Resource(CR)의 상태 정보를 외부 DB나 외부 API 호출을 통해 업데이트해야 하는 경우, reconcile 루프에서 무조건 호출하는 건 anti-pattern 입니다. 목표: "상태 변화가 있을 때만 외부 상태를 조회하고 .status를 업데이트한다 [패턴 1] 조건부 외부 API 호출 (Reconcile 루프 내 최소 호출)CR의 .spec 또는 .status에 변화가 있을 때만 외부 API/DB를 조회.외부 상태를 조회해 .status를 업데이트.구현 예시:if hasMeaningfulChange(myResource.Spec, myResource.Status) { externalStatus := queryExternalAPI(myRe..
-
Kubernetes Operator를 작성할 때 피해야 할 Anti-patternsKubernetes 2025. 3. 22. 17:37
🔁 1. Reconciliation Loop 남용 / 비효율적인 처리문제: Reconcile 루프에서 너무 많은 로직을 처리하거나, 상태가 바뀌지 않아도 리소스를 계속 업데이트하거나, 외부 API를 호출하는 경우.예시:매번 Deployment를 업데이트하여 rollout이 반복됨외부 DB나 API를 reconcile 루프마다 계속 호출해결: 상태 변화가 있을 때만 필요한 작업을 수행하고, idempotent하게 구현.📦 2. Status 필드 미사용 또는 오용문제: CR의 .status 필드를 사용하지 않거나, 너무 많은 정보를 넣어서 상태 추적이 어려운 경우.해결: 적절한 정보를 넣어 관찰 가능한 상태를 만들고, 컨트롤러는 이 상태를 기준으로 동작해야 함.🧠 3. 컨트롤러가 너무 많은 책임을 가짐..
-
Redis 클러스터를 구성하는 방법과 운영 시 주의점DevOps 2025. 3. 22. 17:25
✅ Redis 클러스터란?Redis 클러스터(Redis Cluster)는 데이터를 여러 노드에 자동으로 분산 저장하여 수평 확장성과 고가용성을 제공하는 Redis의 기능입니다.데이터를 slot(0~16383)으로 나누어 여러 노드에 분산마스터-레플리카 구조로 장애 조치 가능Redis 3.0 이상에서 지원 📦 Redis 클러스터 구성 방법1. 노드 준비최소 3개의 마스터 노드 필요 (고가용성을 위해 보통 마스터 3 + 각 마스터당 레플리카 1씩 총 6개 구성)Redis는 각 인스턴스(노드)를 별도의 포트 또는 서버에서 실행2. Redis 설정 파일 (redis.conf)클러스터 모드 활성화:cluster-enabled yescluster-config-file nodes.confcluster-node-ti..
-
RAID (Redundant Array of Independent/Inexpensive Disks)DevOps 2025. 3. 22. 13:01
RAID(Redundant Array of Inexpensive Disks)는 여러 개의 하드디스크(또는 SSD)를 하나의 논리적인 장치처럼 묶어 성능 향상, 데이터 보호 또는 두 가지를 동시에 달성하려는 기술이에요. RAID는 여러 방식(레벨)으로 구성할 수 있고, 각 레벨마다 장단점이 있습니다. ✅ RAID의 주요 목적성능 향상 (Performance)데이터 보호 (Redundancy)확장성 (Scalability)📚 RAID 레벨별 특징RAID 유형최소 디스크 수특징장점단점RAID 02스트라이핑 (striping)빠른 읽기/쓰기 속도장애 복구 없음, 하나라도 망가지면 전체 데이터 손실RAID 12미러링 (mirroring)높은 데이터 안정성저장공간 비효율 (용량의 50% 사용)RAID 53스트라이..
-
Custom Pod SchedulingKubernetes 2025. 3. 21. 06:54
GPU, 데이터 로컬리티, 멀티 테넌시 등의 특별한 요구사항이 있다면 Scheduler Extender를 먼저 고려하고, 근본적인 변경이 필요하면 Custom Scheduler를 구축하는 것이 좋다 맞춤형 스케줄링(Custom Scheduling)이 필요한 유즈케이스 Kubernetes 기본 스케줄러는 일반적인 워크로드 배치를 최적화하지만, 특정한 요구사항을 가진 애플리케이션에는 맞춤형 스케줄링이 필요할 수 있습니다. 맞춤형 스케줄링이 필요한 유즈케이스 1. GPU 워크로드 최적화 • 특정 GPU 모델(A100, V100 등)을 요구하는 경우 • 사용 가능한 GPU 메모리를 기반으로 Pod을 배치해야 하는 경우 2. 데이터 로컬리티 최적화 • Pod이 특정 데이터 노드와 가까운 곳에서 실행되어야 성능이..