MSA를 구축하고 호스트 서버, 컨테이너를 관리할 때에는 아래의 기능이 필요

  1. 대량의 컨테이너를 쉽게/자동으로 관리하기 위해 사용
  2. 다수의 호스트(서버)를 하나의 클러스터처럼 사용
  3. 여러 개의 호스트(서버)에 컨테이너 배포
  4. 서비스 디스커버리로 서비스들을 연결
  5. 부하가 생기면 서버를 자동으로 Scale-out
  6. 장애가 발생하면 기존 컨테이너 kill 후 새로운 컨테이너 다시 생성
  7. 컨테이너 Health Check
  8. 컨테이너 간 Storage 및 Network 관리

Kubernetes

  1. 컨테이너 오케스트레이션 도구
  2. 분산 환경에서 대규모의 컨테이너 관리
  3. 이외 Docker Swarm, Apache Mesos/Marathon 등 도구들이 있음
  4. Kubernetes가 그중 거의 표준처럼 사용
  5. 멀티 호스트에서 컨테이너 관리
  6. 컨테이너 배포
  7. 컨테이너 간 네트워크 관리
  8. 컨테이너 모니터링
  9. 컨테이너 업데이트
  10. 장애 발생 시 자동 복구

Kubernetes 철학

  1. 철학 1 : Immutable Infrastructure
    1. 클라우드 환경에서 자원들을 간단하게 구축하고 파기 가능
    2. 한번 구축한 인프라는 수정하지 않음
    3. 원하는 상태를 만들어서 새로운 환경을 구축
    4. 현재 운영되고 있는 인프라의 상태를 관리
    5. 서버의 Java version은 올려야 하는 경우 업데이트한 Java version을 담고있는 컨테이너를 배포
  2. 철학 2 : Declarative Configuration
    1. 명령형이 아닌 선언형
      1. 구구절절 노노 -> 정해진 것 하나 shell 스크립트 하나 실행 시키듯.
    2. 원하는 상태를 만들기 위해 명령어를 하나 씩 치는 방식이 아님
    3. 원하는 상태를 기술하여 Kubernetes에 적용
    4. 원하는 상태 = 시스템이 되어 있어야 할 모습
      1. 앱을 클러스터 안에서 몇 개 올릴지
      2. 네트워크 구성은 어떻게 되어야 할지
    5. Desired State


      어떤 컨테이너들이 어떤 노드 위에서 동작 할지
      1. 컨테이너들이 replica set이 몇 개가 되어야하는지 등.. 
      2. 관리자가 최종적으로 바라는 상태
      3. 현재 상태를 실시간 모니터링
      4. 관리자가 설정한 원하는 새로운 상태를 주문하거나 클러스터의 상태가 변경되면  Kubernetes가 원하는 상태로 조정
  3. 철학 3 : Self Healing
    1. 장애 발생 시 자동으로 복구
    2. 사람의 개입을 최소화 함
    3. 시스템이 되어 있어야 하는 상태를 항상 감시
    4. 원하는 상태와 다를 경우에 자동으로 복구

 

 

 

 

Docker Swarm

  1. 설치와 사용이 Kubernetes에 비해 단순
  2. 단 대용량 분산환경에서 사용하기에는 기능이 부족
    1. 모니터링 기능 부재
    2. 스토리지 옵션 기능 부재

Apache Mesos/Marathon

  1. 분산 시스템 커널
  2. 분산 된 CPU, memory, storage 등을 추상화 하여 하나의 단일 리소스처럼 만듦
  3. Marathon은 컨테이너 관리 도구
  4. Mesos와 Marathon의 통합으로 대규모 환경의 컨테이너들을 관리할 수 있음

+ Recent posts