[초보를 위한 쿠버네티스 안내서] 도커와 쿠버네티스

째리·2025년 2월 14일
post-thumbnail

subicura님의 [초보를 위한 쿠버네티스 안내서] 쿠버네티스 시작하기 강의를 듣고 기록한 내용이다.

도커의 기본 개념과 쿠버네티스를 활용하는 장점을 기록한다.

결론 먼저! 도커와 쿠버네티스

도커와 쿠버네티스는 애플리케이션을 쉽게 배포하고 관리하는 기술이다.

✔ 도커 → 하나의 컨테이너를 만들고 실행하는 도구
✔ 쿠버네티스 → 여러 개의 컨테이너를 자동으로 관리하는 도구

쉽게 말해, 도커는 “컨테이너를 만들고 실행하는 것”이고,
쿠버네티스는 “많은 컨테이너를 똑똑하게 운영하는 것”이다.


💡 “도커는 레고 블록을 만드는 것, 쿠버네티스는 이 블록으로 거대한 도시를 짓는 것” 🎯

- 예제 시나리오: 실제 서비스 운영 예시

1️⃣ 도커로 웹 서버 컨테이너를 만든다 (예: Nginx, DB, API 서버 등)
2️⃣ 도커 컨테이너를 여러 개 실행해서 서비스한다 (각 컨테이너가 하나의 앱 역할)
3️⃣ 쿠버네티스를 이용해서 트래픽이 많아지면 컨테이너를 자동으로 추가하고,
4️⃣ 서버가 고장 나면 쿠버네티스가 컨테이너를 자동으로 복구해서 운영 유지

도커는 앱을 실행하는 “컨테이너 시스템”,
쿠버네티스는 이를 “자동으로 운영하고 관리하는 시스템”!


도커

도커는 컨테이너 기술을 제공하는 플랫폼이다.
컨테이너를 관리하는 조선소(Shipyard)의 역할로 보면 된다.

도커 컨테이너

도커를 이용해 실행되는 가상환경(컨테이너) 이다.

비유를 하면 실제 운항 중인 배(Ship) 라고 보면된다.
도커(조선소)에서 만들어지고 바다(운영 환경)에서 독립적으로 운항한다.

모든 실행환경을 컨테이너로, 어디서든 동작하고 쉽고 효율적이다.

컨테이너 특징

  • 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적
  • 오픈소스

containerization

Devloper → Build → Ship → Run
코드작성 → 도커이미지 만들기 → 만든 이미지를 도커허브나 저장소에 저장 → 도커이미지를 컨테이너로 실행

서버관리자 입장에선 편함. 도커이미지만 잘 만들어주면 띄우는건 굉장히 쉬움

4개의 앱을 3개씩 총 12개의 컨테이너를 관리할 수도 있는데, 수가 굉장히 많아질 수 있음.

손이 많이 감

도커 서버 1,2,3에 컨테이너를 실행하려면

docker stop app && docker run …

_ ssh 하나하나 일일이 관리하기 어려움.

도커를 많이 사용하다보면 빈 공간이 많이 생기기 마련. 빈 공간은 서버가 여러개가 있는데, 컨테이너가 실행이 안되어 있는 상태.

어떤 서버가 여유가 있는지 알려면 모니터링을 하든가 까다로움.

v1 , 일부는 v2 로 만듬

문제가 생기면 v1으로 롤백, 롤아웃/롤백 손이 많이 가네

서비스 검색은 현재 2개의 프로그램 proxy, web이 있다면, 프록시에 web을 바라보라고 설정함. web이 한개 더 생기면 LoadBalancer를 중간에 두어서 부하 분산을 해줌. 프록시는 LoadBalancer를 바라보게 함.

서비스 노출 Gateway

퍼블릭 영역에 프록시 서버를 두고 내부 프라이빗에 컨테이너를 연결하면 된다.

Container Orchestration

복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구

  • CLUSTER 노드 스케일
    • 클러스터 특징을 가짐 : 노드를 하나하나 관리하는게 아니라 추상화해서 한번에 관리함.
    • 관리자가 마스터에게 명령을 내리면 마스터가 노드들한테 전달함.
  • STATE 상태관리
    • 자동으로 컨테이터 오케스트레이션이 맞춰줌. replicas: 2 → 3 이런식으로
  • SCHEDULING 배포관리
    • 자동으로 공간이 되는 서버에 넣어주고, 더 필요하면 서버 새로
  • ROLLOUT ROLLBACK 배포 버전관리
  • SERVICE DISCOVERY 서비스 등록 및 조회
  • VOLUME 볼륨 스토리지

컨테이너 관리도구 춘추전국시대… swarms(도커에서 만든) , 쿠버네티스

> kubectl get node

> kubectl get namespace

> kubectl get po -n monitoring


왜 쿠버네티스인가?

"쿠버네티스는 컨테이너가 죽더라도 자동으로 새로 띄워주는 역할을 한다."

Desired State

상태체크 → 차이점 발견 → 조치 ((Loop))

  • 현재상태가 원하는 상태가 맞는지 확인
  • Scheduler e.g. 두번째 서버 여유 있어
    Controller 컨테이너 상태 체크할 역할 다른 상태 체크 등 많은 컨트롤러 가능
    e.g. Replication Controller, Endpoint Controller, Namespace Controller..
  • 모든 컨트롤러는 위의 Loop를 계속 체크

Master

  • 중간 전달자가 API Server : etcd 와 유일하게 통신하는 모듈 , 권한체크
  • 데이터 모음은 etcd 엣지디 : 모든 상태와 데이터를 저장 분산 시스템
  • Scheduler : 어떤 노드에 어떤 컨테이너를?
  • Controller : Loop Loop 끊임없이 상태를 체크하고 원하는 상태를 유지
    • 복잡성을 낮추기 위해 단일 프로세스로 진행

Node 상세

  • kubelete 각 노드에서 실행 컨테이너를 직접 사용하는게 아니라 Pod 이라는 걸로 감싸서 Pod을 실행/중지하고 상태를 체크 CRI
  • Proxy

Addons

  • CNI (네트워크)
  • DNS (도메인, 서비스 디스커버리)
  • 대시보드 (시각화)

오브젝트

컨테이너를 배포하는게 아니라 Pod을 배포하는 것임.

  • Pod : 가장 작은 배포 단위
    전체 클러스터에서 고유한 ip를 할당
    여러개의 컨테이너가 하나의 Pod에 속할 수 있음

  • ReplicaSet : 여러개의 Pod을 관리

  • Deployment : 배포버전을 관리. 내부적으로 ReplicaSet을 이용

0개의 댓글