
들어가며
모듈을 여러 개 띄우기 시작하며, 배포 시 컨테이너가 여러 개 생기는 일이 발생한다.
컨테이너 수가 많아질수록 배포를 체계적으로 알아보고 싶다는 생각이 들었다.
이번 기회에 쿠버네티스를 조금이나마 적용해 보며 불편함이 해소되는지 직접 부딪혀보고자 한다.
쿠버네티스(K8s)란?
컨테이너를 자동으로 배포하고 관리해 주는 오케스트레이션 플랫폼
- 여러 개의 컨테이너를 설정에 맞게 배포
- 컨테이너 / 네트워크 장애 시 복구
- 네트워크 설정
구성요소
Pod
컨테이너를 1개 이상 담는 최소 단위
Service
Pod에 접근하는 네트워크 경로
Ingress
외부 HTTP 요청을 라우팅
Deployment
Pod를 몇 개 띄울지, 언제 다시 띄울지 설정
Node
실제 컨테이너가 뜨는 가상 / 물리 서버
마스터 노드
클러스터를 관리/통제하는 컴포넌트들이 올라가는 곳
워커 노드
실제로 애플리케이션 컨테이너(Pod)가 실행되는 곳
Namespace
리소스를 분리해서 관리
Cluster
Node의 집합
쿠버네티스를 배포하면 클러스터를 얻게 된다.
클러스터는 최소 하나의 워커 노드를 가진다.
컨트롤 플레인 컴포넌트
클러스터의 전반적인 결정을 수행하는 관리 클러스터
보통 어느 머신(워커 노드, 마스터 노드)에서나 동작할 수는 있지만, 마스터 노드에서만 돌리는 게 일반적이다.
kube-apiserver
쿠버네티스 API, 인터페이스를 노출하는 컴포넌트
etcd
모든 클러스터 데이터를 담는 Key-Value 저장소
kube-scheduler
새로 생성된 파드 감지 및 실행 노드를 선택하는 컨트롤 플레인 컴포넌트
kube-controller-manager
컨트롤러 프로세스를 실행
- 노드 컨트롤러 : 노드 다운시 대응
- 잡 컨트롤러 : 일회성 잡 오브젝트가 동작할 수 있는 파드를 생성
- 엔드포인트 슬라이스 컨트롤러 : 서비스-파드를 연결하는 엔드포인트슬라이스 오브젝트를 채움
- 서비스어카운트 컨트롤러 : 신규 네임스페이스가 사용할 기본 서비스 어카운트 생성
cloud-controller-manager
클라우드별 컨트롤 로직을 포함하고 있음 ➡️ 로컬 학습환경에서는 포함되지 않음
- 노드 컨트롤러 : 노드의 삭제 여부를 클라우드 제공자에게 확인
- 라우트 컨트롤러 : 클라운드 인프라에 경로 구성
- 서비스 컨트롤러 : 클라우드 로드밸런서 생성 및 업데이트
노드 컴포넌트
동작 중인 Pod 유지, 쿠버네티스 런타임 환경 제공, 모든 노드 상에서 동작
kubelet
파드에서 컨테이너가 확실하게 동작하도록 관리
쿠버네티스를 통해 생성되는 컨테이너만을 관리함
kube-proxy
쿠버네티스 서비스 개념의 구현부이며, 각 노드에서 실행되는 네트워크 프록시
노트의 네트워크 규칙을 관리하여 외부에서 파드로 네트워크 통신
OS의 패킷 필터링 계층을 사용하거나, 트래픽을 포워딩
컨테이너 런타임
컨테이너 실행을 담당하는 SW
애드온
kube-system namespace에 속해 있으며, 리소스를 이용하여 클러스터 기능을 구현한다.
DNS
쿠버네티스 서비스를 위해 DNS 레코드 제공
웹 UI
웹 기반 UI이며, 클러스터 / 클러스터 내 동작 애플리케이션 관리 및 문제 해결
컨테이너 리소스 모니터링
컨테이너들의 시계열 매트릭스 기록 & 열람
클러스터-레벨 로깅
중앙 로그 저장소에 컨테이너 로그 저장
적용해 보기
워커 노드 기준으로, 유저 도메인에 대한 배포 구성을 간단히 해 보자
- user-batch(batch application)
- user-api(web application)
- user-infra(redis, RDS 등 외부 인프라)
로 나누어져 있다면 일단 infra는 외부 의존성을 띄므로 생략하고, batch & api를 중심으로 배치하자.
클러스터 내에 user라는 네임스페이스를 우선 생성하고
user-batch, user-api를 Pod로 구성하자
해당 모듈들은 같은 노드(가상/물리 서버 -> ex.EC2)를 사용할 수도 있고, 자원이 부족하다면 다른 서버를 사용할 수도 있겠다.
참고 자료
'CI & CD' 카테고리의 다른 글
| [Kubernetes] 설치 및 실행해보기 (0) | 2025.04.03 |
|---|---|
| Jenkins Slave Node (0) | 2024.12.04 |
| CI/CD - Continuous Integration/Continuous Deployment (0) | 2022.06.27 |