Kubernetes를 사용해야하는 이유
보안성과 환경 구성 문제 이전에, 수동 배포는 운영이 어렵다.
컨테이너 내부에서 문제가 발생하여 전체 컨테이너의 충돌이 발생하고 다운되어 교체가 필요할 수 있다.
> 수동 배포에서는 충돌이 발생할 대마다 수동으로 모니터링하고 컨테이너도 수동으로 다시 시작시켜야 한다.
> 애플리케이션이 크거나 중요할 경우 문제가 커질 수 있다.
> 컨테이너 상태 확인과 재배포 필요
트래픽 급증에 따른 컨테이너 인스턴스의 증가가 필요할 수 있다.
> 트래픽이 줄어들면 컨테이너의 감소도 필요하다.
> 오토스케일링 필요
들어오는 트래픽에 대해서 실행 중인 컨테이너의 인스턴스에 균등한 분배가 필요하다.
> 로드 밸런서 필요
특정 CSP(Cloud Service provider)사를 이용하여 컨테이너를 관리할 경우, 해당 CSP사에 고정된다.
해당 CSP사에서 요구하는 대로 맞추어 구성해야하기 때문이다.
이런 점을 해결하기 위해 kubernetes를 사용한다.
kubernetes란?
1. 컨테이너를 오케스트레이션 배포하기 위한 오픈소스 시스템
- 자동 배포
- 스케일링, 로드 밸런싱
- 컨테이너 관리: 일반 배포, 컨테이너 모니터링, 자동 재시작, 환경 구성
2. 적용 순서
- 쿠버네티스 구성(config) 파일 작성 > CSP 또는 자체 머신에 전달 > 구성 파일을 적용하여 배포
3. 구성 파일
사용하려는 서버가 이 쿠버네티스 구문을 이해할 수 있고, 실행할 수 있으면 CSP사에 관계 없이 구성 파일을 사용할 수 있다.
심지어 CSP 특화 옵션을 이 구성 파일에 병합시킬 수도 있다.
4. 쿠버네티스는 CSP가 아니다.
AWS의 대안책이 아니며 CSP와 함께 사용할 수 있는 오픈 소스 소프트웨어이다.
따라서 특정 CSP나 서비스에 제한 없이 어디서나 사용할 수 있다.
5. 쿠버네티스는 도커를 대신하지 않는다.
도커 컨테이너와 함께 작동하여 컨테이너의 배포를 돕는다. 여러 머신을 위한 docker-compose라고 생각하면 편하다. 여러 머신에서 다중 컨테이너 관리하기.
kubernetes 핵심 개념
1. Pod(Container)
컨테이너를 보유하며 k8s에서 가장 작은 단위. 컨테이너를 실행한다.
worker node에서 자신(pod)을 실행시킨다.
내부에 다중 컨테이너가 들어가기도 한다.
2. Worker node
어딘가에서 실행 중인 머신, 가상 인스턴스 (e.g. AWS EC2)이며 내부에 pod를 포함한다.
동일한 worker node 중 하나에서 둘 이상의 pod를 실행하는 것이 일반적이다.
마스터 노드에서 worker node를 관리한다.
worker node에 필요한 software
- docker: 컨테이너를 생성하고 실행에 필요하다
- kubelet: 워커 노드와 마스터 노드 간의 통신 장치
- kube-proxy: 트래픽 처리(허용된 트래픽과 허용되지 않은 트래픽 관리)
3. Froxy
쿠버네티스가 워커 노드에서 포드 네트워크 트래픽의 제어를 설정
pod가 인터넷에 연결할 수 있는지, 포드 및 그 내부에서 실행되는 컨테이너를 외부 세계에서 어떻게 접근할 수 있는지를 제어
4. Master Node
Control Plane을 가지며 컨테이너와 포드를 제어하하는 컨트롤 센터.
Node, Pod와 상호작용(사용자가 직접 할 수는 있지만 권장하지 않음)
master node에 필요한 software
- API Server: 내부에서 API 서버 구동중(worker와 master의 통신을 위한 kubelet의 대응 파트)
- Scheduler: pod 모니터링, 새 pod를 생성 시킬 worker node를 선택
- Kube-Controller-Manager: Worker node 전체를 감시하고 관리, 적당한 수의 포드를 가동중인지 확인
- Cloud-Controller-Manager: 클라우드에 무엇을 해야하는지 알려주고 어떤 프로바이더를 사용하든 명령을 알려준다.
kubernetes 작동
- 내가 해야 할 설정
클러스터와 노드 인스턴스 생성(Worker + Master Nodes)
노드에 모든 쿠버네티스 소프트웨어 설치
사용 중인 CSP에 따라 추가 설정
- 쿠버네티스가 하는 일
인스턴스를 생성하고 자동 배포, 관리
pod를 모니터링하고 죽으면 재생성하고, 스케일 관리
용어 정리
1. Cluster 클러스터: 컨테이너화 된 Worker Nodes 또는 Master Node Machine들의 집합
2. Node 노드: 하나 또는 여러 개의 포드를 호스팅하는 특정 하드웨어 용량을 가지며 클러스터와 통신하거나 클러스터 내에서 통신하는 물리/가상 머신
- Master Node: Control Plane을 가지고 Worker Node를 걸쳐 Pod 관리
- Worker Node: App Container와 그에 대한 리소스를 실행시키고 pod를 호스팅함
3. Pod 포드: 실제 실행중인 App Container(+요구되는 리소스)를 가짐
4. Container 컨테이너: 일반 docker container
5. Services 서비스: 고유한 포드 및 컨테이너에 독립적인 IP주소를 가진 pod 그룹. 특정 포드를 외부에 노출시킬 수 있음