Kubernetes의 정의
- 컨테이너화된 워크로드의 관리 및 오케스트레이션을 위한 이식가능하고 확장성 있는 오픈소스 플랫폼
- 복잡한 컨테이너 관리 작업을 추상화하고, 다양한 컴퓨팅 환경에서 컨테이너를 오케스트레이션 하는 선언적 구성을 제공
Kubernetes 이점
- Kubernetes사용의 이점은 작업 추상화를 기반으로 합니다.
컨테이너 자동 복구. 예를 들어 실패한 컨테이너를 다시 시작하거나 컨테이너를 바꿉니다.
요청에 따라 동적으로 배포된 컨테이너 개수 스케일 업 또는 다운
컨테이너의 자동 롤링 업데이트 및 롤백
스토리지 관리
네트워크 트래픽 관리
사용자 이름, 암호 등 중요한 정보 저장 및 관리
Kubernetes 고려사항
배포, 크기 조정, 부하 분산, 로깅 및 모니터링과 같은 측면은 모두 선택 사항입니다. 이와 같은 측면을 해결하기 위해 요구 사항에 맞는 최적의 솔루션을 찾아야 합니다.
Kubernetes는 플랫폼에서 실행할 수 있는 애플리케이션의 유형을 제한하지 않습니다. 컨테이너에서 애플리케이션을 실행할 수 있는 경우 Kubernetes에서 애플리케이션을 실행할 수 있습니다. 컨테이너화된 솔루션을 최대한 활용하기 위해 개발자는 마이크로 서비스 아키텍처와 같은 개념을 이해해야 합니다.
Kubernetes는 미들웨어, 데이터 처리 프레임워크, 데이터베이스, 캐시 또는 클러스터 스토리지 시스템을 제공하지 않습니다. 이 항목은 모두 컨테이너로 실행되거나 다른 서비스 제공 사항의 일부로 실행됩니다.
Kubernetes가 컨테이너를 실행하려면 Docker 같은 컨테이너 런타임이 필요합니다. 컨테이너 런타임은 컨테이너 관리를 담당하는 개체입니다. 예를 들어 컨테이너 런타임은 컨테이너의 상태를 시작하고 중지하며 보고합니다.
Kubernetes 환경을 유지 관리할 책임이 있습니다. 예를 들어 OS 업그레이드와 Kubernetes 설치 및 업그레이드를 관리해야 합니다. 네트워킹, 메모리 및 스토리지와 같은 호스트 머신의 하드웨어 구성도 관리합니다.
Kubernetes Cluester
클러스터는 함께 작동하고 단일 시스템으로 볼 수 있도록 구성하는 컴퓨터 세트 입니다.
Kubernetes 아키텍처
Control plane
- Kubernetes의 오케스트레이션 기능을 관리하는 서비스 컬렉션
Node
- 컴퓨팅 워크로드가 실행되는 위치 입니다. 각 노드는 API서버를 통해 Control plane과 통신하여 노드의 상태 변경 내용을 알립니다.
Control plane에서 실행되는 서비스
API서버
- API서버는 Kubernetes클러스터의 컨트롤 플레인에 대한 프론트 엔드로 간주할 수 있습니다.
- Kubernetes의 구성 요소 사이에서 수행되는 모든 통신은 이 API를 통해 수행됩니다.
백업 저장소
Kubernetes 클러스터의 전체 구성을 저장하는데 사용하는 지속성 저장소 입니다.
- etcd라는 고가용성 안정적인 분산 Key-Value 저장소 입니다.
- etcd 저장소는 클러스터내 모든 개체의 현재 상태 및 원하는 상태를 저장합니다.
스케줄러
모든 노드에서 워크로드의 할당 작업을 담당하는 구성요소 입니다.
- 클러스터에서 새로 만든 컨테이너를 모니터링하고 해당 컨테이너를 노드에 할당 합니다.
컨트롤러 관리자
- 컨트롤러 관리자는 API 서버를 통해 클러스터에 구성된 컨트롤러를 시작하고 모니터링하는 일을 담당합니다.
클라우드 컨트롤러 관리자
- 클라우드 컨트롤러 관리자는 클러스터가 클라우드 환경에서 실행되는 경우 클러스터의 기본 클라우드 기술과 통합됩니다.
- 해당 서비스는 부하 분산 장치, 큐 및 스토리지 등이 될 수 있습니다.
Node에서 실행되는 서비스
Kubelet
- Kubelet는 클러스터의 각 노드에서 실행되고 API 서버의 작업 요청을 모니터링하는 에이전트입니다.
- 에이전트는 요청된 작업 단위가 실행 중이고 정상 상태인지 확인합니다.
- Kubelet는 노드를 모니터링하고 각 노드에서 예약된 컨테이너가 예상대로 실행되는지 확인합니다.
Kube-proxy
- Kube-proxy 구성 요소는 로컬 클러스터 네트워킹을 담당하며 각 노드에서 실행됩니다.
- 이 구성 요소는 각 노드에 고유한 IP 주소가 있는지 확인합니다.
- iptables 및 IPVS를 사용하여 트래픽의 라우팅과 부하 분산을 처리하는 규칙을 구현합니다.
- CoreDNS를 기반으로 하는 DNS 클러스터 추가 기능이 권장되며 기본적으로 설치됩니다.
Container Runtime
- 컨테이너 런타임은 Kubernetes 클러스터에서 컨테이너를 실행하는 기본 소프트웨어입니다.
- 런타임은 컨테이너 이미지를 가져오고, 시작하고, 중지하는 일을 담당합니다.
- Kubernetes는 Docker, rkt, CRI-O, containerd 및 frakti를 비롯한 여러 컨테이너 런타임을 지원합니다.
Kubernetes Pod
Kubernetes Pod의 수명 주기
Pod의 상태
상태 | 설명 |
---|---|
보류 중 | Pod 실행이 예약된 후 컨테이너 런타임은 컨테이너 이미지를 다운로드하고 Pod의 모든 컨테이너를 시작합니다. |
실행 중 | Pod 내의 모든 리소스가 준비된 후 Pod는 실행 중 상태로 전환됩니다. |
성공 | Pod가 의도한 작업을 완료하고 성공적으로 실행되면 Pod는 성공 상태로 전환됩니다. |
실패 | Pod는 다양한 이유로 실패할 수 있습니다. Pod의 컨테이너가 실패하여 다른 모든 컨테이너가 종료되었을 수 있습니다. 또는 Pod 컨테이너를 준비하는 동안 이미지를 찾지 못했을 수 있습니다. 이와 같은 경우 Pod가 실패 상태로 전환될 수 있습니다. Pod는 보류 중 상태 또는 실행 중 상태에서 실패 상태로 전환될 수 있습니다. 특정 실패로 인해 Pod가 보류 중 상태로 돌아갈 수도 있습니다. |
알 수 없음 | Pod 상태를 확인할 수 없는 경우 Pod는 알 수 없음 상태가 됩니다. |
컨테이너 상태
상태 | 설명 |
---|---|
대기 중 | 컨테이너의 기본 상태이며 컨테이너가 실행 또는 종료되지 않은 상태입니다. |
실행 중 | 컨테이너가 문제없이 예상대로 실행되고 있습니다. |
종료됨 | 컨테이너가 더 이상 실행되지 않습니다. 모든 작업이 완료되거나 어떤 이유로 컨테이너가 실패했기 때문입니다. 두 사례를 모두 디버그할 때 이유와 종료 코드를 사용할 수 있습니다. |
Pod Template
Replication Controller
Deployment
Services
Type | |
---|---|
ClusterIP | 클러스터 내의 서비스 세트에서 서비스를 사용할 수 있도록 서비스에 할당된 주소입니다. 예를 들어 애플리케이션의 프런트 엔드 및 백 엔드 구성 요소 간 통신이 있습니다. |
NodePort | Kubernetes 컨트롤 플레인이 서비스에 할당하는 30000~32767 사이 노드 포트입니다. 예를 들어 clusters01의 192.169.1.11이 있습니다. 그런 다음, 공개하려는 Pod의 대상 포트를 사용하여 서비스를 구성합니다. 예를 들어 프런트 엔드 중 하나를 실행하는 Pod에서 포트 80을 구성합니다. 이제 노드 IP 및 포트 주소를 통해 프런트 엔드에 액세스할 수 있습니다. |
LoadBalancer | 애플리케이션을 실행하는 노드와 공용 네트워크 액세스에 Pod를 공개하는 노드 간에 부하를 분산할 수 있는 부하 분산 장치입니다. 일반적으로 클라우드 공급자를 사용할 때 부하 분산 장치를 구성합니다. 이 경우 외부 부하 분산 장치의 트래픽은 애플리케이션을 실행하는 Pod로 전송됩니다. |