❗kubernetes란?
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 관리, 확장, 그리고 운영을 자동화하는 오픈소스 플랫폼이다. 여러 서버(물리적 또는 가상)를 클러스터로 묶어 하나의 통합된 시스템처럼 관리할 수 있도록 도와주며 이 클러스터 환경에서 컨테이너화된 애플리케이션을 쉽게 배포하고, 확장하며, 운영할 수 있다.
❗주요 개념
1. Pod (파드)
Pod는 쿠버네티스에서 가장 작은 배포 단위이다. 각 Pod는 하나 이상의 컨테이너를 포함할 수 있으며, 이 컨테이너들은 서로 네트워크와 스토리지 리소스를 공유한다. 일반적으로, 한 Pod에 하나의 컨테이너만 포함되지만, 여러 컨테이너가 함께 작동해야 하는 경우(예: 로그 수집기와 애플리케이션 컨테이너) 여러 컨테이너가 포함될 수 있다. 그래서 실제론 다르지만 보통은 Pod와 Container가 동치하고 생각한다.
- Pod 내의 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유하므로, 서로 localhost로 통신할 수 있음
- Pod는 하나의 IP 주소를 가지며, 이 IP를 통해 외부와 통신
- Pod는 일시적인 객체로, 필요에 따라 생성되거나 삭제될 수 있음
2. Service (서비스)
Service는 쿠버네티스에서 Pod의 집합을 외부에 노출하는 네트워크 서비스이다. Pod는 일시적으로 생성되거나 삭제될 수 있기 때문에, 안정적인 네트워크 엔드포인트가 필요한데 Service는 이러한 역할을 하며, 변경되는 Pod의 IP 주소를 추적하고 클라이언트에게는 일정한 네트워크 엔드포인트를 제공한다
- Service는 Pod의 레이블(selector)을 기반으로, 해당 레이블이 지정된 Pod와 트래픽을 연결
- 여러 종류의 Service 타입이 있으며, 대표적으로 ClusterIP, NodePort, LoadBalancer가 있음
- ClusterIP: 클러스터 내부에서만 접근 가능한 IP를 할당
- NodePort: 클러스터의 모든 노드에서 특정 포트를 열어 외부에서 접근 가능하게 함
- LoadBalancer: 클라우드 환경에서 외부 로드 밸런서를 생성하여 서비스 트래픽을 분산시킴
- 여러 웹 서버 Pod를 대상으로 트래픽을 분산시키는 것은 LoadBalancer 서비스
3. Deployment (디플로이먼트)
Deployment는 쿠버네티스에서 애플리케이션을 선언적(declarative)으로 관리하는 방식이다. 사용자는 애플리케이션의 원하는 상태를 정의하고, 쿠버네티스는 이를 유지하기 위해 필요한 작업을 자동으로 수행한다. 예를 들어, 3개의 복제된 웹 서버가 항상 실행되도록 설정하면, 쿠버네티스는 이 설정을 유지하기 위해 Pod를 생성, 삭제 또는 업데이트한다.
- Deployment는 애플리케이션의 상태를 유지하고, 변경 사항을 점진적으로 배포할 수 있음(롤링 업데이트).
- Deployment의 상태가 변경되면, 쿠버네티스는 이를 감지하고 새로운 상태를 반영하기 위해 필요한 작업을 수행
- 장애 발생 시 자동으로 복구하여 원하는 상태를 유지
- 웹 서버의 새 버전을 배포할 때, 트래픽을 점진적으로 새 버전으로 전환하는 롤링 업데이트를 수행하는 Deployment.
❗쿠버네티스에서의 동작 방식
- Pod 생성:
- 애플리케이션 컨테이너는 Pod로 패키징되어 쿠버네티스 클러스터에서 실행
- 각각의 Pod는 특정 노드(클러스터 내 서버)에서 실행
- Service 설정:
- 여러 Pod가 동일한 서비스로 묶여 클라이언트가 안정적으로 접근할 수 있게 됨
- Service는 트래픽을 특정 Pod로 라우팅하거나 로드 밸런싱을 수행하는
- Deployment 관리:
- 애플리케이션의 배포 및 업데이트는 Deployment를 통해 관리
- Deployment는 애플리케이션의 상태를 지속적으로 모니터링하고, 정의된 상태와 일치하도록 Pod를 생성하거나 삭제함
❗요약
- Pod: 컨테이너의 실행 단위로, 하나 이상의 컨테이너를 포함하는 Kubernetes의 기본 배포 단위이다
- Service: Pod 집합을 외부에 노출시키는 네트워크 엔드포인트로, 안정적인 접근을 보장한다
- Deployment: 애플리케이션의 배포, 업데이트, 스케일링을 관리하는 Kubernetes 객체로, 애플리케이션의 상태를 지속적으로 유지한다
'🔻DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] Kubernetes로 같은 pod 동시 생성하기(Deployment) (0) | 2024.09.03 |
---|---|
[Kubernetes] Kubernetes의 service + Docker +SpringBoot 배포하기 (0) | 2024.09.03 |
[kubernetes] minikube란? (0) | 2024.09.03 |
[Kubernetes] EC2에 kubernetes 설치하기 (0) | 2024.09.03 |