해당 내용은 cloudNet@ 팀의 가시다 님이 진행하는 테라폼 스터디 T101 4기에서 학습한 내용을 정리한 것입니다.
1. 쿠버네티스(Kubernetes)란?
컨테이너화 된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
2. 서버 변화과정
애플리케이션 서버의 변화과정을 먼저 보면 왜 쿠버네티스를 사용해야 하는가를 이해할 수 있다.
- 물리 서버
초기에는 애플리케이션을 물리 서버에서 실행했었다. 한 서버에서 여러 애플리케이션이 돌아갈 경우 리소스 분배에서 문제가 생겼다. 하나의 애플리케이션이 큰 리소스를 차지할 경우, 다른 애플리케이션의 성능이 저하되는 경우가 발생했다. - 가상 머신(VM)
단일 물리서버에서 여러 개의 가상 머신/시스템(VM)을 실행할 수 있도록 하고, VM 간에 애플리케이션을 격리시켰다.
이를 통해 하나의 서버의 리소스를 효율적으로 분배해서 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있어서 확장성이 증가했다. - 컨테이너
VM과 유사한 개념이지만 격리 속성을 완화하여 애플리케이션 간에 운영체제를 공유한다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 존재한다. 기존 인프라와 종속성을 끊었기 때문에 다른 환경에 이식성이 증가한다
3. 왜 쿠버네티스인가?
컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 하지만 프로덕션 환경에서 컨테이너의 상태를 관리하는 것은 다른 문제다. 24시간 모니터링을 할 수도 없으며 컨테이너 수가 증가하게 되면 관리가 쉽지 않다.
이를 관리해주는 시스템이 쿠버네티스다. 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임워크를 제공한다. 애플리케이션의 확장과 장애조치를 처리하고, 배포 패턴 등을 제공한다.
- 서비스 디스커버리와 로드 밸런싱
쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너 노출을 할 수 있다.
컨테이너에 트래픽이 많으면 이를 로드밸런싱하고 배포하여 안정적은 배포를 할 수 있다. - 스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재할 수 있다. - 자동화된 롤아웃과 롤백
- 자동화된 빈 패킹(bin backing)
쿠버네티스 클러스터 노드를 제공한다. 이는 각 컨테이너가 필요로 하는 리소스(CPU, RAM)를 쿠버네티스에게 지시하고 이를 잘 활용할 수 있도록 해준다. - 자동화된 복구
실패하거나 다운된 컨테이너를 다시 시작하고, 교체하며, 테스트를 진행한다. 서비스가 준비될 때까지 이 과정을 클라이언트에게 보여주지 않는다. - 시크릿과 구성 관리
암호, Oauth 토큰 및 SSH 키와 같은 정보를 저장하고 관리할 수 있다. 컨테이너 스택 구성에 시크릿 정보를 노출하지 않는다.
4. Amazon EKS 란?
Amazon Elastic Kubernetes Service(EKS)는 AWS에 Kubernetes 컨트롤 플레인을 설치, 운영 및 유지 관리할 필요가 없는 관리형 서비스이다.
5. Kubernetes 와 EKS의 차이
EKS는 서비스를 관리하는 서버를 Amazon 에서 유지보수를 해준다.
쿠버네티스를 로컬에서 사용하는 경우 모든 노드를 관리해야 하지만, EKS는 마스터 노드는 Amazon 에서 관리하고 워커노드만 사용자가 관리하면 되기 때문에 매니징 부분에서 장점이 있다.
6. Karpenter 란?
AWS로 구축된 유연한 오픈 소스의 고성능 Kubernetes 클러스터 오토 스케일러이다. 애플리케이션 로드의 변화에 대응하여 적절한 크기의 컴퓨팅 리소스를 신속하게 실행함으로써 애플리케이션 가용성과 클러스터 효율성을 개선하는 역할을 한다.
7. helm 이란?
kubernetes 만의 패키징 매니저이다. 쉽게 설명하면 Ubuntu 의 "apt" / node의 "npm" / Mac의 "Brew" 와 같이 패키지를 설치, 업데이트, 수정, 삭제와 같은 작업을 편하게 할 수 있도록 해주는 툴이다.
8. ArgoCD란?
ArgoCD는 Kubernetes 환경에서의 애플리케이션 배포와 관리를 지원하는 도구로, GitOps 원칙에 기반하여 설계되었다.
Git 저장소에 기록된 애플리케이션의 상태를 Kubernetes 클러스터와 동기화하는 역할을 수행하고, 이를 통해 배포의 전체 상태와 변화 과정을 Git을 통해 추적하고 관리할 수 있다.
'DevOps' 카테고리의 다른 글
[T1014-이론] OpenTofu 소개 (0) | 2024.07.31 |
---|---|
[T1014-실습] Terraform 으로 AWS EKS 배포하기 (0) | 2024.07.24 |
[T1014-실습] Terraform Runner (1) | 2024.07.14 |
[T1014-이론] 6장 Module (0) | 2024.07.10 |
[T1014-실습] Terraform Backend: AWS S3 + DynamoDB (0) | 2024.07.07 |