쿠버네티스(Kubernetes)
📌 쿠버네티스
컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다.
쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
하드웨어 수준보다는 컨테이너 수준에서 운영 된다.
- 클러스터(cluster) : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합. 일반적으로 근거리 통신망으로 연결됨
- 노드(node) : 장치나 데이터의 지점을 의미함(대형네트워크에서 평상시는 기본 단위로 쓰임)
- 워크로드(workload) : 쿠버네티스에서 작동되는 애플리케이션
배포 방식의 변화

- 전통적인 배포 방식
물리 서버에서 애플리케이션 실행
서버에서 애플리케이션들의 리소스 할당을 정의할 수 없어서 하나의 서버에서 여러 애플리케이션을 실행하면 성능 저하로 이어짐
- 가상화 배포 방식
단일 물리서버 CPU에서 여러 가상 시스템을 실행하는 방식 예)JVM
- 컨테이너 배포 방식
VM과 다르게 각각의 애플리케이션들이 공통의 OS를 공유할 수 있음
VM보다 컨테이너는 훨신 더 가벼우며 마이크로 서비스 단위로 테스트가 가능한 장점이 있음
쿠버네티스의 필요성
하나의 컨테이너가 다운되면 다른 컨테이너들도 다시 시작해야 한다.
하지만 쿠버네티스는 분산 시스템을 위한 프레임워크를 제공해 이 문제를 해결 할 수 있다.
쿠버네티스의 기능
- 서비스 디스커버리 & 로드 밸런싱
쿠버네티스는 DNS(Domain Naming System)이나 자체 IP로 컨테이너 노출을 할 수 있다.
그리고 컨테이너 트래픽이 많아질 때 네트워크 트래픽을 로드밸런싱 하고 배포할 수 있다.
- 스토리지 오케스트레이션
로컬 저장소, 공용 클라우드 공급자 등 원하는 저장 시스템을 애플리케이션에 자동을 탑제할 수 있다.
- 자동화된 롤백, 롤아웃
배포된 컨테이너의 현재 상태를 원하는 상태로 변경 가능하다.
- 자동화된 빈패킹
컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드 제공.
클러스터 노드는 각 컨테이너가 필요로 하는 CPU와 RAM을 쿠버네티스에게 지시한다.
그리고 쿠버네티스는 각각의 컨테이너를 노드에 맞춰서 효율적인 리소스 사용을 하게 한다.
- 자동화된 복구
- 시크릿과 구성관리
암호, OAuth 토큰, ssh키 같은 중요한 정보를 저장할 수 있다.
그래서 컨테이너 이미지 재구성 없이 스택 구성에 시크릿 노출도 없이 애플리케이션 구성 및 배포가 가능하다.