본문 바로가기

Cloud

Kubernetes with Google Cloud Platform 시작하기 [1/2]



kubernetes와 GCP를 도입 하기에 앞서 Kubernetes와 Google Cloud Platform이 무엇 인지, 특징, 주요 용어를 알아보겠습니다.

이 두 플랫폼을 공부 하기 이전에 DockerDockerHub에 대해서 먼저 이해하고 시작 하는 것을 추천 드립니다.

What is Kubernetes ?


Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.

요약을 하자면 Kubernetes는 컨테이너 작업 부하 및 서비스를 관리 하기 위한 확장 가능한 오픈 소스 플랫폼으로서 자동화를 용이 하게 한다. 라고 합니다.
다시 한 번 재정의 하자면 컨테이너의 배포 자동화, 스케일링, 운영을 위한 오픈 소스 플랫폼이다.


Kubernetes 특징

  • Horizontal scaling 
    pod 의 CPU 사용이나 app이 제공하는 metric을 기반으로 ReplicaSet을 Scaling 할 수 있다.

  • Automatic bin packing
    가용성을 희생하지 않는 범위안에서 리소스를 충분히 활용해서 Container를 배치합니다. 
  • Self-healing
    Container의 실행 실패, node가 죽거나 반응이 없는 경우, health check에 실패한 경우에 해당 Container를 자동으로 복구합니다.
    (지금 현재 사용 중인 forever나 pm2와 같은 역할)
  • Service discovery and load balancing
    익숙하지 않는 Service Discovery매커니즘을 위해 Application을 수정할 필요가 없습니다. Kubernetes는 Container에 고유 IP, 단일 DNS를 제공하고 이를 이용해 LoadBalancer가 load balancing 합니다.
  • Secret and configuration management
    Secret key, configuation을 이미지의 변경없이 업데이트할 수 있고, 외부로 노출(expose)하지 않고 관리/사용할 수 있습니다.

  • Automated rollouts and rollbacks
    application, configuration의 변경이 있을 경우, 전체 인스턴스의 중단이 아닌, 점진적으로 Container에 적용(rolling update) 가능합니다. 변경내용이 문제 있을 경우 자동으로 Rollback을 진행할 수 있습니다.

  • Storage orchestration
    local storage를 비롯해서 public cloud(GCP, AWS), network storage등을 구미에 맞게 자동 mount할 수 있습니다.

  • Batch Execution
    batch, CI 작업의 수행을 관리할 수 있습니다. 원한다면 실패 시 container를 replace하는 것도 가능합니다.


특징만 보아도 Kubernetes를 왜 도입해야하는지 필요성을 느낄 수 있습니다.

Kubernetes 구성요소


Master

  • Master는 Cluster에 하나만 존재 하며(추후에 Multi Node Master가 지원될 예정이라고 합니다.)
  • Cluster  전체를 관리 합니다.
  • Master는 Developer가 Kube(Kubernetes Command Line) API server 를 통하여 작업을 전달 합니다.
  • State를 관리 하기 위한 분산 저장소(etcd)가 있으며 Scheduler와 Controller manager등이 포함되어있습니다.

Node

  • Node는 Cluster의 slave(work)node이며 minion이라고도 불립니다.
  • Kubelet를 Master와 통신하여 작업을 수행 합니다.
  • Kuberlet, cAdvisor, Kube-Proxy, Pod로 구성 되어 있습니다.

Kubernetes 아키텍처



Kubernetes 용어 정리

Cluster

Kubernetes의 어플리케이션을 배포, 스케일링, 오퍼레이팅 할 수 있는 환경을 말하며 Master와 Node로 구성 됩니다.

Master

API Server

Kubernetes의 중심이며 Kubernetes Components에게 HTTP, HTTPS 기반의 RestAPI를 제공합니다.


Scheduler

Container 어떤 Node에서 실행 할지 적재적소하게 배치하는 역할을 한다.

Container Manager

Kubernetes Internal information을 생성 및 갱신합니다.

Container 상태를 기대하는 상태로 변경합니다.

etcd

Key - value store입니다. API server 로 접근이 가능하며 k8s의 메타정보 (label, namespace 등)을 관리 합니다.

Node

Pod object

컨테이너 묶음입니다. Kubernets의 가장 작은 배포 단위 입니다. Application container를 포함하고 있으며,

Container는 multi로 구성 될 수 있지만 1개로만 구성하길 권장 합니다.

pod 내부에서는 network 와 Data volume을 공유하고 locahost로 서로 접근이 가능합니다


Kubelet     

각 Node에 한 개씩 있으면서 API Server 에 주기적으로 Node의 상태를 Rerot 합니다.

Master로 부터 명령을 받아 pod, service를 중지/실행 시키기도 합니다.


cAdvisor

실행 되고 있는 컨테이너의 리소스 사용량과 퍼 포먼스를 모니터링 하고 모니터링한 결과를 kubelet을 통해 API Server로 전달 됩니다.


Kube-Proxy

Network Proxy와 LoadBalancer 역할 을 합니다.

외부에서 요청이 들어 오면 각 Pod에게 전달 합니다.

ETC

Kubectl

Kubernetes의 CLI 입니다. 배포, Pod, service등을 관리 할 수 있습니다.

Kubectl 이 곳에서 명령어 사용법을 확인 할 수 있습니다. 


Deployment object

애플리케이션의 배포 및 삭제, scale out의 역할을 합니다. Deployment를 생성 하면 Deployment 가 Pod과 ReplicaSets를 함께 생성하고 

Pod 안의 컨테이너가 실행 되면서 애플리케이션이 배포 됩니다


Service object

Pod에는 고유한 IP가 부여 되는데 Pod는 자주 생성되고 죽기 때문에  아룰 보완하고 안전성있는 통신을 위한 Objsect가 Service Object입니다.

Service Object는  클러스터 내부에서 접근 가능한 Internal IP 와 외부에서 접근 가능한 Node Port를 가지고 해당 포트로 요청이 들어오면 Selector / Label을 

통해 해당 Pod 그룹을 찾아 전달 합니다. 그림으로 보면 아래 그림과 같습니다.



Kubernetes의 기본 개념은 여기서 마치겠습니다.


다음은 gcloud, kubectl 설치 및 준비 과정에 대해서 설명 하도록 하겠습니다.