✔️ AWS EKS(Elastic Kubernetes Service)란 ?
- AWS EKS란 자체 쿠버네티스 컨트롤 플레인이나 작업자 노드를 설치 및 운영할 필요 없이 AWS에서 쿠버네티스를 손쉽게 실행할 수 있도록 지원하는 관리형 서비스이다.
- AWS EKS는 컨테이너 시작 및 중지, 가상 시스템에서 컨테이너 일정 수립, 클러스터 데이터 저장 및 기타 작업을 담당 하는 쿠바네티스 제어 플레인 노드의 가용성과 확장성을 자동으로 관리 해준다.
- EKS를 사용하면 Kuberenetes 설치부터 운영까지 EKS가 해주기 때문에 직접 Kubernetes Cluster를 구성하고 관리하는 것보다 쉽게 Kubernetes를 사용할 수 있다.
- EKS는 오픈 소스 Kubernetes의 최신 버전의 실행하므로 kubernetes의 모든 plugin과 tool을 사용할 수 있다.
✔️ EKS의 특징
VPC(Virtual Private Cloud) 와 통합
일반적으로 쿠버네티스 클러스터에서는 파드 네트워크로 워커 노드의 네트워크와는 다른 자체 네트워크 체계를 배치.
클러스터 자체 네트워크를 사용하기 때문에 명시적으로 엔드 포인트를 설정하지 않으면 클러스터 외부에서 파드에 통신이 불가능
Amazon EKS에서는 Amazon VPC 통합 네트워킹을 지원하고 있어 파드에서 VPC 내부 주소 대역을 사용할 수 있고 클러스터 외부와의 통신이 가능하고 심리스(Seamless)하게 구현할 수 있다.
cf) 심리스(Seamless): 서비스 접근을 단순하게 하는 것 혹은 복잡한 기술이나 기능을 설명하지 않아도 서비스 기능을 직관적으로 구현하는 뜻
ELB와의 연계
외부에서 k8s 클러스터에 접속할 때는 서비스를 사용해 엔드 포인트를 생성할 필요가 있으며 가장 전형적인 엔드포인드가 로드밸런서이다.
EKS 에서는 k8s의 서비스 타입 중 하나인 LoadBalancer를 설정하면 자동적으로 AWS의 로드밸런서 서비스인 ELB가 생성
이것으로 HTTPS나 경로 기반 라우팅 등 L7 로드밸런서 기능을 AWS 서비스로 구현 가능
IAM 을 통한 인증과 인가
쿠버네티스 클러스터는 kubectl 이라는 명령줄 도구를 사용하여 조작한다.
이때 해당 조작이 허가된 사용자에 의한 것임을 올바르게 인증해야 하며 인증된 사용자에게 어떤 조작을 허가할지에 대한 인가 구조도 필요하다.
EKS 에서는 IAM과 연결한 인증 및 인가 구조를 제공
워커 노드
EKS workflow 를 살펴보자
EKS 클러스터 컨트롤 플레인 생성 부분은 EKS에서 관리형 서비스로 제공하고 있다.
워커 노드에 대한 서비스도 제공. ex) AWS에서 제공하는 서비스 eksctl
반대로, 워커노드를 Customize 해서 원하는 서비스를 생성할 수 있음
✔️ EKS 운영 방식
클러스터 생성 시 하나의 단위 엔드포인트 즉, 마스터 엔드포인트가 생성된다.
마스터 엔드포인트는 3개의 가용영역이 펼쳐지고, 이 가용영역에 워커 노드들이 분산되어 배포된다.
사용자는 Kubectl을 통해 컨테이너들을 운영 및 관리할 수 있다.
✔️ 왜 EKS 인가 ?
EKS 아키텍처
EKS를 배포하게 되면 왼쪽 그림처럼 가용 영역별로 API Server와 etcd와 컨테이너가 배포되게 된다. (고가용성 보장)
하지만, 사용자 입장에서는 하나의 마스터 엔드포인트로 보이며 Kubectl 명령줄 도구로 접근이 가능하다.
🙋 EKS를 사용하지 않고 쿠버네티스를 직접 운영하게 된다면?
사용자가 인스턴스 정보/인스턴스의 어플리케이션 정보/컨테이너의 메타데이터나 정보들을 직접 운영, 관리해야 한다.
❓ 만약 마스터 노드에 문제가 생긴다면 ?
평소에 마스터 노드나 Etcd를 백업하고 스냅샷을 찍고 관리하다가 문제 발생시 정상적인 인스턴스로 교체하는 작업이 필요하다. 클러스터 확장 시 마스터 노드 확장 또는 스케일 업/아웃의 구조를 직접 만들어야 하는 작업들이 있다.
EKS를 사용한다면 ?
위와 같은 쿠버네티스 환경에서
- 마스터 노드와 ETCD 노드가 이미 매니지드 되어 그냥 워커노드가 운영되고 있는 내용만 확인!
- ETCD는 마스터 노드 내에서 클러스터 내 발생하는 모든 데이터를 담는 저장소
- 워커 노드같은 경우, 사용자 계정에 EC2 인스턴스로 생성이 돼서 워커노드에 대한 장애는 직접 처리해야함
- 근데 아마존 EKS 노드 그룹스 라는 기능이 추가되면서, VM 오토스케일업 같은 기능이 제공됨
- 그러면 클러스터 오토 스케일러를 설치해주지 않아도 되는가?
👉 현재 인스턴스 자체는 자동으로 스케일 아웃이 되는데, 내부적으로 클러스터 이중화가 동작이 되지 않아 클러스터 오토스케일러 역시 세팅해주어야 한다.
✔️ EC2에 k8s 설치 vs EKS 차이
EC2에서 쿠버네티스를 설치해 사용할 경우 쿠버네티스의 마스터 노드에 위치한 각종 컴포넌트(api server, etcd etc.) 등에 대한 고가용성을 사용자가 관리해야 한다.
하지만, EKS를 사용할 경우 싱글태넌트로 고객별로 만들어진 kubernetes master node를 AWS가 직접 고가용성 관리를 해주므로 관리 운영 부담이 현저히 줄어든다.
항목 | K8S | EKS |
구동 환경 | on-premises | AWS |
master node | 직접 설치 및 관리 필요 | AWS에서 관리 해줌 |
master node HA | 직접 구성 필요 | 자동으로 구성 |
인증 | 직접 구성 필요 | AWS IAM 기반 인증 사용 |
Pod 네트워크 통신 방식 | 다양한 plugin 지원 | EKS는 기본적으로 amazon-vpc-cni-k8s 을 지원 amazon-vpc-cni-k8s 플러그인은 VPC 상에서 유효한 실제 IP를 Pod에 할당합니다. |
Pod 제한 | 없음 | c5.large에서는 29개의 Pod만 사용 가능 제한이 발생 하는 이유 instance 타입에 따라 추가할 수 있는 ENI 수와 ENI 당 IP 수에 제한이 있기 때문에 발생 |
✔️ EC2 Management Tool
이름 | 설명 |
AWS Management Console | Website AWS 홈페이지에서 GUI로 AWS를 컨트롤 |
AWS CLI | AWS Command Line Interface (AWS CLI) 즉 cli 명령어로 AWS를 컨트롤하는 tool |
eksctl | cli 명령어로 가장 간단하고 쉽게 클러스터 생성 가능 eksctl을 사용하기 위해서는 AWS CLI가 설치되어있고 자격 증명 구성이 되어있어야 함 |
AWS SDK | 개발 API를 사용해 컨트롤 가능 |
Terraform | 인프라를 만들고 바꾸고 버전 관리하는 도구 IaC(Infrastructure as Code) 인프라를 코드로 관리 가능 |
Firecracker | 마이크로 VM |
✔️ 로깅과 모니터링
로깅
아마존 EKS 에서 Fluentd 를 사용해 로그를 모을 수 있는 아키텍쳐를 제공
다양한 소스들을 fluentd 에서 JSON 형태로 모아서 스토리지 영역으로 바이패싱
스토리지 영역은 ES, S3 로 사용 가능
데이터가 들어오는 시점에 Cloudwatch를 사용해 전송 패턴을 가지고 들어오게 할 수도 있다.
fluentd가 데몬셋처럼 인스턴스 1개 당 배포
인스턴스에 있는 파드에서 배포된 서비스에서 나오는 Standard Output log 들을 fluentd가 ES로 전송
ES에 있는 데이터들은 필드형태로 kibana에서 시각화할 수 있음
모니터링
쿠버네티스는 3가지 정도의 모니터링 리소스를 소개
1. Resource metircs pipeline
노드들 상태정보, 노드에서 사용하고 있는 cpu,메모리,디스크 사용정보를 마스터 노드로 전송
인스턴스에서 파드에 사용하는 전체사용량이지 각각 애플리케이션(서비스) 전체 사용량을 볼 수는 없음
서비스에서 사용하는 정보를 얻고 싶다면
2. Full metrics pipelines 프로메테우스를 사용
일반적으로 쿠버네티스에서 대시보드에서 보는 3. CronJob monitoring
전체 클러스터의 상태 정보를 폴링형태로 보여주는 것
🔗참고
'Public Cloud > AWS' 카테고리의 다른 글
AWS EKS로 웹 앱을 배포해보자 ! - 2. Application 배포하기 (0) | 2022.03.16 |
---|---|
AWS EKS로 웹 앱을 배포해보자 ! - 1. EKS 구성하기 (0) | 2022.03.16 |
AWS EKS로 웹 앱을 배포해보자 ! - 0. 초기 설정 (0) | 2022.03.16 |
[AWS] Amazon Compute Services (0) | 2022.03.02 |
[AWS] AWS VPC란 ? (0) | 2022.03.02 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!