컨테이너 한방 정리

Moongchi·2025년 5월 27일

kubernetes

목록 보기
1/14

리눅스 흐름

  • linux
    => debian - ubuntu
    => redhat - centos - Rocky linux

Container

Container 기반 기술 (kernel)

  • chroot : 유저/파일/네트워크 격리
  • cgroup : cpu/memory 격리
    • systemd
    • cgroupfs
  • namespace : 프로세스 격리

Container란?

  • 애플리케이션 코드와 그 실행에 필요한 모든 의존성(라이브러리, 설정 등)을 하나로 패키징한 가볍고 이식 가능한 실행 환경
  • VM과 달리, 호스트 운영체제를 공유하면서 격리된 프로세스로 실행되어 빠르게 시작하고 리소스 효율↑

    호스트 OS
    ├── 컨테이너 런타임
        ├── 컨테이너 A
        │ ├── 애플리케이션 코드
        │ ├── 라이브러리/종속성
        │ └── 파일 시스템
        └── 컨테이너 B
           ├── 다른 앱
           └── 별도 의존성

  • LXC(LinuX Container), Docker는 컨테이너 기반 기술을 집약하여 만들어짐
  • Docker의 보안 취약점은 root 권한으로 설치/실행되어야했던 점이고 현재는 개선됨

Container Runtime

  • High Level : 사용자 친화적
    - Docker

  • Low Level : 기계 친화적

    • LXC

    • libcontainer

  • Docker는 초기 libcontainer를 이용하고, libcontainer는 LXC를 활용, LXC는 Kernel 환경 구성(chroot, namespace, cgroup)

  • Docker는 중기 contarinerd를 이용하고, containerd는 runc(lowLevel)를 활용하여 커널 환경 구성

Container Orchestration

Container Orchestration이란?

  • 여러 대의 서버(노드)에 걸쳐 다수의 컨테이너를 자동으로 배포, 관리, 스케일링, 복구하는 시스템

    [클러스터]
    └── 마스터 노드 (Control Plane)
    │├── API Server ← 사용자 요청을 받는 관문
    │├── Scheduler ← 컨테이너가 어디서 실행될지 결정
    │├── Controller Manager ← 클러스터 상태 유지
    │└── etcd (Key-Value 저장소) ← 클러스터 상태 저장


    └── 워커 노드 (Worker Node)
       ├── kubelet ← 컨테이너 상태 보고 및 명령 실행
       ├── kube-proxy ← 네트워크 라우팅
       └── 컨테이너 런타임 (containerd 등)
        └── Pod
            └── 컨테이너 A, B, ...

  • 컨테이너 기반으로 앱 배포

  • 시스템 운영 편의 기능 제공

Kubernetes 구성

  • kube-apiserver

    • kubernetes로 보내지는 모든 명령을 수행함
  • kubelet

    • pod 생성 명령을 받으면 pod의 구성을 확인하고 pod 내에 Container 생성
    • Container Runtime에 Container 생성 명령
      • 초기 kubelet → Docker
      • 중간 kubelet → CRI(Container Runtime Interface) → Docker
      • 나중 kubelet - CRI-Plugin - Docker

0개의 댓글