1. kubernetes – 간단 정리


kubernetes

여러가지 발음으로 발음되는데 “쿠버네티스”, “쿠베르네테스”, “쿠버네테스” 등등 많은 발음으로 알려져있다.
그리스어 “키잡이“이라는 어원을 가지고 있다. 그래서 그런지 여러가지 발음법이 알려져 있는데, 한국에서는
“쿠버네티스”로 많이 불린다.

 

kubernetes는 단독으로 사용하지 못하는 솔루션으로 꼭 “Docker“와 함께 사용한다.
다른 말로 Docker를 컨트롤하는 솔루션이라고 말할 수 있다. Docker의 container를 관리하고 이를 연계해서
서비스를 할 수 있도록 만들어준다. 이를 “컨테이너 오케스트레이션(CONTAINER ORCHESTRATION)”한다.

한때 컨테이너 오케스트레이션 솔루션이 여러가지 경합을 벌였으나 “kubernetes 천하 통일“을 한 상태이다.

 

Kubernetes와 Public Cloud 연동

AWS와 Azure 뿐아니라 GCE, OpenStack과 같은 같은 서비스를 연동할 수 있는 기능들을 많이 제공한다.
즉 AWS라면 elb/ec2/eip 등을 자동으로 연동해주는 여러가지 기능들을 제공해주고 있다. 이를 이용해서
Public Cloud에 쉽게 연동할 수 있도록 업체에서 지원해주고 있다.

지원하는 Public Cloud는 아래 사이트를 참고하면 된다.
https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/

 

Kubernetes 장점

컨테이너 오케스트레이션(CONTAINER ORCHESTRATION)이다 보니, 컨테이너를 잘 관리해준다.
그리고 이를 연동해서 개발이 편하다.

 

Kubernetes 단점

 

kubernetes 버전에 따라 의존성

kubernetes 버전에 따라 의존성이 너무 많이 차이가 난다.
그래서 보통 kubernetes를 설치 후, 더 이상 업데이트가 불가능하도록 mark를 걸어주는 실정이다.

kubernetes v1.6 이전 : 설치가 많이 어려움
kubernetes v1.6 ~ 1.7 : kubeadm 명령어가 만들어져서 구성이 쉬워짐 RBAC가 beta로 추가됨
kubernetes v1.8 ~ : RBAC가 기본으로 구성

즉 1.6~1.7 사이에 설치된 kubernetes의 경우 RBAC로 인해서 1.8 이상 업그레이드를 진행하면
문제가 발생할 확률이 100%가 된다.

OS에 따른 의존성

그리고 OS에 많이 영향을 받아서 가장 쉬운 설치법이 ubuntu 16 버전에 설치하는 것이다.

 

MASTER의 HA 구성 어려움

기본으로 제공해주는 명령어를 통해서 HA를 구성하는 것에 무척 어려움이 따른다.
만약 MASTER를 교체해야할 경우, 후속작업이 너무 많고 백업이 없다면 심각한 문제가 발생할 수 있다.
그래서 HA를 구성이 가능한 3rd party 제품(KOPS)을 이용해서 많이 구성한다.

 

Kubernetes 간단한 구성 정리

1. Node

kubernetes와 Docker가 설치된 시스템을 node라고 이야기한다.
node 중에 다른 node를 관리하는 시스템을 Master라고 한다.

 

 

 

 

 

 

 

 

 

 

 

1. Cluster

추상적인 개념으로 컨테이너, 어플리케이션 배포, 오토스케일링 및 오퍼레이션을 할 수 있는 단위 환경이다.
Cluster는 Master와 Node로 구성되어 있다.

 

2. Pod

kubernetes에서는 docker container를 pod라고 부른다.
kubernetes를 초기화해서 구성하면 관리용 pod(container)가 많이 생성된다.
만약 dashboard나 network를 추가하면, 이를 관리하기 위한 pod가 생성이 된다고 생각하면된다.

 

3. Deployment

kubernetes에서 pod를 어떻게 관리할 것인가를 정의하는 설정이다.
AWS autoscale에서와 같이 최소/최대로 운영할 pod 정의 그리고 로드가 발생했을 대, 어떻게 scale out할 것이가 등이
설정된다.

 

4. Service

생성된 pod를 연결하는 loadbalancer 역할과 디스커버리 역할을 한다.
쉽게 생각하면 AWS ELB와 비슷한 역할을 한다고 생각하면된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

조금 더 내부를 살펴보면, kubernetes에 1개의 nginx pod를 생성하면 위와 같이 Docker에 nginx용 container가
생성되고, port 8000으로 서비스를 한다고 생각해보자.
조금 생각해보면 Docker에 생성되는 container도 각각의 IP를 가지고 있고, 이를 묶어서 서비스할 필요가 있다.
kubernetes에서는 service를 생성한다는 의미는 1개의 서비스용으로 설정된 IP 1개(10.200.0.192)를 생성해서
생성된 pod와 연결하도록 loadbalancer를 구성할 수 있다.
이는 AWS에서 ELB를 생성하고 서비스할 port를 설정하고, EC2와 연결하는 작업과 비슷하다.
그러나 다른 점은 AWS에서는 EC2를 붙여야하는 상태라면 자동으로 디스커버리가 된다는 점이다.
다른 관점으로 보면 AWS의 Autoscale 기능과 비슷하다.

 

결론

이런 여러가지 이유지만 kubernetes로 서비스를 관리하면 관리하는 측면에서 무척 쉽다.
HA 지원이 어려운 만큼 3rd party 제품과 연동해서 설치하는 것을 권장한다.

 

 

 

2. kubernetes 설치하기 – kubernetes + calico over virtualbox ubuntu 16

 

3. kubernetes 설치하기 – dashboard 구성

4. kubernetes 설치하기 – 서비스 구성하기