상세 컨텐츠

본문 제목

쿠버네티스[2] 쿠베네티스 컴포넌트 20220829

보안/java

by MustThanks 2022. 8. 29. 14:04

본문

반응형

쿠버네티스 컴포넌트
  구버네티스를 배포하면 클러스터를 얻음

- 쿠버네티스 클러스터는 컨테이니화된 응용프로그램을 실행하하는 노드라고 불리우는
   워커 머신의 집합
- 모든 클러스터는 최소 한개의 워커 노드를 가진다.

* 워커노드
  실제로 Pod들이 주로 적재되는 노드로써 팟들을 유지 및 런타임 환경을 제공
  응용프로그램의 구성요소인 Pad를 호스트(실행) 한다.
  
* 컨트롤 플레인
  워커 노드와 클러스터 내 파드를 관리한다.
  운영환경에서는 일반적으로 컨트롤 플레인이 여러 컴퓨터에 걸쳐 실행되고 
  클러스터는 일반적으로 여러 노드를 실행하므로 내결함성과 고가용성이 제공


쿠버네티스 클러스터 구성요소

* 컨트롤 플레인 컴포넌트
  - 클러스터에 관한 전반적인 결정(예 : 스케줄링)을 수행하고 클러스터 이벤트( 예 : 디플로이먼트의 replicas 필드에 대한 요구 조건이 충족되지 않을 경우 새로운 파드를 구동시키는 것)를 감지하고 반응한다.
  - 클러스터 내 어떠한 머신에서든지 동작할 수 있다
  - 간결성을 위하여 구성 스크립트는 보통 동일 머신 상에 모든 컨트롤 플레인 컴포넌트를 구동 시키고 사용자 컨테이너는 해당 머신 상에 동작 시키지 않는다.

* kube-apiserver
  - API 서버는 쿠버네티스 API를 노출하는 쿠버네티스 컨트롤 플레인 컴포넌트이다.
  - API서버는 쿠버네티스 컨트롤 플레인의 프론트 엔드이다.
  - 구버네티스 API서버의 주요 구현은 kube-apiserver 이다.
  - kube-apiserver는 수평으로 확장되도록 디자인 되었다는 것은 더 많은 인스턴스를 배포해서 확장할 수 있다는 것이다.
   - 여러 kube-apiserver 인스턴스를 실행하고 인스턴스간의 트래픽을 균형있게 조절할 수 있다.

* etcd
  - 모든 크러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성 고가용성 키-값 저장소
  - 쿠버네티스 클러스터에서 etcd를 뒷다늬 저장소로 사용한다면 이 데이터를 백업하는 계획인 필수 이다.

* kube-scheduler
  - 노드가 배정되지 않은 새로 생성된 파드를 감지하고 실행할 노드를 선택하는 컨트롤 플레인 컴포넌트
  - 스케줄링 결정을 위해서 고려되는 요소는 리소스에 대한 개별 및 총체적 요구사항, 하드웨어/소프트웨어/정책적 제약, 어피니티(affinity)및 안티 어피니티(anti-affinity)명세 데이터 지역성 워크로드간 간섭 데드라인을 포함한다.

* kube-controller-manager
   - 컨트롤러 프로세스를 실행하는 컨트롤 플레인 컴포넌트
   - 논리적으로 각 컨트롤러는 분리된 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 바이너리로 컴파일되고 단일 프로세스 내에서 실행된다.
   - 다음을 포함
      ./노드 컨트롤러 : 노드가 다움되었을 때 통지와 대응에 관한 책임을 가진다.
      ./ 레플리케이션 컨트롤러 : 시스템의 모든 레플리케이션 컨트롤러 오브젝트에 대해 알맞은 수의 파드를 유지시켜주는 책임
      ./ 엔트포인드 컨트롤러 : 엔트포인트 오브젝트를 채운다(서비스와 파드를 연결 시킨다)
      ./ 서비스 어카운트 & 토큰 컨트롤러 : 새로운 네임스페이스에 대한 기본 계정과 API접근 토큰을 생성한다.

  * Cloud-controller-manager
    - 클라우드별 컨트롤 로직을 포함하는 쿠버네티스 컨트롤 프레인 컴포넌트이다.
    - 클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고 해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호작용하는 컴포넌트를 구분할 수 있게 해준다.
     - 클라우드 제공자 전용 컨트롤러만 실행한다.
     - 자신의 사내 또는  PC내부의 확습환경에서 쿠버네티스를 실행 중인 경우 클러스테에는 클라우드 컨트롤러 매니저가 없다
    - 논리적으로 독립적인 여러 컨트롤 루프를 단일 프로세스로 실행하는 단일 바이너리로 결합한다, 
    - 수평으로 확장(두개 이상의 복제실행)해서 성능을 향상 시키거나 장애를 견딜 수 있다
    - 아래의 컨트롤러들은 클라우드 제공 사업자의 의존성을 가질 수 있다.
    ./ 노드 컨트롤러 : 노드가 응답을 멈춘 후 클라우드 상에서 작제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것
    ./ 라우트 컨트롤러 : 기본 클라우드 인프라에 경로를 구성하는 것
    ./ 서비스 컨트롤러 : 클라우드 제공 사업자 로드밸런서를 생성,업데이트 그리고 삭제하는것

 * 노드 컴포넌트
   노트 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공하며 모든 도느 상에서 동작한다.

  * kubelet
   - 클러서터의 각 노드에서 실행되는 에이전트, Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
   - Kubelet은 다양한 메커니즘을 통해 제공된 파드 스펙(PodSpec)의 집합을 받아서 컨테이너가 해당 파드 스펙에 따라 안전하게 동작하는 것을 보장한다.
   - Kubelet는 쿠버네티스를 통해 생성되지 않는 컨테이너느 관리하지 않는다.

 * Kube-proxy
   - kebe-proxy는 클러스터의 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스의 서비스 개념의 구현부이다.
   -  kube-proxy는 노드의 네트워크 규칙을 관린하며 이 네트워크 규칙을 이용하여 내부네트워크 세션이나 클러스터 밖의 파드로 통신을 한다.
   - kube-proxy는 운영 체제에 가용한 패킷 필터링 계층이 있는 경우 이를 사용한다. 패킷 필터링 계층이 없는 경우 kube-proxy는 트래픽 자체를 forward한다.
  
* 컨테이너 런타임
   컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다.
   쿠버네티스는 containerd,CRI-O와 같은 컨테이너 런타임 및 모든 Kubernetes CRI(컨테이너 런타임 인터페이스)구현체를 지원한다.

* 애드온
  애드온은 쿠버네티스 리소스(데몬셋, 디플로이먼트 등)를 이용하여 클러스터 기능을 구현한다.
  이들은 클러스터 단위의 기능을 제공하기 때문에 애드온에 대한 네임스페이스 리소스 kube-system 네임스페이스에 속한다.
  
*DNS
  클러스터 DNS는 구성환경 내 다른 DNS서버와 더불어 쿠버네티스 서비스를 위해 DNS 레코드를 제공해 주는 DNS 서버다
  쿠버네티스에 의해 구동되는 컨테이너는 DNS 검색에서 이 DNS서버를 자동으로 포함한다.

*웹 UI(대시보드)
 대시보드는 쿠버네티스 클러스터를 위한 범용의 웹 기반 UI다
 사용자가 클러스터 자체뿐만 아니라, 클러스터에서 동작하는 애플리케이션에 대한 관리와 문제 해결을 할 수 있도록 도와준다

* 컨테이너 리소스 모니터링
  컨테이너 리소스 모니터링은 중앙 데이터베이스 내의 컨테이너들에 대한 포괄적인 시계열 맫트리스를 기록하고 그 데이터를 열람하기 위한 UI를 제공

* 클러스터-레벨 로깅
 클러스터 레벨 로킹 메커니즘은 검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장하는 책임을 진다
https://d33wubrfki0l68.cloudfront.net/2475489eaf20163ec0f54ddc1d92aa8d4c87c96b/e7c81/images/docs/components-of-kubernetes.svg

관련글 더보기

댓글 영역