"쿠버네티스 컴포넌트"의 두 판 사이의 차이

태그: 되돌려진 기여
 
(같은 사용자의 중간 판 18개는 보이지 않습니다)
8번째 줄: 8번째 줄:
쿠버네티스를 배포하면 클러스터를 얻습니다.
쿠버네티스를 배포하면 클러스터를 얻습니다.


쿠버네티스 클러스터는 노드라고 불리는 워커 머신 세트로 구성되며, 이 노드들은 컨테이너화된 애플리케이션을 실행합니다. 모든 클러스터에는 최소한 하나의 워커 노드가 있습니다.
쿠버네티스 클러스터는 [[k8s 노드|노드]]라고 불리는 워커 머신 세트로 구성되며, 이 노드들은 컨테이너화된 애플리케이션을 실행합니다. 모든 클러스터에는 최소한 하나의 워커 노드가 있습니다.


워커 노드들은 애플리케이션 워크로드의 컴포넌트인 파드(Pod)를 호스팅합니다. 제어 플레인은 클러스터의 워커 노드와 파드를 관리합니다. 프로덕션 환경에서는 제어 플레인이 보통 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 보통 여러 노드를 실행하여 내결함성(fault-tolerance)과 고가용성(high availability)을 제공합니다.
워커 노드들은 애플리케이션 워크로드의 컴포넌트인 [[k8s 파드|파드]]를 호스팅합니다. [[k8s 컨트롤 플레인|컨트롤 플레인]]은 클러스터의 워커 노드와 파드를 관리합니다. 프로덕션 환경에서는 컨트롤 플레인이 보통 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 보통 여러 노드를 실행하여 내결함성(fault-tolerance)과 고가용성(high availability)을 제공합니다.


이 문서는 완전하고 작동하는 쿠버네티스 클러스터를 구성하는 데 필요한 다양한 컴포넌트를 설명합니다.
이 문서는 완전하고 작동하는 쿠버네티스 클러스터를 구성하는 데 필요한 다양한 컴포넌트를 설명합니다.


[[파일:components-of-kubernetes.svg|800px|frame|쿠버네티스 클러스터의 컴포넌트]]
[[파일:components-of-kubernetes.svg|900px]]
<br>쿠버네티스 클러스터의 컴포넌트


==제어 플레인 컴포넌트==
==컨트롤 플레인 컴포넌트==
마스터 컴포넌트는 클러스터의 컨트롤 플레인을 제공한다. 마스터 컴포넌트는 클러스터에 관한 전반적인 결정 (예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(레플리케이션 컨트롤러의 ‘레플리카’ 필드가 요구조건을 충족되지 않을 경우 새로운 Pod을 구동시키는 것)를 감지하고 반응한다.
컨트롤 플레인 컴포넌트는 클러스터에 대한 전반적인 결정을 내리고(예: 스케줄링), 클러스터 이벤트를 감지하고 대응합니다(예: Deployment의 <code>[[k8s 레플리카|replicas]]</code> 필드가 충족되지 않을 때 새 [[k8s 파드|파드]]를 시작).


마스터 컴포넌트는 클러스터 내 어떠한 머신에서든지 동작 될 있다. 그러나, 간결성을 위하여, 구성 스크립트는 보통 동일 머신 상에 모든 마스터 컴포넌트를 구동시키고, 사용자 컨테이너는 해당 머신 상에 동작시키지 않는다. 다중-마스터-VM 설치 예제를 보려면 [[k8s.io kubeadm으로 고가용성 클러스터 구성하기|kubeadm으로 고가용성 클러스터 구성하기]]를 참고하기 바란다.
컨트롤 플레인 컴포넌트는 클러스터의 모든 머신에서 실행될 있습니다. 그러나 간단히 하기 위해 설정 스크립트는 일반적으로 모든 컨트롤 플레인 컴포넌트를 같은 머신에서 시작하며, 이 머신에서는 사용자 컨테이너를 실행하지 않습니다. 여러 머신에 걸쳐 실행되는 예시 컨트롤 플레인 설정에 대해서는 [[kubeadm으로 고가용성 클러스터 생성하기|kubeadm을 사용하여 고가용성 클러스터 생성하기]]를 참조하십시오.


===kube-apiserver===
===kube-apiserver===
{{참고|kube-apiserver}}
API 서버는 Kubernetes 컨트롤 플레인의 컴포넌트로, Kubernetes API를 노출합니다. API 서버는 Kubernetes [[k8s 컨트롤 플레인|컨트롤 플레인]]의 프론트 엔드 역할을 합니다.
쿠버네티스 API를 노출하는, 마스터 상의 컴포넌트. 쿠버네티스 컨트롤 플레인에 대한 프론트엔드이다.


수평적 스케일링(즉, 더 많은 인스턴스를 디플로이하는 스케일링)을 위해 설계되었다. [https://kubernetes.io/docs/admin/high-availability/building/ 쿠버네티스 고가용성 클러스터 구축]을 참고하라.
Kubernetes API 서버의 주요 구현체는 [[kube-apiserver]]입니다. kube-apiserver는 수평 확장을 염두에 두고 설계되었습니다. 즉, 더 많은 인스턴스를 배포함으로써 확장할 수 있습니다. 여러 인스턴스의 kube-apiserver를 실행하고, 그 인스턴스들 간의 트래픽을 분산시킬 수 있습니다.


===etcd===
===etcd===
{{참고|k8s etcd}}
Kubernetes의 모든 클러스터 데이터를 위한 백엔드 스토어로 사용되는 일관성 있고 고가용성의 키-값 저장소입니다.
모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 [[키-값 저장소]].


쿠버네티스 클러스터 정보를 담고 있는 etcd 데이터에 대한 백업 계획은 필수이다. etcd에 대해 자세히 알아보려면 [https://github.com/coreos/etcd/blob/master/Documentation/docs.md etcd 문서]를 참고하라.
Kubernetes 클러스터가 etcd를 백엔드 스토어로 사용하는 경우, 데이터를 [[쿠버네티스를 위한 etcd 클러스터 운영#etcd 클러스터 백업|백업]] 계획을 반드시 마련해야 합니다.
 
etcd에 대한 자세한 정보는 [https://etcd.io/docs/ 공식 문서]에서 확인할 수 있습니다.


===kube-scheduler===
===kube-scheduler===
{{참고|kube-scheduler}}
노드가 할당되지 않은 새로 생성된 [[k8s 파드|파드]]를 감시하고 실행할 [[k8s 노드|노드]]를 선택하는 컨트롤 플레인 컴포넌트입니다.
노드가 할당되지 않은 새로 생성된 pod를 감지하고 그것이 구동될 노드를 선택하는, 마스터 상의 컴포넌트.


스케줄링 결정을 위한 어카운트 내 요소들로는 개별·공동의 리소스 요건, 하드웨어/소프트웨어/정책 제약, 관련·비관련 스펙, 데이터 지역성, 워크로드間 개입, 데드라인들이 포함된다.
스케줄링 결정에 고려되는 요소에는 개별 및 집합 자원 요구사항, 하드웨어/소프트웨어/정책 제약조건, 어피니티 및 안티-어피니티 사양, 데이터 로컬리티, 워크로드 간 간섭, 데드라인이 포함됩니다.


===kube-controller-manager===
===[[kube-controller-manager]]===
{{참고|kube-controller-manager}}
컨트롤 플레인 컴포넌트로, [[k8s 컨트롤러|컨트롤러]] 프로세스를 실행합니다.
컨트롤러를 구동하는 마스터 상의 컴포넌트.


논리적으로, 컨트롤러는 개별 프로세스이지만, 복잡성을 낮추기 위해, 모두가 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다.
논리적으로는 컨트롤러가 별도의 프로세스이지만, 복잡성을 줄이기 위해 모든 컨트롤러를 단일 바이너리로 컴파일하여 단일 프로세스로 실행합니다.


----
다양한 유형의 컨트롤러가 있습니다. 그 예는 다음과 같습니다:
* Node 컨트롤러: 노드가 다운되었을 때 이를 감지하고 대응하는 역할을 합니다.
* Job 컨트롤러: 일회성 작업을 나타내는 Job 객체를 감시하고, 해당 작업을 완료하기 위해 Pod를 생성합니다.
* EndpointSlice 컨트롤러: EndpointSlice 객체를 채워서 서비스와 Pod 간의 연결을 제공합니다.
* ServiceAccount 컨트롤러: 새로운 네임스페이스에 대한 기본 ServiceAccount를 생성합니다.
위 목록은 전체 목록이 아닙니다.


이들 컨트롤러는 다음을 포함한다.
===[[cloud-controller-manager]]===
클라우드 특정 제어 로직을 포함하는 [[Kubernetes 컨트롤 플레인]] 컴포넌트입니다. cloud-controller-manager를 사용하면 클러스터를 클라우드 제공자의 API에 연결할 수 있으며, 클라우드 플랫폼과 상호작용하는 컴포넌트를 클러스터와 상호작용하는 컴포넌트와 분리합니다. cloud-controller-manager는 클라우드 제공자에 특정한 컨트롤러만 실행합니다. Kubernetes를 온프레미스에서 실행하거나 개인 PC 내의 학습 환경에서 실행하는 경우 클러스터에는 cloud-controller-manager가 없습니다.


* 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.
kube-controller-manager와 마찬가지로 cloud-controller-manager는 여러 논리적으로 독립적인 제어 루프를 단일 바이너리로 결합하여 단일 프로세스로 실행합니다. 성능 향상 또는 장애 허용을 위해 수평으로 확장(여러 복사본 실행)할 수 있습니다.
* 레플리케이션 컨트롤러: 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞는 수의 Pod들을 유지시켜 주는 책임을 가진다.
* 엔드포인트 컨트롤러: 엔드포인트 오브젝트를 채운다(즉, 서비스와 Pod을 연결시킨다.)
* 서비스 어카운트 & 토큰 컨트롤러: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성한다.


===cloud-controller-manager===
다음 컨트롤러는 클라우드 제공자 의존성을 가질 수 있습니다:
cloud-controller-manager는 바탕을 이루는 클라우드 제공사업자와 상호작용하는 컨트롤러를 작동시킨다. cloud-controller-manager 바이너리는 쿠버네티스 릴리스 1.6에서 도입된 알파 기능이다.
* 노드 컨트롤러: 클라우드 제공자를 확인하여 노드가 응답을 중지한 후 클라우드에서 삭제되었는지 여부를 결정합니다.
 
* 라우트 컨트롤러: 기본 클라우드 인프라에서 라우트를 셋업합니다.
cloud-controller-manager는 클라우드-제공사업자-특유 컨트롤러 루프만을 동작시킨다. 이 컨트롤러 루프는 kube-controller-manager에서 비활성 시켜야만 한다. kube-controller-manager를 구동시킬 때 --cloud-provider 플래그를 external로 설정함으로써 이 컨트롤러 루프를 비활성 시킬 수 있다.
* 서비스 컨트롤러: 클라우드 제공자의 로드 밸런서를 생성, 업데이트, 삭제합니다.
 
cloud-controller-manager는 클라우드 밴더 코드와 쿠버네티스 코어가 서로 독립적으로 발전시켜 나갈 수 있도록 해준다. 이전 릴리스에서는, 코어 쿠버네티스 코드가 기능상으로 클라우드-제공사업자-특유 코드에 대해 의존적이었다. 향후 릴리스에서, 클라우드 밴더에 따른 코드는 클라우드 밴더 자체에 의해 유지되도록 하여야만 하며, 쿠버네티스가 동작하는 동안 cloud-controller-manager에 연계되도록 하여야만 한다.
 
다음 컨트롤러들은 클라우드 제공사업자의 의존성을 갖는다.
 
* 노드 컨트롤러: 노드가 응답을 멈추고 나서 클라우드 상에서 삭제되어 졌는지 확정하기 위해 클라우드 제공사업자에게 확인하는 것
* 라우트 컨트롤러: 바탕을 이루는 클라우드 인프라에 경로를 구성하는 것
* 서비스 컨트롤러: 클라우드 제공사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것
* 볼륨 컨트롤러: 볼륨의 생성, 부착 그리고 마운트 하는 것과 볼륨을 조정하기 위해 클라우드 제공사업자와 상호작용 하는 것


==노드 컴포넌트==
==노드 컴포넌트==
노드 컴포넌트는 작동 중인 Pod을 유지시키고 쿠버네티스 런타임 환경을 제공하며, 모든 노드 상에서 동작한다.
===kubelet===
===kubelet===
{{참고|kubelet}}
클러스터 내 각 노드에서 실행되는 에이전트. 컨테이너들이 pod 내에서 작동하도록 한다.
kubelet은 다양한 메커니즘으로 제공된 PodSpec 집합을 가지며, PodSpec에 기술된 컨테이너들이 정상적으로 작동하도록 한다. kubelet은 쿠버네티스에 의해 생성되지 않은 컨테이너들은 관리하지 않는다.
===kube-proxy===
===kube-proxy===
{{참고|kube-proxy}}
kube-proxy는 호스트 상에서 네트워크 규칙을 유지하고 연결에 대한 포워딩을 수행함으로써 쿠버네티스 서비스 추상화가 가능하도록 해준다.
===컨테이너 런타임===
===컨테이너 런타임===
컨테이너 런타임은 컨테이너의 동작을 책임지는 소프트웨어다. 쿠버네티스는 몇몇의 런타임을 지원하는데 Docker, rkt, runc 그리고 OCI runtime-spec을 충족하는 모든 런타임 등이 있다.
==애드온==
==애드온==
애드온은 클러스터 기능을 이행하는 Pod과 서비스다. 이 Pod은 디플로이먼트, 레플리케이션 컨트롤러, 기타 등등에 의해 관리될 수도 있다. 네임스페이스를 갖는 애드온 오브젝트는 kube-system 네임스페이스 내에서 생성되어 진다.
선택된 일부 애드온이 아래에 설명되었으며, 사용가능한 전체 확장 애드온 리스트는 애드온을 참조한다.
===DNS===
===DNS===
여타 애드온들이 절대적으로 요구되지 않는 반면에, 많은 예시들에서 그것을 필요로 하기때문에 모든 쿠버네티스 클러스터는 cluster DNS를 갖추어야만 한다.
클러스터 DNS는 구성환경 내 다른 DNS 서버와 더불어, 쿠버네티스 서비스를 위해 DNS 레코드를 제공해주는 DNS 서버다.
쿠버네티스에 의해 구동되는 컨테이너는 DNS 검색에서 이 DNS 서버를 자동으로 포함시킨다.
===웹 UI (대시보드)===
===웹 UI (대시보드)===
대시보드는 쿠버네티스 클러스터를 위한 범용의 웹 기반 UI다. 사용자로 하여금 클러스터 자체 뿐만 아니라, 클러스터에서 동작하는 애플리케이션에 대한 관리와 고장처리를 할 수 있도록 허용해준다.
===컨테이너 리소스 모니터링===
===컨테이너 리소스 모니터링===
컨테이너 리소스 모니터링은 중앙 데이터베이스 내에 컨테이너들에 대한 포괄적인 시계열 메트릭스를 기록하고 그 데이터를 열람하기 위한 UI를 제공해 준다.
===클러스터-수준 로깅===
 
===네트워크 플러그인===
===클러스터-레벨 로깅===
==다음 내용==
[[k8s문서 - Logging Architecture|클러스터-레벨 로깅]] 메커니즘은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장하는 책임을 가진다.
 
==같이 보기==
* [[쿠버네티스 컴포넌트]]

2024년 7월 5일 (금) 00:58 기준 최신판

1 개요[ | ]

Crystal Clear action info.png 작성 중인 문서입니다.
Kuberentes Components
쿠버네티스 컴포넌트

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


쿠버네티스를 배포하면 클러스터를 얻습니다.

쿠버네티스 클러스터는 노드라고 불리는 워커 머신 세트로 구성되며, 이 노드들은 컨테이너화된 애플리케이션을 실행합니다. 모든 클러스터에는 최소한 하나의 워커 노드가 있습니다.

워커 노드들은 애플리케이션 워크로드의 컴포넌트인 파드를 호스팅합니다. 컨트롤 플레인은 클러스터의 워커 노드와 파드를 관리합니다. 프로덕션 환경에서는 컨트롤 플레인이 보통 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 보통 여러 노드를 실행하여 내결함성(fault-tolerance)과 고가용성(high availability)을 제공합니다.

이 문서는 완전하고 작동하는 쿠버네티스 클러스터를 구성하는 데 필요한 다양한 컴포넌트를 설명합니다.

Components-of-kubernetes.svg
쿠버네티스 클러스터의 컴포넌트

2 컨트롤 플레인 컴포넌트[ | ]

컨트롤 플레인 컴포넌트는 클러스터에 대한 전반적인 결정을 내리고(예: 스케줄링), 클러스터 이벤트를 감지하고 대응합니다(예: Deployment의 replicas 필드가 충족되지 않을 때 새 파드를 시작).

컨트롤 플레인 컴포넌트는 클러스터의 모든 머신에서 실행될 수 있습니다. 그러나 간단히 하기 위해 설정 스크립트는 일반적으로 모든 컨트롤 플레인 컴포넌트를 같은 머신에서 시작하며, 이 머신에서는 사용자 컨테이너를 실행하지 않습니다. 여러 머신에 걸쳐 실행되는 예시 컨트롤 플레인 설정에 대해서는 kubeadm을 사용하여 고가용성 클러스터 생성하기를 참조하십시오.

2.1 kube-apiserver[ | ]

API 서버는 Kubernetes 컨트롤 플레인의 컴포넌트로, Kubernetes API를 노출합니다. API 서버는 Kubernetes 컨트롤 플레인의 프론트 엔드 역할을 합니다.

Kubernetes API 서버의 주요 구현체는 kube-apiserver입니다. kube-apiserver는 수평 확장을 염두에 두고 설계되었습니다. 즉, 더 많은 인스턴스를 배포함으로써 확장할 수 있습니다. 여러 인스턴스의 kube-apiserver를 실행하고, 그 인스턴스들 간의 트래픽을 분산시킬 수 있습니다.

2.2 etcd[ | ]

Kubernetes의 모든 클러스터 데이터를 위한 백엔드 스토어로 사용되는 일관성 있고 고가용성의 키-값 저장소입니다.

Kubernetes 클러스터가 etcd를 백엔드 스토어로 사용하는 경우, 데이터를 백업 계획을 반드시 마련해야 합니다.

etcd에 대한 자세한 정보는 공식 문서에서 확인할 수 있습니다.

2.3 kube-scheduler[ | ]

노드가 할당되지 않은 새로 생성된 파드를 감시하고 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트입니다.

스케줄링 결정에 고려되는 요소에는 개별 및 집합 자원 요구사항, 하드웨어/소프트웨어/정책 제약조건, 어피니티 및 안티-어피니티 사양, 데이터 로컬리티, 워크로드 간 간섭, 데드라인이 포함됩니다.

2.4 kube-controller-manager[ | ]

컨트롤 플레인 컴포넌트로, 컨트롤러 프로세스를 실행합니다.

논리적으로는 각 컨트롤러가 별도의 프로세스이지만, 복잡성을 줄이기 위해 모든 컨트롤러를 단일 바이너리로 컴파일하여 단일 프로세스로 실행합니다.

다양한 유형의 컨트롤러가 있습니다. 그 예는 다음과 같습니다:

  • Node 컨트롤러: 노드가 다운되었을 때 이를 감지하고 대응하는 역할을 합니다.
  • Job 컨트롤러: 일회성 작업을 나타내는 Job 객체를 감시하고, 해당 작업을 완료하기 위해 Pod를 생성합니다.
  • EndpointSlice 컨트롤러: EndpointSlice 객체를 채워서 서비스와 Pod 간의 연결을 제공합니다.
  • ServiceAccount 컨트롤러: 새로운 네임스페이스에 대한 기본 ServiceAccount를 생성합니다.

위 목록은 전체 목록이 아닙니다.

2.5 cloud-controller-manager[ | ]

클라우드 특정 제어 로직을 포함하는 Kubernetes 컨트롤 플레인 컴포넌트입니다. cloud-controller-manager를 사용하면 클러스터를 클라우드 제공자의 API에 연결할 수 있으며, 클라우드 플랫폼과 상호작용하는 컴포넌트를 클러스터와 상호작용하는 컴포넌트와 분리합니다. cloud-controller-manager는 클라우드 제공자에 특정한 컨트롤러만 실행합니다. Kubernetes를 온프레미스에서 실행하거나 개인 PC 내의 학습 환경에서 실행하는 경우 클러스터에는 cloud-controller-manager가 없습니다.

kube-controller-manager와 마찬가지로 cloud-controller-manager는 여러 논리적으로 독립적인 제어 루프를 단일 바이너리로 결합하여 단일 프로세스로 실행합니다. 성능 향상 또는 장애 허용을 위해 수평으로 확장(여러 복사본 실행)할 수 있습니다.

다음 컨트롤러는 클라우드 제공자 의존성을 가질 수 있습니다:

  • 노드 컨트롤러: 클라우드 제공자를 확인하여 노드가 응답을 중지한 후 클라우드에서 삭제되었는지 여부를 결정합니다.
  • 라우트 컨트롤러: 기본 클라우드 인프라에서 라우트를 셋업합니다.
  • 서비스 컨트롤러: 클라우드 제공자의 로드 밸런서를 생성, 업데이트, 삭제합니다.

3 노드 컴포넌트[ | ]

3.1 kubelet[ | ]

3.2 kube-proxy[ | ]

3.3 컨테이너 런타임[ | ]

4 애드온[ | ]

4.1 DNS[ | ]

4.2 웹 UI (대시보드)[ | ]

4.3 컨테이너 리소스 모니터링[ | ]

4.4 클러스터-수준 로깅[ | ]

4.5 네트워크 플러그인[ | ]

5 다음 내용[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}