isPowerfulBlog
[Kubernetes] Kubernetes Tutorial for Beginners 정리(1) 본문
Kubernetes?
컨테이너 오케스트레이션 툴
등장 배경
- 모놀리식 아키텍처 -> 마이크로 아키텍처
개발, 테스트, 장애 대응 등 여러 면에서 더 유연한 마이크로 아키텍처로 전환 - 서비스의 규모가 커지면서 관리해야하는 컨테이너의 개수 증가 -> 컨테이너들을 쉽게 관리할 툴 필요
오케스트레이션 툴의 특징
- 고가용성
- 확장성
- 백업 및 복원
Main K8s Components
Pod
- k8s에서 가장 작은 단위
- 컨테이너 추상화 개념
- 보통 하나의 애플리케이션 당 Pod 하나
- 각각의 Pod들은 자신의 IP 주소를 가짐
- Pod가 재생성되면 IP 주소가 새로 할당됨 -> 관리하기 힘들어
Service
- 각각의 Pod에 영구적인 IP 주소를 붙일 수 있음
- Pod의 lifecycle에 연결 X -> Pod가 죽어도 Service와 이 IP 주소는 그대로
- 외부 서비스에서 접속할 때:
http://{NODE_IP}:{PORT}
-> 테스트 할 때는 괜찮은데, 최종 product에서는 적절하지 X - Replecates의 로드밸런서 역할
Ingress
- ingress에 먼저 request를 보내면 service로 forwarding 됨 -> 외부에서 애플리케이션 접속 시, 도메인 네임 url로 접속 가능
ConfigMap
- 애플리케이션의 외부에 설정 내용들을 저장해놓음
- 서비스 이름, url 등등 설정이 바뀔 때 이미지를 다시 빌드하지 않아도 됨
- 보안 수준 떨어짐
Secrets
- 보안이 필요한 데이터들 저장
Volumes
- 하드 드라이브에 속해있는 물리적 저장 공간, pod에 연결되어있음
- 재시작되어도 모든 데이터가 유지됨
Deployment
- 애플리케이션 pod, replica에 대해서 계획 및 선언
- pod의 추상화 개념 -> pod를 직접 건드는 것이 아니고, deployment를 통해서 컨트롤
- DB는 state를 가지기 때문에 deployment로 replica 만들 수 X, replica 사이에서 data의 모순이 있어서는 안 됨
StatefulSet
- DB(MySQL, MongoDB, ElasticSearch 등)는 deployment가 아닌 statefulset을 이용해서 생성
- deployment와 마찬가지로 pod, replica에 대해 계획 및 선언
- DB를 읽고 쓰는 과정에서 싱크를 확실하게 맞춰주는 역할을 함
K8s Architecture
Node(Worker) process
- 실제로 일하는 노드
- 각각의 노드들은 여러개의 pod를 가짐
- 모든 노드에는 pod를 스케줄링하고 관리하는 3개의 프로세스가 존재Container Runtime
- 컨테이너 생성Kubelet
- 컨테이너, 노드와 상호작용
- 컨테이너 내부의 pod 시작Kube Proxy
- request forwarding
Master process
- pod 스케줄링
- 모니터링
- pod re스케줄링, restart
- 4개의 프로세스가 존재API Server
- cluster gateway
- 인증을 위한 gatekeeper 역할
- 새로운 pod를 스케줄링하거나 새로운 서비스를 deploy 하고 싶다면 API server와 소통해야함
Scheduler
- 어떤 노드에 pod를 스케줄링할지 결정
Controller manager
- 클러스터의 상태 변화를 감지
etcd
- 클러스터의 변화를 key value 형태로 저장
Cluster Set up 예시
- 2 Master Nodes -> 마스터는 리소스 덜 잡아먹음
- 3 Workder Nodes -> 일은 실제로 워커노드가 하기 때문에 리소스 많이 잡아먹음
Add new Master/Node server
- 빈 서버 만들기
- master 또는 node에 필요한 process 설치
- 클러스터에 추가
Reference
'Infra' 카테고리의 다른 글
[Knative] kind로 knative 클러스터 구축하기 | Ubuntu 22.04 (0) | 2023.06.23 |
---|---|
[Kubernetes] Knative란? (0) | 2023.06.04 |
[JupyterNotebook] 주피터노트북에서 pyspark 사용하기 (0) | 2023.04.08 |
[Raspberry Pi] SD카드에 라즈베리 파이 OS 쓰기 (0) | 2023.04.05 |
[Ubuntu] SD카드 포맷 및 파티션 삭제/나누기 (0) | 2023.04.05 |