Kubernetes::핵심 개념 (Core Concepts)

category DevOps/Kubernetes 2023. 12. 19. 22:37
728x90
반응형

핵심 개념 (Core Concepts)

Kubernetes Architecture (쿠버네티스 아키텍처)

Master Node

구성 설명
API Server ㆍ쿠버네티스 클러스터의 모든 작업을 제어하는 REST API
Controller ㆍ클러스터를 설계한 상태로 유지 (파드 개수 유지)
ㆍ백그라운드에서 클러스터 컨트롤러를 관리
ㆍAPI 서버를 이용하여 클러스터 상태를 모니터링
Scheduler ㆍ노드가 배정되지 않은 새로 생성된 Pod를 감지하고 그것을 어느 Node에서 실행될지를 선택
ㆍPod를 어떻게 Node에 배치할지를 예약
ETCD ㆍ클러스터의 모든 정보를 저장하는 데이터 저장소
ㆍ고가용성을 가진 Key-Value 저장소 구조

Worker Node

구성 설명
kubelet ㆍ노드에서 실행되는 에이전트로 컨테이너가 Pod에서 실행 중인지 확인
ㆍkubelet은 다양한 메커니즘을 통해 제공되는 PodSpec을 가져와 해당 요구사항으로 상태를 유지
POD ㆍcontainer의 그룹 k8s의 최저 배포 단위
ㆍPod 중 컨테이너 Storage, namespaces, port 공유
ㆍ하나 이상의 컨테이너 그룹를 말한다.
kube-proxy ㆍkube-proxy는 호스트 상에서 네트워크 규칙을 유지하고 연결에 대한 포워딩을 수행함
ㆍ쿠버네티스 서비스를 추상화
Container runtime ㆍ작성된 이미지를 가져와 컨테이너를 실행
ㆍKubernetes는 컨테이너 런타임 교체가 가능하기때문에 Docker, containered, rkt, cri-o 같은 컨테이너 런타임을 사용

ETCD

ETCD란?

ETCD는 간단하고 안전하며 빠른 분산된 신뢰할 수 있는 키-값 저장소이다.

ETCD 데이터 저장소

ETCD 데이터 저장소는 Nodes, PODS, Configs, Secrets, Accounts, Roles및 Bindings와 같은 클러스터 관련 정보를 저장한다.
kubectl get명령 을 실행할 때 표시되는 모든 정보 는 ETCD Server에서 취득하여 보여지는 정보이다.

Kube API Server

Kube-apiserver는 kubernetes의 기본 구성 요소이다.
Kube-apiserver는 ETCD 키-값 저장소의 authenticating, validating요청 retrieving 및 데이터를 담당한다.
kube-apiserver는 ETCD 데이터 저장소와 직접 상호 작용하는 유일한 구성 요소이다.
kube-scheduler, kube-controller-manager 및 kubelet과 같은 다른 구성 요소는 API 서버를 사용하여 해당 영역의 클러스터에서 업데이트한다.

Kube Controller Manager

쿠버네티스 용어로 컨트롤러는 시스템 내 구성 요소의 상태를 지속적으로 모니터링하고 전체 시스템을 원하는 기능 상태로 가져오는 프로세스이다.

노드 컨트롤러 (Node Controller)

노드의 상태를 모니터링하고 애플리케이션을 계속 실행하는 데 필요한 조치를 취하는 일을 담당한다.

리플리카 컨트롤러 (Replication Controller)

복제본 세트의 상태를 모니터링하고 세트 내에서 항상 원하는 수의 포드를 사용할 수 있는지 확인한다.

Kube Scheduler

kube-scheduler는 노드에서 POD 스케줄링을 담당한다.
kube-scheduler는 어떤 포드가 어떤 노드에 있는지 결정하는 역할만 한다.
실제로 POD를 노드에 배치하는 것이 아니라 kubelet이 담당한다.

Kubelet

Kubelet은 kubernetes 클러스터의 유일한 접점이다
kubelet 노드에 POD를 생성하고 스케줄러는 어떤 포드가 어디로 갈지 결정합니다.

Kube Proxy

Kubernetes 클러스터 내에서 모든 POD는 다른 모든 POD에 도달할 수 있으며 이는 POD 네트워킹 클러스터를 클러스터에 배포하여 수행된다.
Kube-Proxy는 kubernetes 클러스터의 각 노드에서 실행되는 프로세스이다.

파드 (Pods)

Kubernetes는 작업자 노드에 직접 컨테이너를 배포하지 않고 컨테이너를 생성하고 실행하는 파드를 배포한다.
파드는 애플리케이션을 실행하는 컨테이너와 일대일 관계를 갖는다.

리플리카 컨트롤러(Replica Controller)

  • 요구하는 Pod의 개수를 보장하며 파드 집합의 실행을 항상 안정적으로 유지하는 것을 목표
  • 요구하는 Pod의 개수가 부족하면 template 이용해 Pod를 추가
  • 요구하는 Pod 수 보다 많으면 최근에 생성된 Pod를 삭제
  • 기본 구조
    • selector
    • replicas
    • template

리플리카셋 (ReplicaSet)

  • ReplicationController 와 같은 역할을 하는 컨트롤러
  • ReplicationController 보다 풍부한 selector
  • matchExpressions 연산자
연산자 설명
In key와 values를 지정하고 key, value가 일치하는 Pod만 연결
NotIn key는 일치하고 value는 일치하지 않는 Pods에 연결
Exists key에 맞는 label의 pod를 연결
DoesNotExist key와 다른 label의 pod를 연결

리플리카셋 (ReplicaSet) vs 리플리카 컨트롤러 Replica Controller

  • Replication Controller로 대체되는 오래된 기술이다.
  • ReplicaSet은 복제를 설정하는 새로운 방법이다.

배포 (Deployment)

  • ReplicaSet을 컨트롤해서 Pod수를 조절하는 역할을 한다.
  • POD의 선언적 업데이트가 가능하다.

Rolling Update & Rolling Back

  • RollingUpdate란?
    • 서비스 중단없이 이루어질 수 있도록 하는 업데이트

서비스 (Service)

  • 동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공
  • 파드들의 하나의 IP로 묶어서 관리를 해줌

서비스 타입

ClusterIP

  • selector의 label가 동일한 파드들의 그룹으로 묶어 단일 진입점 (Virtual_IP)을 생성
  • 클러스터 내부에서만 사용가능
  • type 생략 시 default 값으로 10.96.0.0/12 범위에서 할당됨

NodePort

  • 모든 노드를 대상으로 외부 접속 가능한 포트를 예약
  • Default NodePort 범위: 30000-32767
  • ClusterIP를 생성 후 NodePort 예약

LoadBalancer

  • Public 클라우드 (AWS, Azure, GCP 등)에서 운영가능
  • LoadBalancer를 자동으로 구성 요청
  • NodePort를 예약 후 해당 nodeport로 외부 접근을 허용

ExternalName

클러스터 내부에서 External(외부)의 도메인을 설정

네임 스페이스 (Namespace)

  • 클러스터 하나를 여러 개의 논리적인 단위로 나누어서 사용
  • 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유
  • 용도에 따라 실행해야 하는 앱을 구분할 때 사용

 

728x90
반응형