
Mumshad Mannambeth 님의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 들으며 정리한 내용들입니다.
Udemy Mumshad님- CKA 강의 들으러 가기
CKA 준비를 하며, 쿠버네티스를 기초부터 다지려고 합니다. 우선 이번 내용에서는 쿠버네티스의 핵심 개념들과 아키텍처를 알아보겠습니다. 아래의 사진은 이번 포스트에서 다루는 쿠버네티스 아키텍처 요소들입니다. 참고히시면 좋을 것 같습니다.

Master Nodes (Control Plane)[ETCD Cluster]클러스터에 대한 정보를 저장하는 클러스터
[kube-scheduler]노드에서 애플리케이션 또는 컨테이너의 스케줄링을 담당하는 스케줄러
[Controller-Manager]Node-Controller
Replication-Controller
[kube-apiserver]클러스터 내의 모든 작업을 오케스트레이션 하는 API 서버
Worker Nodes[kubelet]kube API 서버의 지시를 수신하고 필요에 따라 노드에 컨테이너를 배포하거나 삭제함(컨테이너 관리).
[kube-proxy]클러스터 내 서비스(Worker Node) 간의 통신
워커 노드에서 실행 중인 컨테이너가 서로 연결될 수 있도록 필요한 규칙이 워커 노드에 적용되도록 함.
Distributed reliable key-value store
분산형 신뢰 키-값 저장소- 기본 포트는 2379번(클라이언트와 통신을 위한)
- etcd 멤버간 통신에는 2380 포트 사용
- TLS 암호화가 걸려 있음
ETCD Cluster에 저장되는 정보들
수동 설치(Manual)
kubeadm 사용
etcdctl 은 etcd를 cli 환경에서 사용할 수 있게 하는 명령어
API Version 3 (필수)
export ETCDCTL_API=3 을 하지 않으면 데이터를 제대로 읽을 수 없음인증서(--cacert, --cert, --key)가 필요한 이유
클러스터를 변경하기 위해 수행해야 하는 모든 작업의 중심에는 kube api-server 가 있음.
- 보안 창구: API 서버가 중간에 권한 확인을 하며 문지기 역할을 함
- 데이터 정제: 유효성 검사를 하여 etcd에는 오직 올바른 데이터만 저장되게 함
Authenticate User - 사용자 인증Validate Request - 요청 유효성 검사Retrieve data - API 서버가 ETCD에서 데이터를 가져오는 단계Update ETCD - ETCD 업데이트. 사용자에게 업데이트 되었음을 알림Scheduler Kubelet - kube api server 지시 수신. 노드에 컨테이너를 배포/삭제클러스터의 현재 상태를 끊임없이 감시(Watch)하고, 사용자가 원하는 상태(Desired State)와 다를 경우 이를 일치시키기 위해 조치를 취하는 관리자들의 집합체
- 단일 프로세스에 패키징
Watch Status - 상태 감시Desired State)와 현재 돌아가고 있는 실제 상태(Current State)를 계속 비교Remediate Situation - 상황 개선/조치Node-Controller - 노드의 상태를 체크하고, 노드가 죽으면(Unreachable) 대응함Replication-Controller - 파드의 복제본 개수가 설정값과 일치하는지 항상 확인하고 유지함Deployment-Controller - 파드의 배포와 업데이트(Rolling Update)를 관리함Endpoint-Controller - Service와 Pod를 연결해주는 다리(Endpoints)를 관리함Namespace-Controller - Namespace 가 삭제될 때 그 안의 자원들을 깨끗이 정리함노드 장애 대응 컨트롤러
Node Monitor Period - 5sNode Monitor Grace Period - 40sPOD Eviction Timeout - 5mDesired State(약속했던 수) Pod 수 지킴이 컨트롤러
어떤 노드에 어떤 파드를 배치할지
결정하는 역할만담당
- (실제 노드에 파드를 배치하지는 않음) → 해당 작업은
kubelet의 작업
Filter Nodes - 필터링Rank Nodes - 순위 매기기Binding - 바인딩etcd 에 업데이트 하는데, 이 과정을 Binding 이라고 함→ 이 작업들이 끝나야 비로소 워커 노드의 kubelet 이 작업을 시작
Least RequestMost Requested마스터 노드의 명령을 받아 워커 노드에서 실제 컨테이너를 가동하고 관리하는 현장 관리 소장 역할
Register Node - 노드를 k8s 클러스터에 등록Create PODs - 파드 생성Monitor Node & PODs - 노드와 파드의 상태를 지속적으로 kube api server에 보고*주의:
kube-admin을 사용하여 클러스터 배포 시, kubelet은 자동으로 배포되지 않음.
- 사용자가 미리 노드에 수동으로 설치(apt-get 등) 해두어야 함
모든 노드에 상주하며
Service IP ↔ 실제 Pod IP를 연결하는 네트워크 규칙(iptables) 을 관리하는 역할
배경: Pod Network 의 한계
해결책: Service 라는 추상화
실무자: Kube-proxy 의 역할
정보 수집 : API server 를 감시하다가 새로운 Service 가 생기면 정보를 즉시 수집iptables : 각 워커 노드의 커널 네트워크 규칙(iptables 등)에 대표 번호로 오는 신호는 실제 파드 IP로 보내라는 이정표를 세움kube-proxy 가 만든 규칙에 의해 실제 살아있는 파드로 Forwarding 됨