포트폴리오목록으로

Kubernetes

· Updated

쿠버네티스 (k8s, kubernetes)

컨테이너 기반의 애플리케이션을 개발하고 배포할 수 있도록 설계된 오픈 소스 플랫폼컨테이너 오케스트레이션 도구의 사실상 표준

쿠버네티스가 제공하는 것

쿠버네티스가 하는 것사용자가 하는 / 설정하는 것
오브젝트(e.g., Pods)의 생성과 관리클러스터와 노드 생성
Pods를 모니터링하고 재생성, 스케일링 등노드에 API 서버, kubelet, 그 외 다른 쿠버네티스 서비스와 소프트웨어 설치
쿠버네티스에 제공된 리소스를 설정에 맞게 활용노드에 필요한 추가 리소스(로드 밸런서, 파일 시스템 등)을 생성
  • 서비스 디스커버리와 로드 밸런싱
    • 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있음
    • 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있음
  • 스토리지 오케스트레이션
    • 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있음
  • 자동화된 롤아웃과 롤백
    • 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있음
    • 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있음
  • 자동화된 빈 패킹 (Bin packing)
    • 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공
    • 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시
    • 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해줌
  • 자동화된 복구 (Self-healing)
    • 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않음
  • 시크릿과 구성 관리
    • 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리할 수 있음
    • 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트할 수 있음

쿠버네티스 컴포넌트

컨트롤 플레인과 두 워커 노드, API server·controller·scheduler·etcd·kubelet 등 Kubernetes 구성 요소

  • 쿠버네티스를 배포하면 클러스터를 얻음
  • 쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합
  • 모든 클러스터는 최소 한 개의 워커 노드를 가짐
  • 워커 노드는 애플리케이션의 구성요소인 파드를 호스트
  • 컨트롤 플레인은 워커 노드와 클러스터 내의 파드를 관리
  • 프로덕션 환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 실행하므로 내결함성과 고가용성이 제공됨

컨트롤 플레인 컴포넌트 - 마스터 노드에 속함

  • 컨트롤 플레인 컴포넌트는 클러스터에 관한 전반적인 결정(예를 들어, 스케줄링)을 수행
  • 클러스터 이벤트(예를 들어, 디플로이먼트의 replicas 필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드를 구동시키는 것)를 감지하고 반응
  • 컨트롤 플레인 컴포넌트는 클러스터 내 어떠한 머신에서든지 동작할 수 있음
    • 그러나 간결성을 위하여, 구성 스크립트는 보통 동일 머신 상에 모든 컨트롤 플레인 컴포넌트를 구동시키고, 사용자 컨테이너는 해당 머신 상에 동작시키지 않음

kube-apiserver

  • API 서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트
  • API 서버는 쿠버네티스 컨트롤 플레인의 프론트 엔드
  • 쿠버네티스 API 서버의 주요 구현은 kube-apiserver
  • kube-apiserver는 수평으로 확장되도록 디자인됨
    • 즉, 더 많은 인스턴스를 배포해서 확장할 수 있음
    • 여러 kube-apiserver 인스턴스를 실행하고, 인스턴스간의 트래픽을 균형있게 조절할 수 있음

etcd

  • 모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 키-값 저장소
  • 쿠버네티스 클러스터에서 etcd를 뒷단의 저장소로 사용한다면, 이 데이터를 백업하는 것은 필수임

kube-scheduler

  • 노드가 배정되지 않은 새로 생성된 파드 를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트
  • 스케줄링 결정을 위해서 고려되는 요소
    • 리소스에 대한 개별 및 총체적 요구 사항
    • 하드웨어 / 소프트웨어 / 정책적 제약
    • 어피니티(affinity) 및 안티-어피니티(anti-affinity) 명세
    • 데이터 지역성
    • 워크로드-간 간섭
    • 데드라인

kube-controller-manager

  • 컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트
  • 논리적으로 각 컨트롤러는 분리된 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행됨
  • 컨트롤러는 다음을 포함
    • 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가짐
    • 잡 컨트롤러: 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성
    • 엔드포인트 슬라이스 컨트롤러: (서비스와 파드 사이의 연결고리를 제공하기 위해) 엔드포인트 슬라이스(EndpointSlice) 오브젝트를 채움
    • 서비스 어카운트 컨트롤러: 새로운 네임스페이스에 대한 기본 서비스 어카운트(ServiceAccount)를 생성

cloud-controller-manager

  • 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트
  • 클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 줌
  • cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행
    • 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 클러스터에는 클라우드 컨트롤러 매니저가 없음
  • kube-controller-manager와 마찬가지로 cloud-controller-manager는 논리적으로 독립적인 여러 컨트롤 루프를 단일 프로세스로 실행하는 단일 바이너리로 결합
  • 수평으로 확장(두 개 이상의 복제 실행)해서 성능을 향상시키거나 장애를 견딜 수 있음
  • 다음 컨트롤러들은 클라우드 제공 사업자의 의존성을 가질 수 있음
    • 노드 컨트롤러: 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것
    • 라우트 컨트롤러: 기본 클라우드 인프라에 경로를 구성하는 것
    • 서비스 컨트롤러: 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것

노드 컴포넌트

  • 노드 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작

kubelet

  • 클러스터의 각 노드에서 실행되는 에이전트
  • Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리
  • Kubelet은 다양한 메커니즘을 통해 제공된 파드 스펙(PodSpec)의 집합을 받아서 컨테이너가 해당 파드 스펙에 따라 건강하게 동작하는 것을 확실히 함
  • Kubelet은 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않음

kube-proxy

  • kube-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부
  • kube-proxy는 노드의 네트워크 규칙을 유지 관리
  • 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 파드로 네트워크 통신을 할 수 있도록 해줌
  • kube-proxy는 운영 체제에 가용한 패킷 필터링 계층이 있는 경우, 이를 사용
    • 그렇지 않으면, kube-proxy는 트래픽 자체를 포워드

컨테이너 런타임

애드온

  • 애드온은 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 이용하여 클러스터 기능을 구현
  • 이들은 클러스터 단위의 기능을 제공하기 때문에 애드온에 대한 네임스페이스 리소스는 kube-system 네임스페이스에 속함

DNS

  • 여타 애드온들이 절대적으로 요구되지 않지만, 많은 예시에서 필요로 하기 때문에 모든 쿠버네티스 클러스터는 클러스터 DNS를 갖추어야만 함
  • 클러스터 DNS는 구성환경 내 다른 DNS 서버와 더불어, 쿠버네티스 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버
  • 쿠버네티스에 의해 구동되는 컨테이너는 DNS 검색에서 이 DNS 서버를 자동으로 포함

웹 UI (대시보드)

  • 대시보드는 쿠버네티스 클러스터를 위한 범용의 웹 기반 UI
  • 사용자가 클러스터 자체뿐만 아니라, 클러스터에서 동작하는 애플리케이션에 대한 관리와 문제 해결을 할 수 있도록 해줌

컨테이너 리소스 모니터링

  • 컨테이너 리소스 모니터링은 중앙 데이터베이스 내의 컨테이너들에 대한 포괄적인 시계열 매트릭스를 기록하고 그 데이터를 열람하기 위한 UI를 제공해줌

클러스터-레벨 로깅

  • 클러스터-레벨 로깅 메커니즘은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장하는 책임을 짐

Cluster

  • 쿠버네티스 내 가장 큰 단위로, 가상 서버들이 속한 클라우드를 의미
  • 쿠버네티스에서 서버는 노드라는 단위로 불리므로, 클러스터란 마스터노드와 워커노드를 합친 것이라고 해석할 수도 있음

Nodes

  • 노드 클러스터 내 가상 서버 즉, 컴퓨팅 엔진 단위
  • 클러스터 다음으로 큰 단위이며, 마스터 노드와 워커 노드로 분리되어 있음
  • 마스터 노드
    • 전체 쿠버네티스 시스템을 관리 및 통제하는 쿠버네티스 컨트롤 플레인을 관장
  • 워커 노드
    • 배포하고자 하는 어플리케이션의 실제 실행을 수행
  • 마스터 노드가 죽으면 클러스터를 관리할 노드가 없기에, 일반적으로 3개 정도의 마스터 노드를 띄워 관리하며, 워커 노드도 여러 개 구성할 수 있음

Pods

  • 파드란 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위
  • 그리고 이와 동시에, 하나 이상의 컨테이너 그룹을 뜻함

Pods vs Containers

  • 컨테이너는 애플리케이션을 말함
    • 이는 완전한 어플리케이션의 일부 기능일 수도 있고, 완전한 어플리케이션 그 자체일 수 있음
  • 만약 컨테이너가 완전한 어플리케이션의 일부 기능이라면
    • 여러 개의 컨테이너들이 모여 하나의 완전한 어플리케이션을 구성할 것
    • 이때 여러 개의 컨테이너가 모여 하나의 파드가 됨
      • 그럼 이 파드가 완전한 어플리케이션이 됨
  • 만약 컨테이너 1개가 완전한 어플리케이션 기능을 갖추고 있다면
    • 하나의 컨테이너로도 하나의 파드를 구성할 수 있음
  • 즉, 파드에 정의된 여러 개의 컨테이너는 하나의 완전한 애플리케이션으로서 동작

Services

  • 쿠버네티스 환경에서 서비스(Service)는 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출(expose)시키는 가상의 컴포넌트
  • 쿠버네티스 내부의 다양한 객체들이 애플리케이션과, 그리고 애플리케이션이 다른 외부의 애플리케이션이나 사용자와 연결될 수 있도록 도와주는 역할

kubectl

  • 쿠버네티스 클러스터를 관리하는 명령줄 도구 (CLI)
  • 로컬 환경, 매니지드 환경 모두 사용 가능
  • 쿠버네티스 자원을 생성, 업데이트, 삭제 (create, update, delete)
  • 디버그, 모니터링, 트러블 슈팅 (log, exec, cp, top, attach, ...)
  • 클러스터 관리 (cordon, top, drain, taint, ...)

설치

https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/

사용법

https://kubernetes.io/docs/reference/kubectl/conventions/

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

Bash

kubectl [COMMAND] [TYPE] [NAME] [FLAG]

COMMAND

  • 하나 이상의 리소스를 조작하기 위한 명령어
  • 예: create, get, describe, delete

TYPE

  • 리소스 타입
  • 대소문자를 구분, 단수, 복수, 단축형으로 명시 가능

NAME

  • 리소스 이름
  • 대소문자를 구분
  • kubectl get nodes 와 같이 리소스 이름을 생략하면 모든 리소스 정보를 출력

FLAG

  • 부가적으로 설정하는 옵션
privacy.md

개인정보 처리방침

이 사이트는 김상훈의 포트폴리오와 기술 블로그입니다. 회원가입, 댓글, 결제 기능은 제공하지 않습니다.

방문 분석

공식 운영 도메인에서 Google Analytics 4, Vercel Web Analytics와 Speed Insights를 사용해 페이지 방문, 유입 경로와 성능을 확인합니다. 개발·미리보기 환경에는 분석 도구를 활성화하지 않습니다.

Google Analytics는 브라우저 식별을 위해 쿠키를 사용할 수 있으며 페이지 URL, 브라우저·기기 정보와 상호작용을 처리합니다. URL과 입력 내용에 이름, 이메일 등 개인정보를 포함하지 마세요. 이 사이트는 이메일이나 연락처를 분석 이벤트로 직접 전송하지 않습니다.

Vercel 분석 도구는 방문 통계와 로딩·응답 성능을 처리합니다. Google과 Vercel의 실제 보관 기간 및 처리는 각 서비스 설정과 정책에 따릅니다.

외부 콘텐츠와 브라우저 저장

블로그에 포함된 외부 이미지는 해당 이미지 서버에서 불러오며 해당 서버에 접속 정보가 전달될 수 있습니다. 글꼴은 이 사이트 서버에서 제공합니다. 테마 선택은 브라우저 로컬 저장소에 저장됩니다.

문의

이메일로 보낸 내용은 문의에 답변하는 데 사용됩니다. 문의: rlatkdgns042@naver.com

· © 2026 Sanghun Kim