전체 글

데이터엔지니어 / Data Engineer
Operating System/Kubernetes

[Kubernetes] Keycloak 개념

KeycloakKeycloak은 오픈소스 통합 인증 및 액세스 관리 솔루션(Identity & Access Management, 이하 IAM)임.주로 싱글 사인온(SSO), OAuth 2.0, OpenID Connect(OIDC), SAML 등의 표준 프로토콜을 지원하여 사용자 인증과 권한 관리를 중앙 집중화해주는 플랫폼임.Red Hat이 지원하는 프로젝트로서, 회사 혹은 조직 환경에서 애플리케이션과 서비스를 효율적으로 보호하고 사용자 인증을 일원화하기 위해 많이 사용됨. 통합 IAM 플랫폼으로서의 Keycloak1. 싱글 사인온(SSO) 제공여러 애플리케이션, 마이크로서비스가 있을 때, Keycloak을 통해 한 번 로그인하면 다른 서비스에도 별도의 로그인 없이 접근할 수 있음.세션 관리, 토큰 발급 ..

Operating System/Kubernetes

[Kubernetes] Airflow의 웹서버 개념

Airflow WebServerApache Airflow를 쿠버네티스(Kubernetes) 환경에서 운영할 때, Airflow WebServer는 Airflow 시스템의 UI를 제공하는 핵심 구성 요소임.사용자는 WebServer를 통해 DAG(Directed Acyclic Graph) 편집, 모니터링, 실행 상태 확인, 로그 확인, 설정 변경 등을 수행할 수 있음.특히 쿠버네티스에서 Airflow를 운영할 때에는 WebServer 역시 컨테이너로 배포되어 동작하며, Helm 차트 등을 활용해 스케일링, 보안, 네트워킹 등 다양한 요소를 관리할 수 있음. Airflow 컴포넌트 개요1. SchedulerDAG을 해석하고, 태스크를 스케줄링함. 2. Worker스케줄링된 태스크(작업)을 실행함. (Cele..

Operating System/Kubernetes

[Kubernetes] Jupyterhub 개념

JupyterhubJupyterHub는 여러 사용자가 동시에 Jupyter 노트북 서버(또는 JupyterLab)를 사용할 수 있도록 해주는 멀티 사용자 환경을 제공하는 오픈소스 도구임.이를 통해 중앙 집중적으로 사용자 인증과 환경 관리, 자원 할당 등을 수행할 수 있어서 대규모 조직(예: 대학교, 연구소, 기업)에서 편리하게 Jupyter 기반 분석 환경을 제공할 수 있음. Jupyterhub 핵심 개념1. 멀티 사용자(Multi-user) 환경JupyterHub는 여러 사용자가 동시에 Jupyter 노트북을 사용하도록 허용함.사용자는 각자 분리된 서버 세션을 갖게 되고, 자신의 Python/R/Julia 등 커널 환경에서 독립적으로 작업을 수행함.중앙 집중형 서버에 의해 사용자의 인증, 환경 프로비저..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스에서 서비스 메쉬 개념

쿠버네티스에서 서비스 메쉬 개념쿠버네티스에서 마이크로서비스 아키텍처를 운영하다 보면, 서비스 간 트래픽 제어·보안·관찰성(Observability) 등 통신 전반을 체계적으로 관리해야 할 필요성이 커짐.이를 효과적으로 해결하기 위한 핵심 접근 방식이 바로 서비스 메쉬(Service Mesh)임.서비스 메쉬는 “서비스 간 통신을 전담하는 별도의 인프라 레이어”임.애플리케이션 코드 변경 없이도 다양한 트래픽 관리, 정책 적용, 모니터링, 보안 기능 등을 제공함. 서비스 메쉬의 정의서비스 메쉬(Service Mesh)는 마이크로서비스 간의 네트워크 통신을 일관되고 표준화된 방식으로 제어, 관측, 보호하기 위한 인프라 구성 요소임.보통 Sidecar 프록시(예: Envoy)를 각 서비스 파드(Pod)에 주입하여..

Operating System/Kubernetes

[Kubernetes] Ingress + ClusterIp 및 Ingress + NodePort

Ingress + ClusterIp 및 Ingress + NodePort쿠버네티스 환경에서 애플리케이션을 외부로 노출하는 방법은 다양함.크게 보면 다음과 같은 방식이 있음. 1. Service 타입을 통해 직접 노출 : NodePort, LoadBalancer, (혹은 클러스터 내부 전용) ClusterIP2. Ingress를 활용하여 여러 서비스를 단일 진입점(도메인/URL/path 등)으로 외부에 노출 인그레스 컨트롤러가 각 애플리케이션 서비스를 바라볼 때, 그 서비스들을 NodePort 형태로 둘 것인가(=Ingress + NodePort), 아니면 ClusterIP 형태로 둘 것인가(=Ingress + ClusterIP)에 대한 선택이라고 볼 수 있음.결론을 먼저 말하자면, 대부분의 경우 ‘Ing..

Operating System/Kubernetes

[Kubernetes] CoreDNS 개념

쿠버네티스의 CoreDNSCoreDNS는 쿠버네티스 클러스터 내에서 DNS(Domain Name System) 서비스를 제공하는 기본 도구임.클러스터의 네트워킹 구조에서 중요한 역할을 하며, Pod와 서비스 간의 네트워크 통신을 효율적으로 관리함.쿠버네티스 1.13부터는 kube-dns를 대체하여 기본 DNS 서버로 채택됨. CoreDNS의 주요 역할1. DNS 이름 해석클러스터 내부에서 서비스 이름을 IP 주소로 변환함.예: my-service.default.svc.cluster.local → 10.0.0.1. 2. 클러스터 서비스 검색서비스 검색(Service Discovery)을 지원하며, 클러스터 내에서 실행 중인 서비스와 Pod를 찾는 데 사용됨. 3. 외부 도메인 쿼리 전달클러스터 외부의 도메..

Operating System/Kubernetes

[Kubernetes] NodeSelector 개념

쿠버네티스의 NodeSelectorNodeSelector는 쿠버네티스에서 Pod를 특정 노드에 스케줄링하기 위한 간단한 메커니즘임.Pod가 실행될 노드를 지정하는 방법 중 가장 기본적이고 직관적인 방식임. NodeSelector의 개념쿠버네티스 클러스터에는 여러 노드가 존재하며, 각 노드는 특정 레이블을 가질 수 있음.NodeSelector는 Pod의 매니페스트에서 nodeSelector 필드를 사용하여 Pod가 실행될 노드의 조건을 설정함.설정된 레이블과 일치하는 노드에만 해당 Pod를 스케줄링할 수 있음. NodeSelector의 동작 원리1. 노드 레이블노드는 클러스터 관리자가 레이블을 수동으로 지정하거나 자동화된 방식으로 특정 레이블을 부여받음.레이블은 키-값 쌍으로 표현됨.예: disktype=..

Operating System/Kubernetes

[Kubernetes] Ingress Controller

쿠버네티스의 인그레스 컨트롤러인그레스 컨트롤러는 쿠버네티스에서 외부 트래픽(HTTP/HTTPS)을 클러스터 내부의 서비스로 라우팅하는 역할을 담당하는 컴포넌트임.이는 인그레스 리소스(Ingress Resource)와 함께 작동하며, 클러스터 외부에서 클러스터 내부의 애플리케이션에 접근하기 위한 고급 트래픽 관리 기능을 제공함. Ingress와 Ingress Controller의 개념1. Ingress쿠버네티스의 리소스 타입 중 하나로, HTTP/HTTPS 트래픽의 라우팅 규칙을 정의함.클라이언트 요청을 특정 서비스로 라우팅하기 위해 호스트 기반 또는 경로 기반 규칙을 지정할 수 있음.예를 들어, 특정 도메인(example.com)이나 경로(/api, /blog)로 들어오는 요청을 각각 다른 서비스로 전달..

Operating System/Kubernetes

[Kubernetes] Airflow Github Oauth 연동시 Github 설정

Github Token 얻는 방법1. 깃허브 접속2. 프로필 클릭3. Settings 클릭4. Developer Settings 클릭5. Personal access tokens에서 Token (classic) 클릭6. Generate New Token (classic) 클릭 Github Team ID 얻는 방법1. curl 설치2. 명령어 입력curl -H "Authorization: token " https://api.github.com/orgs/__단체이름__/teams k8s Airflow에서 Github Oauth 연동시 Github 설정1. 깃허브 접속2. 프로필 클릭3. Settings 클릭4. Developer Settings 클릭5. Oauth Apps 클릭6. New Oauth app ..

Operating System/Kubernetes

[Kubernetes] podDisruptionBudget 개념

쿠버네티스의 Pod Disruption Budget (PDB)PodDisruptionBudget(PDB)는 쿠버네티스에서 워크로드의 가용성을 보장하면서도 클러스터에서 안전한 스케일링이나 유지보수 작업을 수행할 수 있도록 도와주는 메커니즘임.주로 애플리케이션의 고가용성을 유지하면서 Pod를 중단시키는 작업을 제어하는 데 사용됨. PDB의 주요 목적1. 중단 제한PDB는 장애 발생 시 클러스터 관리자가 수동으로 Pod를 중단하거나 노드 스케일링, 업데이트와 같은 작업 중 Pod의 중단이 일정 수준 이하로 유지되도록 보장함.이는 애플리케이션의 서비스 중단을 방지하기 위한 것임. 2. 자동화된 워크플로 제어노드 업그레이드(예: kubelet 업그레이드), 클러스터 유지보수(예: Cordon/Drain 작업) 및..

Operating System/Kubernetes

[Kubernetes] Airflow의 Executor 종류

Airflow의 ExecutorApache Airflow의 Executor는 태스크를 실행하는 방식과 실행 환경을 결정하는 핵심 컴포넌트임.Executor는 워크플로우의 성능과 확장성을 직접적으로 좌우함.각 환경에 적합한 Executor를 선택하는 것이 중요함. Airflow의 Executor 종류1. SequentialExecutor2. LocalExecutor3. CeleryExecutor4. KubernetesExecutor5. DaskExecutor6. DebugExecutor SequentialExecutor1. 특징기본 설정으로 제공되며, 태스크를 순차적으로 하나씩 실행함.데이터베이스와 함께 Airflow 초기 설정 및 테스트용으로 적합함. 2. 장점간단하고 설정이 필요 없음.로컬 테스트 및 ..

Operating System/Kubernetes

[Kubernetes] k8s, PGBouncer 개념

PGBouncerPGBouncer는 PostgreSQL의 경량 프록시 및 연결 풀링(connection pooling) 솔루션임.PostgreSQL은 연결 생성 및 관리에 리소스를 소모하기 때문에 많은 애플리케이션이 짧고 빈번한 데이터베이스 연결을 사용하는 경우 성능 저하를 겪을 수 있음.PGBouncer는 이러한 문제를 해결하며, 쿠버네티스 환경에서 매우 유용하게 활용됨. PGBouncer의 주요 역할1. 연결 풀링데이터베이스 연결을 재사용하여 연결 수를 최소화.max_connections 제한이 있는 PostgreSQL의 연결 병목을 완화. 2. 로드 밸런싱여러 클라이언트 연결을 단일 연결로 병합하여 서버 부하 감소. 3. 데이터베이스 보안PGBouncer를 통해 데이터베이스를 간접적으로 노출시킴으로..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스 인그레스의 PathType

쿠버네티스 인그레스의 PathType쿠버네티스 Ingress의 PathType은 요청 경로(/path)를 처리하고 매칭하는 방식에 대한 제어를 제공함.이를 통해 특정 HTTP(S) 요청이 적절한 백엔드 서비스로 라우팅되도록 설정할 수 있음.PathType은 경로 매칭의 정확성과 라우팅 동작을 결정하는 중요한 요소임. PathType의 종류쿠버네티스 Ingress는 총 3가지 PathType을 지원함. 1. Exact (정확 매칭)2. Prefix (접두사 매칭)3. ImplementationSpecific (컨트롤러 구현에 의존) Exact (PathType: Exact)요청 경로와 완벽히 일치하는 경우에만 트래픽을 라우팅함.경로가 정확히 동일하지 않으면 요청이 무시됨. 1. 특징/example 요청은 ..

Operating System/Kubernetes

[Kubernetes] 쿠버네티스 인그레스 개념

쿠버네티스 인그레스쿠버네티스의 Ingress는 클러스터 외부에서 내부 서비스로 HTTP(S) 트래픽을 라우팅하기 위한 리소스임.Ingress는 쿠버네티스 클러스터에서 외부 트래픽과 서비스 간의 연결을 효율적으로 관리함.도메인 기반 라우팅, HTTPS 지원, 리다이렉션 등의 고급 기능을 제공함. Ingress의 핵심 개념Ingress는 단순한 서비스 노출 방식인 NodePort와 LoadBalancer와 달리, HTTP/HTTPS 레벨에서의 트래픽 관리를 제공함. 1. Ingress 컨트롤러Ingress 리소스는 스스로 동작하지 않음.이를 구현하고 실행하기 위해 Ingress Controller가 필요함. 1-2. 일반적으로 사용되는 Ingress ControllerNGINX Ingress Controll..

Operating System/Kubernetes

[Kubernetes] Nginx Dockerfile을 arm64로 ECR에 배포하는 방법

Nginx Dockerfile을 arm64로 ECR에 배포하는 방법ARM64 아키텍처의 Nginx 이미지를 생성하여 AWS ECR에 배포하는 방법은 다음과 같음.ARM64 지원을 위해 Docker의 multi-platform 빌드 기능을 활용함. Dockerfile 작성Nginx 이미지를 기반으로 Dockerfile을 작성함.# Base imageFROM nginx:1.21# Copy custom configuration (optional)COPY nginx.conf /etc/nginx/nginx.conf# Expose port 80EXPOSE 80# Start nginxCMD ["nginx", "-g", "daemon off;"] 빌드 환경 설정ARM64 아키텍처 이미지를 생성하려면 Docker의 Bu..

Operating System/Kubernetes

[Kubernetes] Liveness, Readiness, Startup Probe 정리

쿠버네티스 프로브쿠버네티스에서 프로브는 파드 내 컨테이너의 상태를 모니터링하기 위해 사용되는 매커니즘임.프로브는 주기적으로 컨테이너의 상태를 확인함.이를 통해 컨테이너가 정상적으로 작동 중인지, 재시작이 필요한지, 혹은 서비스에서 제외해야 하는지를 판단함. Liveness Probe1. 목적컨테이너가 "살아 있는지" 확인함.살아있지 않으면, 쿠버네티스는 해당 컨테이너를 재시작함. 2. 사용 시나리오애플리케이션이 무한 루프에 빠지거나, 데드락 상태에 빠질 때. livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 3 periodSeconds: 5 Readiness Probe1. 목적컨테이너가 "트래픽을 받을 준비가 되..

Operating System/Kubernetes

[Kubernetes] k8s, 파드란?

쿠버네티스 파드쿠버네티스의 파드는 쿠버네티스에서 애플리케이션의 배포 및 관리의 가장 작은 단위임.파드는 하나 이상의 컨테이너를 그룹으로 묶어 실행 환경을 제공함.이를 통해 컨테이너 간의 긴밀한 협업과 관리가 용이함. 파드의 주요 특징1. 컨테이너 그룹파드는 하나 이상의 컨테이너를 포함할 수 있음.파드 내 컨테이너는 서로 밀접하게 연관된 작업을 수행함.같은 네트워크 네임스페이스와 스토리지 볼륨을 공유함. 2. 공유 네트워크파드 내 모든 컨테이너는 동일한 IP 주소와 포트를 공유함.같은 파드 내 컨테이너는 localhost를 통해 서로 통신할 수 있음.파드 간 통신은 쿠버네티스 네트워크 정책을 따름. 3. 공유 스토리지파드 내 컨테이너는 공통 볼륨을 마운트하여 데이터를 공유할 수 있음.예를 들어, 한 컨테이..

Operating System/Kubernetes

[Kubernetes] k8s, 서비스 유형 종류

쿠버네티스 서비스 유형쿠버네티스에서 서비스는 클러스터 내의 파드들이 안정적으로 통신할 수 있도록 네트워크 접근을 제공하는 추상화된 개념임.서비스에는 다양한 유형이 있으며, 각 유형은 다른 방식으로 네트워크 트래픽을 라우팅하거나 외부와의 통신을 가능하게 함. 1. ClusterIP기본값으로 설정되는 서비스 유형임.클러스터 내부에서만 접근 가능한 가상 IP를 생성함.외부에서 접근할 수 없으며, 클러스터 내에서 서비스 이름을 통해 접근함.사용 예: 내부 서비스 간 통신 (예: 백엔드-프론트엔드 간 통신). 2. NodePort서비스에 노드의 특정 포트를 노출함.클러스터 외부에서 접근하려면 노드 IP:NodePort 형식으로 접근함.클러스터 내 모든 노드에서 동일한 포트를 열어줌.제한: 포트 번호 범위(3000..

Operating System/Kubernetes

[Kubernetes] k8s, helm으로 redis 설치하는 방법

eksctl, kubectl, helm 설치brew tap weaveworks/tapbrew install weaveworks/tap/eksctleksctl versionbrew install kubectlkubectl versionaws eks update-kubeconfig --region ap-northeast-2 --name __cluster_name__brew install helmhelm versionhelm repo version namespace 생성# kubectl -n redis apply -f namespace.ymlapiVersion: v1kind: Namespacemetadata: name: redis bitnami 차트 설치 및 버전 확인helm repo add bitnami ..

Operating System/Kubernetes

[Kubernetes] k8s, helm으로 kafka 설치하는 방법

kafka 네임스페이스 생성# kubectl -n kafka apply -f namespace.ymlapiVersion: v1kind: Namespacemetadata: name: kafka Helm 차트 추가 및 업데이트 및 확인helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updatehelm repo list | grep bitnami 버전 확인 및 values.yaml 추출helm search repo bitnami/kafka --versionshelm show values bitnami/kafka --version=31.1.0 > values.yaml values.yaml 원본은 놔두고 복제cp values.yaml valu..