티스토리 뷰

Log/.TIL

Kubernetes 체험기 #3

가그린민트 2019. 1. 27. 21:23





해당 글은 구글 스터디잼 Kubernetes in the Google Cloud를 통해 경험한 내용을 바탕으로 합니다.

해당 과정의 Link는 https://run.qwiklabs.com/quests/29


3주간의 kubernetes 체험기 마지막날이다. 이번주엔 Build a Slack Bot with Node.js on kube, private kube cluster, helm package manager, NGINX ingress controller까지 경험하며 사실상 입문 과정을 마무리하였다. 동시에 쿠버네티스 내부 파트를 집중적으로 책을 읽었다. 뒤늦게 조대협님의 블로그를 접했는데, 먼저 읽고 시작했으면 어땠을까싶다.


쿠버네티스를 이해하는데에 있어 실습과정을 따르면서, pods/service/deployment 순서로 접했는데, 내부구조를 이해하기 위해서는 추상화 밑단인 master node (etcd 분산스토리지, api server, scheduler 등), worker node (kubelet, kube-proxy, docker 등), addon component (dns, ingress 등)의 개념을 이해하여야 한다. 



1. kubernetes component는 오직 api 서버와 통신한다. 

즉, api 서버는 etcd와 통신할 수 있는 유일한 component다.


2. etcd 는 key-value storage로, 모든 object(pod, rc, service, secret 등)을 분산 저장한다. 

api server를 통해 간접적으로 읽고 쓰이는데 이때 낙관적 잠금방식을 통해 동시성 제어를 하며 우선순위는 RAFT 알고리즘을 활용한다(이에 etcd 인스턴스는 홀수여야 한다.https://blog.containership.io/etcd/)


3. kubectl 등의 client로 api server에 post요청을 할때, 인증/권한승인/승인제어 플로그인 등을 거치게 된다. 이 후 api server는 object의 유효성을 검사하고 etcd에 저장한 다음 client에 응답을 전달한다.


4. Scheduler는 Pod가 1)스케줄될 수 있는 모든 노드의 목록을 얻은 후 2)우선순위를 정한다.

(1) 노드가 포드의 하드웨어 리소스 요청을 이행할수 있는지

(2) 노드에 리소스가 부족한지(메모리나 디스크 상태)

(3) 노드가 포드 스펙의 노드 셀렉터에 맞는 라벨을 가질 수 있는지

(4) 특정 호스트 포트에 바인딩 된 경우, 해당 노드에 포트가 이미 사용되고 있는지

(5) 포드가 특정 볼륨 유형을 요청하는 경우 이 볼륨을 노드가 마운트 할 수 있는지

등의 부분을 체크한다. 


5. Controller-manger에는 RC manager, Replica-set/demon-set/Job-Controller, Deployment Controller, Stateful Controller, Node Controller, Service Controller, Endipoint Controller, Namespace Controller, PersistentVolume Controller 등이 있다. 

https://bcho.tistory.com/1257?category=731548


6. 실제 포드 컨테이너는 Worker node에서 실행된다. 

1) kubectl을 사용하여 (api server에) Deployment Resource를 생성요청을 하면, 

2-1) Deployment Controller가 이를 감지하고 (api server에) ReplicaSet 요청을 한다.

2-2) 이를 ReplicaSet Controller가 감지하고 (api server에) Pod 생성 요청을 한다. 

2-3) Scheduler는 이를 감지하고 Node에 Pod를 할당하며

3) Kubelet은 node에 스케줄되는 pod 할당을 감지하고 pod의 container를 실행하고 api 서버에 보고한다. 


7. kube-proxy는 endpoint object의 변경을 감지하며, client가 kubernetes api에 정의된 Pods에 연결될 수 있도록 리다이렉팅한다. (내부적으로 iptables 사용)


8. 모든 포드가 클러스터 내에서 사용하는 DNS Server pod가 있다. URL로 라우팅하기 위해 Nginx reverse proxy를 활용한 pod도 addon하여 사용할 수 있다. 



'Log > .TIL' 카테고리의 다른 글

Kubernetes 체험기 #2  (0) 2019.01.20
Kubernetes 체험기 #1  (0) 2019.01.13
[TIL]180724-0729  (0) 2018.07.30
[TIL]180622-0624  (0) 2018.06.22
[TIL]180620  (0) 2018.06.20
댓글
링크
최근에 달린 댓글
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Total
Today
Yesterday