지금까지 EC2에 도커를 직접 설치해 배포하는 단계 - ECS에 배포하는 단계 들이 있었다.
수동 배포의 문제
1. 자체적으로 모든 리소스들을 관리하고 구성해야 한다.
2. 해당 인스턴스의 운영체제와 어플리케이션에 대한 모든 관리를 해줘야 한다.
3. 컨테이너가 충돌하거나 다운될 수 있으며 새 컨테이너로 교체해야 한다. 이 과정에서의 문제점은 항상 모니터링 하고 있어야 한다.
4. 트래픽의 증가가 생기면 여러 동일한 컨테이너를 직접 실행해줘야 한다.
5. 어플리케이션의 업데이트를 직접 관리해줘야 한다.
ECS의 장점
ECS는 위의 문제들을 대부분 해결해줬다.
1. 컨테이너의 헬스체크를 통해 문제가 생기면 컨테이너를 재시작 해준다.
2. 오토스케일링을 통해 가옫 및 실행중인 컨테이너 인스턴스 수를 조절해준다.
3. 로드밸런서가 트래픽의 증가를 분할해준다.
ECS의 단점
1. ECS와 같은 클라우드 프로바이더의 서비스에 종속되며, 한 프로바이더에 대한 이해가 더 필요해진다.
쿠버네티스의 기본 구조
위의 모든 문제들을 쿠버네티스가 해결해준다. 물론 쿠버네티스 말고도 여러 대안이 있긴 한데 사실상 쿠버네티스가 표준으로 자리잡았다.
쿠버네티스의 기본 구성은 위와 같다. 클러스터라고 불리는 하나의 네트워크 안에서 마스터 노드와 워커 노드가 존재한다.
1. Worker Node: 워커노드는 마스터 노드에 의해 관리된다. 일반적으로 워커 노드에는 둘 이상의 포드가 실행된다. 잘 알고있는 개념으로 생각해보면 하나의 도커 컴포즈 구성을 워커노드라고 보면 편하다.
2. pod: 하나의 pod 안에는 다수의 컨테이너가 존재할 수 있고, 특히 밀접한 어플리케이션일수록 같은 pod에 구성될 것이다. pod는 설정이나 볼륨과 같은 리소스도 관리한다.
3. kubelet: kubelet은 마스터 노드와 워커 노드의 통신을 위한 부분이고 마스터 노드가 워커 노드의 pod를 관리할 수 있게 해준다.
4. kube-proxy: kube-proxy는 트래픽을 처리하는 역할을 하며 허용된 트래픽만이 워커노드에 접근하고 나갈 수 있게 관리한다.
1. 마스터 노드의 가장 중요한 소프트웨어는 API 서버로 워커노드의 kubelet과 통신하기 위한 역할을 한다.
2. scheduler는 새 pod가 생성되어야 하는 워커노드를 선택하는 일을 한다 스케일링을 통해 새로운 포드를 생성하고 삭제한다.
3. kube-controller-manager는 워커노드 전체를 감시하고 제어한하며 적당한 포드 수가 실행중인지 관리한다
4. cloud-controller-manager는 클라우드 프로바이더를 위한 맞춤 kube-controller-manager다.
쿠버네티스의 역할과 구조
- pod를 만들고 관리한다.
- pod에 대한 스케일링과 모니터링을 지원한다.
- 클라우드 리소스를 나의 설정에 맞게 제공한다.
쿠버네티스가 해주지 않는 것
- 워커와 마스터 노드 만들기
- API서버와 kubelet을 설정하고 노드의 소프트웨어를 만드는 것
- 로드밸런서, 파일시스템 등을 만드는 것
쿠버네티스가 해주지 않는 것들을 해결하기 위해 kubermatic, EKS같은 관리형 서비스가 존재한다.
쿠버네티스는
클러스터 안의 마스터 노드와 워커 노드가 존재하고 개발자는 kubectl을 이용해 Cluster에 지시를 내린다.
pod
- 여러개의 컨테이너를 띄울 수 있고
- 볼륨과 같이 공유 리소스를 가지고
- ECS의 테스크 같이 내부 IP를 갖고 있어 각 컨테이너간의 통신이 가능하다
- pod는 컨테이너에 작은 포장이 있는 것으로 포드 삭제 명령에 따라 삭제되며 해당되는 데이터들도 함께 사라진다.
- pod는 사용자에 의해 만들어지지 않고 deployment object에 의해 만들어지게 된다.
deployment object
- 원하는 위치를 지정하면 쿠버네티스가 실행해준다.
- 배포가 실패하면 자동으로 롤백해준다.
- 트래픽에 따라 자동으로 스케일링 된다.
이걸 가상으로 해볼 수 있는 Minikube를 이용해보자
'docker-kub' 카테고리의 다른 글
MySQL SpringBoot docker-compose (0) | 2023.08.09 |
---|---|
docker - 멀티스테이지 빌드 (0) | 2023.01.15 |
ECS를 이용한 배포 (0) | 2023.01.02 |
docker - Docker Compose, utility container (0) | 2022.11.13 |
docker - 멀티 컨테이너 어플리케이션 (0) | 2022.10.30 |