Kubernetes

  • 배포 계획에 맞춰 애플리케이션을 신속하게 배포할 수 있다
    • 컨테이너 개수, CPU 사용률, 메모리 사용량을 설정 가능
    • 저장 공간, 네트워크 접근 제어, 로드밸런싱 기능 설정 가능
  • 가동 중인 애플리케이션을 스케일 업/다운할 수 있다
    • 요청이 많을 때는 컨테이너 수를 늘려서 처리 능력을 높임
    • 요청이 적을 때는 컨테이너 수를 줄여서 자원 점유율이나 요금을 줄임
  • 새로운 버전의 애플리케이션을 무정지로 업그레이드 할 수 있다
  • 하드웨어 가동률을 높여 자원 낭비를 줄인다
  • kubectl: k8s 클러스터를 조작하기 위한 도구로 가장 빈번하게 이용되는 커맨드 라인 인터페이스다
  • kube-apiserver: kubectl 등의 API 클라이언트로부터 오는 REST 요청을 검증하고, API 오브젝트를 구성하고 상태를 보고한다.
  • kube-scheduler: 쿠버네티스의 기본 스케줄러이며, 새로 생성된 모든 파드에 대해 실행할 최적의 노드를 선택한다. 스케줄러는 파드가 실행 가능한 노드를 찾은 다음 점수를 계산하여 가장 점수가 높은 노드를 선택한다.
  • kube-controller-manager: 컨트롤러를 구동하는 마스터상의 컴포넌트
  • cloud-controller-manager: API를 통해서 클라우드 서비스와 연계하는 컨트롤러로, 클라우드 업체에서 개발한다.
  • etcd: k8s 클러스터의 모든 관리 데이터는 etcd에 저장된다. 이 etcd는 CoreOS가 개발한 분산 키/값 저장소로 신뢰성이 요구되는 핵심 데이터의 저장 및 접근을 위해 설계 되었다
  • kubelet: kubelet은 각 노드에서 다음과 같은 역할을 수행한다.
    • 파드와 컨테이너의 샐행
    • 파드와 노드의 상태를 API 서버에 보고
    • 컨테이너의 동작을 확인하는 프로브 실행
    • 내장된 cAdvisor를 통해 메트릭 수집 및 공개
  • kube-proxy: kube-proxy 는 각 노드에서 동작하며 로드밸런싱 기능을 제공한다
    • 서비스와 파드의 변경을 감지하여 최신 상태로 유지
    • iptables 규칙을 관리
    • 서비스명과 ClusterIP를 내부 DNS에 등록
  • coredns: 파드가 서비스 이름으로부터 IP 주소를 얻기 위해 사용된다
  • kube-flannel: 모든 노드에서 실행되어 여러 노드 사이에서 IPv4 네트워크를 제공한다.
  • calico-kube-controllers: calico를 위한 컨트롤러. 데이터 스토어로서 etcd를 이용하기 위하여 사용된다
  • calico-node: 모든 노드에서 실행되어 노드 간 파드의 통신, 라우팅, 네트워크 접근 관리 기능을 제공한다
  • kubernetes-dashboard: Web 대시보드
  • metrics-server: heapster를 대신하여 버전 1.8부터 도입되었다. API의 aggregation layer를 통해서 k8s 클러스터 전체로부터 메트릭을 수집한다

<uml>
[디플로이먼트] –

> [레플리카세트]


[

크론잡] –

> [잡]


[

데몬세트] –

> [파드]


[

레플리카세트] –

> [파드]


[

스테이트풀세트] –

> [파드]


[

잡] –

> [파드]


[

레플리케이션 컨트롤러] –

> [파드]