[쿠버네티스 기초다지기] 01장 - 쿠버네티스 소개


01 쿠버네티스 소개

컨테이너란

컨테이너 기술의 핵심

  • 컨트롤 그룹(cgroups)
    • 호스트의 리소스를 공유하고 제한 할 수 있게 함
    • CPU와 메모리 공유
  • 네임스페이스
    • 운영체제 내에서 프로세스 상호작용을 따로 구분하는 방식
    • 프로세스, 네트워킹, 파일시스템, 사용자 ID 구성 요서의 가시성을 제한
    • 도커 - 각 컨테이너에 소켓과 네트워크 인터페이스를 보호하는 고유의 네트워킹 스택을 제공
  • 도커 - 통합 파일시스템 사용
    • 컨테이너는 이미지로 실행
    • 파일 시스템을 스냅샷으로 만들기 때문에 VM 이미지보다 훨씬 작다.
    • 통합 파일시스템은 이미지를 효율적으로 저장, 다운로드, 실행할 수 있도록 함
      • ex) 리눅스 커널 위에 우분투 깔고 그 위에 아파치 깔고 하는 식
    • 계층화된 파일시스템이 효율적인 이유
      • 처음 빌드할 때 레이어를 도커가 캐싱 함

지속적인 통합과 지속적인 배포의 장점

  • 도커 사용 시 편리하게 배포 가능
    • 빌드 파일을 사용해 컨테이너를 빌드하기 때문
      • 개발, 스테이징, 프로덕션 환경에서 OS, 패키지, 애플리케이션 버전의 동일성을 보장
      • 의존성 충돌 없이 동일한 호스트 서버에서 다양한 언어와 프레임워크 실행 가능

리소스 활욜성

  • 간소화 된 배포 및 릴리스 프로세스를 통해 신속하게 자주 배포 가능
    • 큰 애플리케이션의 작은 부분을 담당하는 소규모 팀에 적합

마이크로서비스와 오케스트레이션

  • 컨테이너의 격리 수준과 세분화 기능이 마이크로서비스에 길을 열어 주었다.
  • 컨테이너와 마이크로 서비스를 관리할 수 있는 전략이 필요해 짐

쿠버네티스의 탄생

  • 구글이 2014년 6월에 배포한 오픈소스 프로젝트
  • 구글이 방대한 양의 워크로드를 스케줄링하기 위한 시스템을 만들던 중 다양한 곳에서 널리 사용가능하게 데이터 센터 관리 도구를 다시 작성함
    • 그 결과가 쿠버네티스

마스터에서 실행되는 서비스

실행 중인 노드 확인

kubectl get nodes

클러스터를 그냥 시작하면 마스터는 kubernetes-master 가 된다.

  • 마스터에 접속해서 실행 중인 docker 컨테이너 출력
gcloud compute ssh --zone "<gce 존>" "kubernetes-master"
sudo docker ps --format 'table t'
  • 각 컨테이너의 대한 간략한 설명
    • fluented-gcp : 클러스터 로그 파일을 모아 구글 클라우드 로깅 서비스로 전송하는 컨테이너
    • node-problem-detector : 모든 노드에서 실행되며 하드웨어 및 커널 계층에서 생기는 문제를 감지하는 데몬
    • rescheduler : 중요한 컴포넌트가 항상 실행 중인지를 확인하는 애드온 컨테이너
    • glbc : 인그레스(ingress) 기능을 사용해 구글 클라우드 레이어 7 로드밸런싱을 제공하는 쿠버네티스트 애드온 컨테이너
    • kube-addon-manager : 쿠버네티스를 확장하는 핵심 컴포넌트. 변경 사항을 주기적으로 /etc/kubernetes/ 애드온 디렉터리에 적용
    • etcd-empty-dir-cleanup : etcd에 있는 빈(empty) 키를 정리하는 유틸리디
    • kube-controller-manager : 여러가지 클러스터 기능을 제어하는 컨트롤러 관리자, 최신 상태로 리플리케이션을 보장해줌, 새로운 노드를 모니터링, 관리, 서비스 엔드포인트를 관리하고 업데이트
    • kube-apiserver : API 서버를 실행, RESTful API를 통해 쿠버네티스 클러스터의 다양한 컴포넌트를 생성, 조회, 업데이트, 삭제
    • kube-scheduler : 스케줄링되지 않은 파드를 현재 사용 중인 스케줄링 알고리즘에 따로 노드에 바인드하는 스케줄러
    • etcd : CoreOS에서 만든 분산 키/값 저장소인 etcd 소프트웨어를 실행, 쿠버네티스 클러스터의 상태가 저장
    • pause : 파드 인프라 컨테이너, 각 파드의 네트워킹 네임스페이스와 리소스 제한을 설장하고 유지하는데 사용

노드에서 실행되는 서비스

실행 중인 파드 확인

kubectl get pods

쿠버네티스의 시스템 리소스 확인

kubectl get pods --namespace=kube-system
  • kubernetes-master가 아닌 아무 노드에 붙어서 확인 가능한 각 컨테이너의 설명
    • kubedns : 쿠버네티스에 있는 서비스와 엔드포인트 리소스를 모니터링하며 변경 사항을 DNS 룩업에 동기화 시킨다.
    • kube-dnsmasq : DNS 캐싱을 제공하는 또 다른 컨테이너
    • dnsmasq-metrics : 클러스터 DNS 서비스의 메트릭 리포팅을 제공
    • l7-defaultbackend : GCE L7 로드 밸런서와 인그레스를 핸들링하는 기본 백엔드
    • kube-proxy : 클러스터의 네트워크 및 서비스 프록시. 클러스터에서 워크로드가 실행되는 곳으로 서비스 트래픽이 전달되도록 한다.
    • heapster : 모니터링과 분석을 위한 컨테이너
    • addon-resizer : 컨테이너를 스케일링하는 클러스터 유틸리티
    • heapster_grafana : 리소스 사용량을 모니터링
    • heapster_influxdb : 힙스터 데이터를 저장하는 시계열(time-series) 데이터베이스
    • cluster-proportional-autoscaler : 클러스터 크기에 비례해 컨테이너를 스케일링하는 클러스터 유틸리티
    • exechealthz : 파드에 헬스체크 수행