고객의 요구가 증가하면 소프트웨어 기능도 마찬가지로 커지면서 동시에 내결함성과 최대 사용량을 감당할 수 있는 확장성도 가져야 한다. 마이크로서비스는 오늘날의 소프트웨어 개발 과정에서 중요한 역할을 담당하고 있는 설계 유형이다. MicroService ? MicroService의 정의는 다음과 같이 할 수 있다. 마이크로서비스는 개별적으로 배포 일정을 갖고 업데이트 운영이 가능한 작고 독립적인 소프트웨어 프로세스다. MicroService App이란 ? MicroService 앱은 기존에 알고 있던 분산 애플리케이션이며, 격리된 프로세스와 네트워크 통신을 하는 작은 구성 요소로 이루어진 시스템을 말한다. 각각의 서비스나 구성 요소는 논리적으로 또는 가상으로 구분된 컴퓨터에 위치하지만 가끔은 물리적인 컴퓨터..
🚀 AWS Fargate AWS Fargate - Amazon EKS AWS Fargate는 서버리스형 컨테이너 서비스로서 Amazon EKS 클러스터의 일부로 Kubernetes 파드로 실행되는 컨테이너에 대해 적절한 크기의 온디맨드 컴퓨팅 용량을 제공한다. 컨테이너를 실행하는 리소스 비용만 초단위에 따라 지불하면 된다. Fargate를 이용해 EC2 인스턴스를 사용하지 않고 파드를 실행할 수 있다. 우리가 EKS를 사용할 때 컨트롤 플레인은 AWS에서 관리해주지만 워커 노드들은 오토 스케일링 그룹을 이용해 EC2 인스턴스를 배포해서 사용한다. → 즉, EC2 인스턴스의 관리는 사용자의 몫이다. Fargate는 EC2 인스턴스를 추상화시켰기 때문에 사용자가 관리할 필요가 없다. 사용자는 운영체제 버전 ..
🚀 CloudWatch Container Insight Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정 - Amazon CloudWatch 안정적인 서비스의 운영을 위해서는 서비스의 CPU, Memory 등을 모니터링하고 Application Log를 확인하는 것이 중요하다. 쿠버네티스에서도 마찬가지로 Cluster, Namespace, Service, Pod 등에 대한 모니터링과 필요에 따라 Application 로그 수집이 필요하다. AWS에서 제공하는 Container Insights와 로그 수집기인 Fluent Bit로 로그를 수집하고 모니터링 할 수 있다. Container Insights (모니터링) ECS, EKS Cluster에 대하여 CP..
🚀 Cluster Autoscaler AutoScaling - Amazon EKS EKS의 각각의 워커 노드를 EC2 인스턴스로 구성했을 때 파드의 크기가 아주 작다고해도 무한정의 파드를 배치할 수는 없다. 여러명의 개발자가 여러개의 파드를 배치하거나 HPA(Horizontal Pod AutoScaling)에 의해 여러개의 파드가 만들어지면, 노드가 가득 차버려서 파드가 스케줄링 될 수 없어 pending 상태에 머무르는 상황이 발생한다. 이럴 때 사용하는 것이 Cluster Autoscaling(CA)이다. CA는 리소스 부족으로 인해 예약할 수 없는 파드가 있는 경우 클러스터의 크기를 늘린다. 특정 수의 시스템을 초과해 확장 또는 축소하지 않도록 구성할 수 있다. 워커 노드의 확장 결정을 내리는 순서..
🚀 Metrics Server란 ? Kubernetes 지표 서버 설치 - Amazon EKS 쿠버네티스의 Metrics Server란 각 노드에 설치된 kubectl을 통해서 노드 및 파드의 CPU, Memory의 사용량을 수집한다. Linux의 top 명령을 쿠버네티스에서 사용하는 것과 비슷하다. 쿠버네티스 v1.11 이후로 Heapster를 deprecated 시키고 Metrics Server를 모니터링 표준으로 도입하였다. Metircs Server는 Heapster를 간소화한 버전이라고 생각하면 된다. kubectl에서 메트릭 데이터를 수집해서 메모리에 저장한다. 또한 apiserver를 통해 파드나 노드의 메트릭을 조회하는데 사용되는 Metrics API를 제공한다. 쿠버네티스에서 필요한 핵심..
🚀 CSI Driver란 ? Container Storage Interface (CSI) Container Storage Interface (CSI)는 Kubernetes, Mesos같은 Container Orchestration System (CO)와 Storage를 제어하는 Plugin (Storage Controller) 사이의 Interface를 의미한다. CSI는 다음과 같이 3가지를 정의한다. Storage를 제어하는 Plugin Storage(Volume)의 Life Cycle CO와 Plugin 사이의 Interface 📌 Plugin Plugin은 K8s(CO)의 명령에 따라서 Storage를 제어하는 Storage Controller를 의미한다. Plugin은 Controller Plu..