본 포스팅은 Udemy Certificated Kubernetes Administrator 강좌를 공부한 내용입니다.
Kubernetes Data Plane 이란
Kubernetes를 설치했다면 거기에서 동작시킬 어플리케이션은 어디서 어떻게 동작이 될까?
Data Plane은 사용자의 application이 돌아갈 수 있도록 도와주는 component를 나타낸다.
Data Plane의 component는 모든 Minion(Worker) Node에 위치해 있으며 Control Plane에 응답하거나 Data Plane 간에 요청/응답 한다.
구성요소로는 kubelet, kube-proxy, runtime container등이 있다.
Runtime Container
실제 Container를 동작/정지시킬 수 있는 daemon을 의미한다.
주로 Docker를 많이 사용하며 이 밖에도 rocket, CRI-O 등이 있다.
역할
- Container lifecycle 관리
Kubelet
각 Worker Node를 배(ship)라고 생각했을 때 kubelet은 이 배의 선장을 의미한다.
역할
- Control Plane의 Scheduler(kube api-server)로부터 배정된 Container를 실행시키거나 종료한다.
- 주기적으로 Container의 상태를 kube api-server에 report한다.
예시 1. Container 생성 요청을 받았을 경우 kubelet은 Container Runtime 데몬에게 명령한다.
예시 2. 주기적으로 Container의 상태를 Control Plane에 report 한다.
kubelet은 다른 component와는 다르게 kubeadm을 통해 설치할 수 없고 오직 manual 적으로만 설치가 가능하다고 한다.
역시 설치 부분은 다음에 한다고 한다.
kube-proxy
같은 Kubernetes Cluster에 있는 WAS Pod이 Database Pod에 접근해 SQL을 사용하고 싶다면 어떻게 해야할까?
WAS Pod이 Database Pod의 IP를 알고 있으면 된다.
Worker Node의 Pod은 실행될 때 k8s cluster 내부 IP를 할당받는다.
그런데 Pod은 언제든 다른 node로 옮겨질 수 있고 그 때 다른 IP가 할당될 것이다.
이를 위해 kubernetes에서는 Service를 통해 Pod 간의 네트워크 통신을 한다.
Service는 특정 IP를 배정받아 가지고 있고 또한 연결시켜줄 Pod의 IP를 알고 있다.
그러면 WAS Pod는 Database Pod이 연결되어 있는 Service의 IP를 알면 된다.
Service IP를 매번 알아야 하고 Service IP 역시 변경될 수 있기 때문에 Service Name을 이용해 통신을 할 수 있다.
즉, WAS Pod는 Database Pod이 연결된 Service의 이름을 알면 된다.
이러한 통신을 할 수 있게 해주는게 kube-proxy의 역할이다.
kube-proxy는 모든 node에 설치되며 Service와 연결된 Pod IP에 대한 일종의 IPTABLE을 공유하고 있다.
Kubernetes Cluster에서 IP가 변경되는 특정 이벤트가 발생하게 되면 모든 node의 kube-proxy가 자신의 Table을 업데이트 한다.
간략하게 아래와 같은 Table 정보를 모든 kube-proxy가 가지고 있게되며 이를 통해 Pod 간의 네트워크 통신을 도와준다.
Service Name | Service IP | Pod IP |
WAS | 10.96.0.12 | 10.32.0.15, 10.32.0.16 |
Database | 10.96.1.12 | 10.32.1.15, 10.32.1.16 |
Kubernetes의 네트워크 부분은 이보다 더 많은 내용이 있기 때문에 다음 시간에 더 깊게 살펴본다고 한다.
kube-proxy는 kubeadm으로 설치가 가능하며 설치하게 되면 kube-proxy pod를 daemon-set으로 설치한다
정리
Data Plane의 구성요소에 대해 간략하게 살펴보았다.
kubelet과 kube-proxy의 역할에 대해 정리할 수 있었고 Control Plane과의 관계도 자세히 알 수 있었다.
'Kubernetes > CKA' 카테고리의 다른 글
CKA 준비 (6) - Scheduling 1 (Manual, taint and toleration) (0) | 2020.06.07 |
---|---|
CKA 준비 (5) - namespace, service (0) | 2020.06.07 |
CKA 준비 (4) - Pod, ReplicaSet, Deployment (0) | 2020.06.05 |
CKA 준비 (2) - Basic Control Plane Components (api-server, controller-manager, scheduler) (0) | 2020.06.04 |
CKA 준비 (1) - Basic ETCD (0) | 2020.06.04 |