핵심 개념 (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)
- 클러스터 하나를 여러 개의 논리적인 단위로 나누어서 사용
- 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유
- 용도에 따라 실행해야 하는 앱을 구분할 때 사용
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes::스케쥴링 (Scheduling) - Node Affinity (0) | 2023.12.19 |
---|---|
Kubernetes::스케쥴링 (Scheduling) (0) | 2023.12.19 |
Kubernetes - Helm (헬름) (0) | 2021.12.28 |
Kubernetes 대시보드 설치 (0) | 2021.12.08 |
Kubernetes - canary deployment (카나리 배포) (0) | 2021.12.03 |