[Infra] Kubenetes란?

chrisjune
4 min readDec 6, 2019

--

Google제공하는 오케스트레이션 솔루션을 Kubernetes(이하 K8S)라고 합니다. 컨테이너를 쉽고 빠르게 배포, 확장하고 관리를 자동화해주는 오픈소스 플랫폼입니다. 처음엔 docker와 별도의 솔루션으로 제공되었지만, CNCF재단에 소스 이관 후 docker engine에 포함되었습니다. k8sSwarm보다는 복잡한 편이지만, 그 만큼 더욱 많은 기능들을 제공합니다.

Master

마스터서버는 클러스터 전체를 관리합니다. 모든 명령은 마스터를 통하여 노드로 전해집니다. 요청은 Master의 API server를 호출하고 API server는 노드의 kubectl에 명령을 전달합니다. 노드에서 작업을 진행하고 결과 또는 로그를 반환합니다. 하나의 Master로 전체 설정을 제어할 수 있지만 일반적으로 3대로 하여 서비스가 안정적으로 운영되도록 구성합니다. 또한 Master들 간의 Load balancing을 위하여 앞 단에 Load balancer 솔루션을 추가합니다.

Node

노드서버는 실제 Container들이 생성되는 곳입니다. 마스터 서버와 통신하면서 필요한 POD을 생성하고 네트워크와 볼륨을 설정합니다. 필요한 만큼 스케일아웃을 할 수 있습니다.

Pod

한 개 이상의 컨테이너, 스토리지, 네트워크 속성을 가집니다. 동일한 POD안에서는 스토리지와 네트워크를 공유합니다. Pod은 마치 LAMP의 개념과 비슷합니다. Linux + Apache + MySql + PHP로 묶은 것을 떠올리면 이해하기 쉽습니다.

Kubectl

Kubernetes Control의 약자입니다. API server에게 보내는 복잡한 HTTP요청을 쉽게 하기 위하여 제공하는 CLI입니다.

API server

모든 요청을 처리하는 마스터의 핵심 모듈입니다. 요청의 권한 체크, 실행, 거부를 합니다.

etcd

쿠버네티스 클러스터의 모든 설정 내용과 상태를 저장하는 key-value 형태의 데이터베이스입니다. etcd 는 클러스터 전반에 무엇이, 어디에서 실행될 것 인지 정보를 가지고있습니다. 따라서 etcd를 백업해 놓으면 언제든 클러스터를 복구할 수 있습니다. 컨테이너 내부에서 실행할 수 도 있지만, host os에서 직접 구동할 수도 있습니다. CensOS와 같은 리눅스 솔루션은 이미 etcd를 core 패키지 내부에 포함하고 있습니다.

Kubelet

Pod의 생명 주기를 관리합니다. Pod을 생성하고 상태체크를 합니다. Master로 부터 받은 요청을 수행하거나 로그를 전달합니다.

Label

쿠버네티스에서 매우 중요한 요소중 하나입니다. 레이블은 pod와 같은 오브젝트에 첨부된 key-value 쌍입니다.

"metadata": {   
"labels":
{
"key1" : "value1",
"key2" : "value2"
}
}

AWS에서 tags와 같이 레이블을 Pod에 붙여놓고 정리할 수 있습니다. 환경에 따라서 production, development으로 구분하거나 App layer에 따라서 frontend, backend 등등 사용방법에 따라서 정할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
name: label-demo
labels:
environment: production
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
AWS Tags

Selector

특정 레이블에 해당하는 객체그룹을 검색하기 위하여 사용합니다

Replication controller(Replica Set)

Pod을 복제하여 관리하는 오브젝트 입니다. Pod을 생성하고 개수를 유지하려면 반드시 ReplicaSet을 사용해야합니다. 동시에 특정갯수의 pod instance들이 실행되도록 보장해줍니다. 만약, 특정 node의 pod이 down될때, replication controller는 새로운 pod들이 시작되게하고, live pod들을 더욱 정확하게 관리합니다. 특정 pod을 지정하고 관리하기 위하여 위에서 설명한 selectorlabel을 사용합니다.

Serivce

내부 DNS에 서비스 이름을 등록하고 찾는 역할을 합니다. 또한 여러개의 Pod의 load balancing을 합니다.

참고

--

--

No responses yet