이번 글에서는 Kubernetes에 대해 소개 할 예정이다.
이를 알기 위해서는 먼저 컨테이너 기술과 Docker에 대한 기본적인 지식이 필요하다.
따라서, 이전 글들을 읽고 오는 것을 추천한다.
https://laewonjeong.tistory.com/category/Docker%20%EB%B0%8F%20Kubernetes/Docker
'Docker 및 Kubernetes/Docker' 카테고리의 글 목록
laewonjeong.tistory.com
큰 목차는 다음과 같다.
1. Kubernetes 등장 전 Docker의 문제점
2. Container Orchestration
3. What is Kubernetes(K8s)?
4. Kubernetes Features
5. 마무리
Kubernetes 등장 전 Docker의 문제점
`Docker`는 컨테이너 기술의 표준화를 이끌며 애플리케이션 배포와 관리에 혁신을 가져왔지만, 대규모 환경에서 `Docker`만으로는 여러 가지 한계를 드러냈다.
적은 양의 컨테이너는 개별 관리자가 손수 관리할 수 있지만, 대규모 프로젝트 환경 또는 회사에서 이러한 수많은 컨테이너를 개별 관리자가 다 제어하는 것은 거의 불가능하다는 것이다.
예를 들어 수백 개의 마이크로서비스를 실행해야 하는 상황에서 각각의 컨테이너를 배치하고 관리하는 작업은 사실상 사람이 수동으로 처리할 수 없는 수준이다.
이렇게 Docker를 통해 수많은 컨테이너를 관리할 경우의 이슈는 다음과 같은 것들이 있다.
- `배포 관리`
- 어떤 컨테이너를 어느 호스트에 배치하여 실행할 것인가?
- 각 호스트가 가진 한정된 리소스에 맞춰 어떻게 최적의 스케줄링을 구현할 것인가?
- `제어 및 모니터링`
- 현재 실행 중인 컨테이너들의 상태를 어떻게 추적하고 관리할 것인가?
- `스케일링`
- 수시로 변화하는 운영 상황과 사용량 규모에 어떻게 대응할 것인가?
- `네트워킹`
- 컨테이너들을 어떻게 상호 연결할 것인가?
Container Orchestration
위 문제들을 해결하기 위해 등장한 것이 `컨테이너 오케스트레이션(Container Orchestration)`이다.
이는 대규모 애플리케이션을 배포할 수 있도록 컨테이너의 네트워킹 및 관리를 자동화하는 프로세스이다.
즉, 다음과 같은 역할을 수행한다.
- `배포 자동화`
- 어떤 컨테이너를 어디에 배치할지 결정
- `상태 관리`
- 실행 중인 컨테이너의 상태를 추적하고, 장애가 발생하면 자동으로 복구
- `스케일링`
- 운영 환경의 변화에 따라 컨테이너 수를 자동으로 늘리거나 줄임
- `네트워킹`
- 컨테이너 간의 통신을 간소화하고, 안정적인 네트워크 환경을 제공
이러한 컨테이너 오케스트레이션 툴에는 Docker Swarm, `Kubernetes`, Apache Mesos 등이 존재한다.
What is Kubernetes(K8s)?
컨테이너 오케스트레이션 도구 중 가장 널리 사용되는 것이 `Kubernetes`이다.
`Kubernetes`는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 오픈 소스 시스템으로, 대규모 환경에서도 높은 확장성과 안정성을 제공하기 위해 설계 되었다.
이는 기존에 Google 내부에서 컨테이너 오케스트레이션 툴로 사용하던 것인데 오픈소스화 한 것이다.
`k8s`라는 약칭으로도 불리는데 이는 k와 s사이에 글자가 8개라서 그렇다고 한다. 또 `Kubernetes`는 그리스어로 "조타수"라는 뜻을 갖고 있는데, Docker(항구)를 관리한다는 것에 이름을 따오지 않았을까 싶다.
Kubernetes Features
위 그림은 Kubernetes 공식사이트(https://kubernetes.io/)에서 캡처 해온 것이다.
그림을 보면 10가지의 특징이 있는데 다음과 같다.
- Automated Rollouts and Rollbacks
- 애플리케이션 또는 구성 변경 사항을 점진적으로 롤아웃하며, 문제가 발생할 경우 자동으로 롤백을 수행
- Service Discovery and Load Balancing
- Pod에 자체 IP 주소와 DNS 이름을 제공하며, 요청을 Pod 간에 로드 밸런싱
- Storage Orchestration
- 로컬 스토리지, 클라우드 스토리지, 네트워크 스토리지(ISCSI, NFS 등)를 자동으로 연결
- Self-Healing
- 비정상적인 컨테이너를 재시작하고, 실패한 노드의 컨테이너를 교체하며, 준비되지 않은 Pod는 클라이언트에 표시하지 않음
- Secret and Configuration Management
- 애플리케이션의 시크릿과 구성을 노출하지 않고 업데이트하며 이미지를 재구성하지 않아도됨
- Automatic Bin Packing
- 리소스 요구 사항 및 제약 조건을 고려해 컨테이너를 효율적으로 배치
- Batch Execution
- 배치 작업 및 CI 워크로드를 관리하고, 실패한 컨테이너를 대체할 수 있음
- Horizontal Scaling
- 애플리케이션의 수평 확장을 명령어나 UI, CPU 사용량 기반으로 자동화
- IPv4/IPv6 Dual-Stack
- Pod와 서비스에 IPv4 및 IPv6 주소를 할당
- Designed for Extensibility
- 상위 소스 코드를 변경하지 않고 Kubernetes 클러스터에 기능을 추가할 수 있음
이와 같은 특징들은 Kubernetes가 왜 컨테이너 오케스트레이션에서 가장 널리 사용되는 도구인지 보여주는 것 같다.
마무리
이번 글에서는 `Container Orchestration`이 왜 등장했는지와 `Kubernetes`가 무엇인지 또 어떠한 특징을 갖는지 소개하였다.
다음 글에서는 `Kubernetes`의 주요 구성 요소와 `Kubernetes` 설치 및 실습에 대한 글을 포스팅할 예정이다.
'Docker 및 Kubernetes > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubernetes 기본 오브젝트 - Volume (0) | 2025.02.10 |
---|---|
[Kubernetes] Kubernetes 기본 오브젝트 - Service (0) | 2025.02.06 |
[Kubernetes] Kubernetes 기본 오브젝트 - Pod (0) | 2025.02.04 |
[Kubernetes] Kubernetes Dashboard 설정 (0) | 2025.01.23 |
[Kubernetes] Kubernetes 설치 (1) | 2025.01.23 |