K8s 10

Helm

개요Helm은 K8s 환경에서 애플리케이션과 서비스를 손쉽게 배포, 관리, 업그레이드, 삭제할 수 있도록 도와주는 오픈소스 패키지 매니저입니다. Helm은 여러 개의 K8s 리소스(YAML 파일 등)를 하나의 패키지로 묶어 관리하는 Helm 차트라는 개념을 사용합니다. 내용 Helm은 오픈소스 프로젝트로, Cloud Native Computing Foundation(CNCF)에서 관리하고 있습니다. Helm은 K8s용 패키지 매니저로, Ubuntu의 apt, Mac의 brew, Node.js의 npm과 유사한 역할을 수행합니다. 복잡한 K8s 리소스를 패키지화하여, 여러 yaml 파일을 한 번에 관리하고 배포할 수 있도록 합니다. Helm 차트는 K8s 리소스 집합을 정의하는 파일 모음입니다. 차트는 ..

K8s 2025.05.04

인그레스

개요인그레스(Ingress)는 클러스터 외부에서 내부 포드에 접근할 때 사용하는 방법입니다. 서비스가 L4 영역 통신을 담당한다면, 인그레스는 L7 영역 통신을 담당하여 처리합니다.인그레스인그레스는 클러스터 외부에서 내부로 접근하는 요청들을 어떻게 처리할지 정의한 규칙의 모음입니다. HTTP와 HTTPS 경로를 노출하며 인그레스 리소스에 의해 트래픽 라우팅을 정의합니다. 외부에서 서비스로 접근 가능한 URL, 로드밸런서, SSL 인증서 처리, 도메인 기반 가상 호스팅 등을 제공합니다. 인그레스 컨트롤러인그레스 자체가 규칙을 정의한 자원이라면, 실제로 동작시키는 것은 인그레스 컨트롤러(Ingress Controller)입니다. 인그레스 컨트롤러는 인그레스 리소스의 변화를 감지하여 트래픽을 라우팅합니다. 즉..

K8s 2025.04.26

etcd

개요쿠버네티스에서 etcd는 클러스터의 모든 상태(노드, 포드, 서비스 등)와 설정 정보를 저장하는 키-값 저장소입니다. 핵심 데이터 저장소로 사용되기 때문에, 신뢰성과 안정성을 좌우하는 매우 중요한 컴포넌트입니다. 만약 etcd가 유실된다면 컨테이너 뿐만 아니라 쿠버네티스 클러스터가 사용하는 모든 리소스가 영향을 받습니다. RSMetcd는 RSM(Replicated State Machine)기반으로 동작합니다. RSM은 etcd와 같은 분산 시스템에서 동일한 데이터를 다수의 서버에 복제하여 장애시에도 일관성있는 서비스를 제공하는 아키텍처입니다. Backup & Restore장애 및 데이터 손실에 대비해 정기적인 백업을 설정하는 것은 중요합니다. etcdctl 명령어를 사용하여 스냅샷 방식으로 etcd..

K8s 2025.04.25

K8s 소개

개요리눅스는 프로세스별로 자원을 격리해서 사용하는 cgroup과 특정 디렉터리 권한을 제한하는 chroot 등으로 격리 환경을 구성할 수 있습니다. 이러한 리눅스 구성에 디스크 파일 변경 사항을 레이어 형태로 저장하는 파일시스템을 결합한 개념이 바로 컨테이너입니다. 가상 머신과 컨테이너 차이가상 머신과 컨테이너를 비교했을 때, 컨테이너가 구조상 레이어가 더 간단하므로 성능을 높이기 쉽습니다. 컨테이너 생성 과정컨테이너는 Client, Docker Host, Registry 간 상호작용을 통해 생성됩니다.아래 이미지는 Docker 기준으로 컨테이너 생성 과정을 설명합니다.Client: 개발자가 도커 명령어를 입력하는 인터페이스로 Docker Host에 명령 요청Docker Host: 도커 데몬이 실행되는 ..

K8s 2025.04.20

kube-proxy

개요kube-proxy는 클러스터의 각 노드에 실행되는 네트워크 프록시로, K8s의 Service 개념을 실제로 구현하는 핵심 컴포넌트입니다. 클러스터 내부 및 외부에서 포드로의 네트워크 트래픽을 관리하고, 서비스 IP와 실제 포드 IP 간 라우팅을 담당합니다.네트워크 트래픽 프록시 및 로드밸런싱: kube-proxy는 Service로 유입되는 네트워크 요청을 실제 동작 중인 여러 포드로 분산시켜 전달합니다.네트워크 규칙 관리: 각 노드에서 네트워크 규칙을 동적으로 생성 및 관리합니다.Service와 Endpoint 동기화: API Server로부터 Endpoint(포드 IP) 정보를 받아, 변경사항이 생길 때마다 노드의 네트워크 규칙을 실시간으로 갱신합니다. kube-proxy는 동작 방식으로는 세 가..

K8s 2025.04.20

서비스 (Service)

개요쿠버네티스 클러스터에서 컨트롤러를 이용해 포드를 실행한 경우, 포드는 한 장소에서 고정되어 실행되지 않고 클러스터 내부를 옮겨 다니며 실행됩니다. 노드가 옮겨지는 과정에서 포드 IP가 변경되기도 합니다.동적으로 변하는 포드에 접근하기 위해서 사용되는 방법이 바로 쿠버네티스 서비스입니다. 서비스를 사용하면 고정 주소를 이용해 포드에 접근할 수 있습니다.인그레스로도 포드에 접근할 수 있는데 서비스는 주로 L4 영역에서 통신을 할 때 사용하고, 인그레스는 주로 L7 영역에서 통신할 때 사용한다는 차이점이 있습니다. 타입서비스 타입은 크게 네 가지가 있습니다.ClusterIP: 기본 서비스이며 쿠버네티스 클러스터 내부에서만 사용 가능. 클러스터 IP를 이용해 포드에 접근NodePort: 서비스 하나에 모든 ..

K8s 2025.04.20

컨트롤러 (Controller)

개요컨트롤러는 포드를 관리하는 역할을 합니다.레플리케이션 컨트롤러레플리카세트디플로이먼트데몬세트스테이트풀세트잡크론잡 레플리케이션 컨트롤러초기부터 있었던 가장 기본적인 컨트롤러입니다. 설정한 개수만큼의 포드가 항상 클러스터 내 실행되도록 관리합니다.컨트롤러를 사용하지 않고 포드를 직접 실행하면 포드에 이상이 생겨 종료되거나 삭제되었을 때 재시작하기 어렵습니다.현재는 레플리케이션 컨트롤러보다는 레플리카세트를 주로 사용하고 있습니다. 레플리카세트레플리카세트는 레플리케이션 컨트롤러의 발전형입니다. 레플리케이션 컨트롤러와 같이 동작하지만 집합 기반의 셀럭터를 지원한다는 차이점이 존재합니다.아래는 레플리카세트 yaml (replicaset-nginx.yaml) 예시입니다.apiVersion: apps/v1kind: ..

K8s 2025.03.31

포드 (Pod)

개요쿠버네티스는 포드라는 단위로 컨테이너를 묶어서 관리합니다. 일반적으로 포드는 하나가 아닌 여러 개의 컨테이너로 구성됩니다. 포드 내 구성된 컨테이너는 모두 하나의 노드 안에서 실행됩니다. 아래 이미지와 같이 하나의 포드가 있을 때, 포드 내 컨테이너는 웹 서버, 로그 수집기, 볼륨 컨테이너라는 각각의 역할을 가질 수 있습니다. 포드 내 컨테이너는 포드 IP(192.168.10.10)를 공유합니다. 외부에서 포드에 접근할 때는 포드 IP(192.168.10.10)로 접근합니다. 컨테이너에 접근할 때는 컨테이너마다 설정된 포트로 접근합니다. 생성아래 pod.yaml은 기본적 포드를 생성하기 위한 템플릿입니다.apiVersion: v1kind: Podmetadata: name: {포드 이름} label..

K8s 2025.03.31

K8s Cluster 구조

개요쿠버네티스 클러스터는 클러스터를 관리하는 마스터와 컨테이너를 실행시키는 노드로 구성되어 있습니다.마스터: etcd, kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy 등 실행노드: kubelet, kube-proxy 등 실행 고가용성 (High Availability, HA)  쿠버네티스에서 고가용성은 시스템 내의 구성 요소에 장애가 발생하더라도 서비스 중단 시간을 최소화하거나 아예 없이 지속적으로 운영할 수 있는 능력을 의미합니다.마스터는 일반적으로 고가용성을 만족하고자 서버 3대 정도로 구성하여 운영합니다. 실제 작동하면서 클러스터를 관리하는 리더 마스터는 1대고, 나머지 2대는 대기 상태로 존재합니다. 리더 ..

K8s 2025.03.29

kubectl

개요kubectl은 쿠버네티스 클러스터 관리를 위한 커맨드라인 인터페이스입니다. kubectl에서 지원하는 명령은 아래와 같이 구분됩니다.쿠버네티스 자원 생성, 업데이트, 삭제 (create, update, delete)디버그, 모니터링, 트러블 슈팅 (log, exec, cp, top, ...)클러스터 관리 (cordon, top, drain, taint, ...) 사용법kubectl은 아래 형식으로 명령을 작성합니다.kubectl {command} {TYPE} {NAME} {flags}command: 자원에 실행하는 동작 (create, get, delete, ...)TYPE: 자원 타입 (pod, service, ingress, ...)NAME: 자원 이름flags: 부가적 설정 옵션기본적으로 ku..

K8s 2025.03.29
728x90