1. Kubernetes
K8s는 컨테이너의 집합(Pod)을 효율적으로 배포•관리하기 위한 오픈소스 Ochestrator이다.
- Master : K8s의 전체적인 Control
- Worker(Node) : Container가 배포되어 구동되는 Node
- API Server : Node, Web Console, Cli 명령어 등과 통신
- Etcd : K8s의 Configuration 등, Stateful 정보를 저장하기 위한 Key-Value 방식의 분산형 DB
- Scheduler : 컨테이너를 어느 노드에 배포할 것인지 결정
- C-M(Controller Managers) : 구동중인 컨테이너가 죽으면 Restart 시키는 등의 관리
- C-C-M(Cloud Controller Managers)
- Container Runtime : 파일 시스템이나 네트워킹과 같은 시스템 리소스를 가상화하는 Namespace와 CPU/Memory등의 리소스를 할당하는 cgroup을 설정하고 명령 실행.
- Kubelet : Master로 부터 명령을 받는 Agent로써, 컨테이너의 상태 정보를 Master로 전송.
- Kube-prxoy : 컨테이너가 외부로 통신하기 위한 NAT와 Routing
- kube-dns : Pod의 IP는 ephemeral이므로 재기동 후 주소가 변경될 수 있다. Pod가 배포되면 모든 컨테이너의 Service IP는 '/etc/relosv.conf' 경로에 저장되어 Pod간 통신 시 Service의 Label을 바라본다.
* Etcd에 모든 Config 정보와 Password 등의 보안 정보가 저장되므로 이중화와 필요시 암호화는 것이 좋다.
* Dashboard : GUI로 Cluster Control이 가능하나, 보안에 취약해서 사용에 유의하여야 한다.
2. Pod
- n개의 Container로 구성된 Building Block으로 Cluster의 최소 단위
* 동일 Pod 내 Container는 Local Disk와 IP를 공유
- Pod는 etcd의 Manifest에 정의 됨
* Manifest : API 객체에 대한 Text 파일
* Sidecar : HA Proxy / Log Collector / Heartbeat 등의 Sub Agent
apiVersion: v1
kind: Pod
metadata:
name: nginx
sepc:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
- apiVersion : Kubernetes의 API 버전
- kind : Resource의 종류
3. Label
- Key-Value 페어로 구성된 1개 이상의 Pod tagging으로 K8s의 리소스를 선택하는데 사용
- K8s에서는 Equality와 Set의 두가지 방식을 제공
* 용도(Frontend / Backend / DB) 또는 사용자(Developer / Operator) 별로 Pod 식별
apiVersion: v1
kind: Pod
metadata:
key1: value1
key2: value2
1) Equality based Selector
: Key와 Value가 일치하는 경우를 식별하며, ReplicaController에서 사용
environment = production
tier != frontend
2) Set based Selector
: Key 집합 내에 Value가 존재하면 Pod 식별. ReplicaSet에서 사용
environment in (production, qa)
tier notin (frontend, backend)
partion
!partion
4. Namespace
- 서비스(팀)마다 권한과 리소스를 할당해주기 위한 일종의 Tenant 역할로 고유한 이름을 가진다
- 동일한 Namespace 내 리소스를 구별하기 위해 Label 사용
5. Reference
쿠버네티스 컴포넌트
Kubernetes Advanced Workshop
조대협의 블로그
'System Engineering > Kubernetes' 카테고리의 다른 글
6. K8s Volume (0) | 2021.04.05 |
---|---|
5. K8s Lifecycle / Configmap (0) | 2021.04.02 |
4. K8s Service / Ingress (0) | 2021.03.30 |
3. K8s Controller (0) | 2021.03.25 |
1. 가상화와 Container의 차이 (0) | 2021.02.20 |