Certification/CKA

Kubernetes 구조

김모우 2021. 5. 25. 22:42
728x90
반응형

Kubernetes란?

쿠버네티스는 컨테이너화된 워코르드와 서비스를 관리하기 위한 이식성 있고, 확장 가능한 오픈 소스 플랫폼이다. 쿠버네티스는 선억적 구성과 자동화를 모두 용이하게 해주며, 크고 빠르게 성장하는 생태계를 지닌 플랫폼이다. 쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래되었으며 구글이 쿠버네티스 프로젝트를 2014년에 오픈소스화 하였다. 

 

Kubernetes 제공 기능

서비스 디스커버리와 로드 밸런싱

쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.

 

스토리지 오케스트레이션 

쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.

 

자동화된 롤아웃과 롤백 

쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.

 

자동화된 빈 패킹(bin packing) 

컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.

 

자동화된 복구(self-healing) 

쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.

 

시크릿과 구성 관리 

쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.

 

구성도

상세 설명(컨트롤 플레인)

kube-apiserver

kube-apiserver는 쿠버네티스 클러스터의 api를 사용할 수 있도록 하는 컨트롤 플레인 컴포넌트로 API 서버는 쿠버네티스의 컨트롤 플레인의 프론트 엔드로 동작한다. 쿠버네티스 api 서버의 주요 구현은 kube-apiserver이다. kube-apiserver는 수평으로 확장되도록 디자인 되었으며, 즉 더 많은 인스턴스를 배포하여 확장할 수 있다. 여러 kube-apiserver 인스턴스를 실행하고, 인스턴스간의 트래픽을 균형있게 조정이 가능하다. 

 

etcd

모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성, 고가용성의 키-값 저장소, etcd는 서버 하나당 프로세스 1개만 사용할 수 있으며, 보통 etcd 자체를 클러스터링 한 후 여러 개의 마스터 서버에 분산 실행하여 안전성을 보장하는 형태로 운영함

 

kube-scheduler

노드가 배정되지 안흔 새로 생성된 pod를 감지하고, 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트로 스케줄링 결정을 위해서 고려되는 요소로는 리소스에 대한 개별 및 총체적 요구 사항, 하드웨어/소프트웨어/정책적 제약, 어피니티 및 안티 어피니티 명세, 데이터 지역성, 워크로드간 간섭, 데드라인 등이 있다. 처음 pod가 실행될 때 최소 할당되어야 하는 ram과 같은 설정들을 할 수 있으며, 이러한 고려 사항들에 따라 노드에 pod 실행을 자동화 시켜줌

 

kube-controller-manager

쿠버네티스의 모든 pod들을 관리하는 컨트롤러이다. 논리적으로는 개별 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다. 컨트롤러는 아래 컨트롤러를 포함한다.

 

- 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.

- 레플리케이션 컨트롤러: 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞은 수의 파드들을 유지시켜 주는 책임을 가진다.

- 엔드포인트 컨트롤러: 엔드포인트 오브젝트를 채운다(즉, 서비스와 파드를 연결시킨다.)

- 서비스 어카운트 & 토큰 컨트롤러: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성한다

 

cloud-controller-manager

클라우드 별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 플레인 컴포넌트이다. 클라우드 컨트롤 매니저를 통해 클러서터를 클라우드 공급자의 API에 연결하며, 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터하고만 상호 작용하는 컴포넌트를 구분해준다. cloud-controller-manager는 클라우드 제공자 전용 컨트롤러만 실행한다. 자신의 사내 또는 내부 PC에서 쿠버네티스를 실행 중인 경우에는 cloud-controller-manager는 없다. kube-controller-manager와 마찬 가지로 논리적으로 독립적인 여러 컨트롤 루프를 단일 프로레스로 실행하는 단일 바이너리로 결합하여 수평으로 확장(두 개 이상의 복제)해서 성능을 향상 시키거나 장애 예방이 가능하다.

 

- 노드 컨트롤러: 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것

- 라우트 컨트롤러: 기본 클라우드 인프라에 경로를 구성하는 것

- 서비스 컨트롤러: 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것

 

상세 설명(노드)

kubelet

클러스터의 각 노드에서 실행되는 에이전트로 pod에서 컨테이너가 확실하게 동작하도록 관리한다. kublet은 다양한 메커니즘을 통해 제공된 pod 스펙의 집합을 받아서 컨테니어가 해당 pod 스펙에 따라 건강하게 동작하도록 지속 관리한다. kublet은 쿠버네티스를 통해새 생성되지 않은 컨테이너는 별도 관리하지 않는다.

 

kube-proxy

kube-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부이다. kube-proxy는 노드의 네트워크 규칙을 유지 관리하며 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 밖에서 pod로 네트워크 통신을 할 수 있도록 도와준다.

 

container runtime

컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다. 쿠버네티스는 여러 컨테이너 런타임을 지원한다. 도커, containerd, rkt,

CRI-O 그리고 Kubernetes CRI(컨테이너 런타임 인터페이스)를 구현한 모든 소프트웨어

 

 

Master

Manage, Plan, Schedule, Monitor, Nodes

 

Worker Nodes

Host Application as Containers

 

참고 사이트

https://kubernetes.io/ko/docs/concepts/overview/components/

 

쿠버네티스 컴포넌트

쿠버네티스 클러스터는 컴퓨터 집합인 노드 컴포넌트와 컨트롤 플레인 컴포넌트로 구성된다.

kubernetes.io

 

공부 중에 정리한 자료이므로 참고만 부탁 드리겠습니다(_ _)

728x90
반응형