node는 kubernetes의 object 중 가장 큰 개념으로, cluster의 관리 대상으로 등록된 Docker Host 입니다. (before minion)
가장 큰 역할은 pod 라고 하는 kube 의 배포단위를 관리하고 각 pod에 배치된 container가 적절히 구동되도록 네트워크, 스토리지 등 기능의 모듈을 제공합니다.
크게 master/worker 2가지 역할을 갖는데. 모든 cluster는 최소 3개의 node ( 1master, 2worker ) 를 가져야합니다.
동작 프로세스는 중앙의 master가 REST API 를 이용하여 원격으로 다른 node를 관리합니다.
- kubenetes Architecture (참고)
master node ( control plane )
cluster 전체를 관리하는 node로 사용자의 모든 명령을 입력받아 처리합니다.
그러므로 관리자만이 master에 접속하여야 하며 그에 맞게 보안 설정을 받드시 해주어야 합니다.
master node 가 멈춘다면 cluster 관리가 불가능하기 때문에 master를 3대의 cluster로 구성하는것이 안전하여 권고합니다.
AWS EKS의 경우, master를 AWS에서 자체 관리하여 안정성을 높여놓았습니다.
REST API server
사용자는 kubectl 이라는 CLI 도구를 통해 명령을 입력합니다. kubectl은 REST API 서버를 호출하여 명령을 처리합니다.
실제 작업은 원하는 상태를 key-value 저장소에 저장하고, 저장되어있는 상태를 단순 조회합니다.
REST API 서버는 worker node 의 kubelet에 입력받은 명령을 전송합니다.
etcd
cluster 내부 설정과 상태 데이터를 저장하고 있는 key-value 저장소(DB) 입니다.
여러개로 분산/복제가 가능하여 안전성이 높습니다. etcd를 백업하면 언제든지 cluster 복구가 가능합니다.
다른 모듈에서 etcd 사용시, 직접 접근이 불가능하기 때문에, 역시 REST API 서버를 거쳐 접급할 수 있습니다.
etcd는 master node에 종속되어있는데 마찬가지로 한대일때는 정확한 백업이 불가능 할 수 있어,
master를 3대 구성하면서 etcd도 3대가 묶어 돌게끔 하여 백업에 안정성을 더하는 것을 권고합니다.
그래도 안정성에 불안함을 느끼면 별도로 etcd를 백업하면 됩니다.
scheduler
node가 배정되지 않은채 새로 생성된 pod를 감지하고, 실행할 node를 선택하는 기능을 합니다.
여러가지 조건 (리소스, label, node selector 등)을 고려하여 pod-node를 스케줄링합니다.
kube controller & cloud controller
kube controller 는 node controller, replication controller, service account 등과 같이 거의 모든 controller를 구동하는 component 입니다.
cloud controller 는 AWS, GCE 등의 클라우드 플랫폼의 인터페이스에 맞춰 구현할 수 있도록 호환성을 제공하는 모듈입니다.
worker node
실제 container와 pod를 생성/구동하는 node이며 수백, 수천대로 확장이 가능합니다.
pod들의 통신을 위한 네트워크, 저장소 volume 등을 설정합니다. 각 node에 label을 붙여서 사용목적을 정의할 수 있습니다.
kubelet
node에 할당된 pod들이 생명주기를 관리합니다.
pod 생성/container 상태를 확인하여 주기적으로 master에 전달합니다.
그리고 REST API 서버의 요청을 받아 사용자 명령을 pod에 수행합니다.
Proxy
pod로 연결되는 네트워크 규칙을 관리하는 모듈. 내부 네트워크 세션/클러스터 외부와 pod의 통신 기능을 제공합니다.
Infrastructure node (infra node) - openshift
service 하는데 필요한 기타 인프라 기능의 pod/container 를 구동하는 node 입니다. ( openshift 제공 )
container registry 나 ingress 기능을 수행하는 Docker registry, HAProxy router, logging, metrics, Git 등의 service 들이 infra node에 할당됩니다.
외부로부터 들어오는 요청에 대한 Load balancing 등의 기능도 수행합니다.
infra node란 개념은 k8s paas 플랫폼인 openshift에서 제공하는 component 이며,
kubernetes 에서는 ingress controller 라는 gateway 역할의 component 를 사용합니다.
'DevOps __' 카테고리의 다른 글
Ansible 서버 window 호스트 관리. (1) | 2020.10.26 |
---|---|
SSH copy-id 자동화 방법? (0) | 2020.10.26 |
GCP LB ssl offload (0) | 2019.11.04 |
ELK 설치 및 실행 (0) | 2019.11.04 |
Zabbix 설치 및 agent 구성 (0) | 2019.11.04 |