Kubernetes

[kubernetes] 1. Container service 개요

su''@ 2025. 2. 23. 23:35

1. Container service

1-1. Container 기술이란

  • 컨테이너
    • 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를 하나의 런타임 환경으로 패키징한 논리적인 공간
    • 운영시스템을 가상화 한 “경량의 격리된 프로세스“
      • microVM
      • 운영체제 수준의 가상화 제공
      • 독립성을 갖기 때문에 다른 컨테이너에 영향을 주지 않는 stateless 환경 제공
    • 컨테이너는 우리가 개발한 최소한의 (경량의) Image 를 통해 실행된다.
    • 일반 서버 환경에서의 애플리케이션 실행과 달리 언제든 프로세스 수준의 속도로 빠르게 실행(run) 할 수 있고, 한번에 여러개의 컨테이너를 동시에 실행할 수 있음.
  • 시스템 컨테이너
    • 호스트 OS 위에 Ubuntu 와 같은 배포판 리눅스 Image를 통해 배포되는 컨테이너
  • 애플리케이션 컨테이너
    • 단일 애플리케이션 실행을 위한 서비스를 패키징하고 실행하도록 설계된 컨테이너
    • process id 를 확인했을 때 해당 애플리케이션이 PID = 1 을 가짐.

1-2. Container Orchestration

  • Container Orchestration
    • 컨테이너를 자동으로 관리할 수 있는 소프트웨어 기술
    • 애플리케이션 각각의 컨테이너에 여러 마이크로서비스를 포함 가능하므로 최신 클라우드 애플리케이션 개발에 최적
    • 개발자는 컨테이너를 자동 관리(배포, 관리, 확장, 네트워킹 등)하고 정확하게 조정해 많은 수의 컨테이너 애플리케이션(MSA)의 수동 관리로 인한 인적 오류를 최소화 함.
  • Orchestration 기능
    • 배포관리 : 컨테이너를 어느 노드에 한정된 자원에 맞춰 최적의 스케줄링을 할 것인가?
    • 제어 및 모니터링 : 어떻게 실행 중인 여러 컨테이너들의 상태를 추적해 관리할 것인가?
    • 스케일링 : 변화하는 워크로드 및 사용량 확장에 따른 대응은 어떻게 할 것인가?
    • 네트워킹 : 여러 컨테이너의 상호작용을 위한 연결은 어떻게 할 것인가? (ex. CNI)

2. Kubernetes orchestration

2-1. Kubernetes orchestration

  • Kubernetes의 사용 목적 Desired State Management!
  • Kubernetes 기능
    • Service discovery : 각 파드에 단일 DNS 이름과 IP 주소를 할당
    • LoadBalancing : 트래픽이 높으면 여러 Pod 를 포함하는 서비스 전체에 자동으로 로드밸런싱 수행
    • Automated rollouts and rollback : 새 Pod를 출시하고 기존 Pod와 교환 / 실패된 배포는 변경사항을 되돌릴 수 있음.
    • Self-healing : Pod의 상태확인을 수행하고 실패한 컨테이너를 다시 시작 Pod에 장애가 발생하면 K8s 는 상태 확인이 될 때까지 해당 Pod에 대한 연결 허용 안함. = 자동복구기능
    • Automatic Bin-packing : 구성된 CPU 및 RAM 요구사항에 따라 컨테이너를 효율적으로 할당하여 리소스 활용도 최적화
    • Storage orchestration : 스토리지 시스템을 K8s를 사용해 Mount
    • Secret and Configuration management : Container는 기본적으로 Image라고 생각하면 되는데 한 번 생성한 이미지는 재빌드 하지 않는 이상 변경 불가. ReadOnly라고 생각하면 됨. 때문에 컨테이너 이미지를 재구성 하지 않고도 내부 구성 및 기밀 정보를 안전하게 저장하고 업데이트 가능하도록 하기 위해 Secret & Configure 사용
  • Kubernetes 설계 사상
    • 선언적 구성 기반의 배포 환경 : yaml 을 통해 선언하고 현재상태와의 지속적 체크를 통해 자동복구되도록 배포
    • 기능 단위(object)의 분산 : 각각의 기능들이 개별적인 구성요소로서 독립적으로 분산, 컨트롤러로 관리(ex. Node, Deployment, ReplicaSet, Namespace 등)
    • 클러스터 단위의 중앙제어 : Control plane 역할의 Master Node를 통해 각 클러스터 관리
    • 동적 그룹화 기능 : 구성 요소들에 Label 및 Annotation을 Key-Value 단위로 설정
    • API 기반의 상호 작용 : 구성 요소들은 Kube-apiserver를 통해서만 상호 접근이 가능
      • Kube-apiserver는 kubernetes의 뇌와 같다고 보면 된다. kube-apiserver(port:6443)는 모든 상호작용의 중추적 역할을 담당하고 있기 때문에 정상동작 하지 않으면 모든 상호작용이 불가능함.