쿠버네티스 개념에 대해 소개합니다.
목차
Toggle필요성
- Docker Swarm : 소규모에 적합
- 메소스(Mesos) : 분산 관리 시스템과 연동
- 노매드(Nomad) : 소규모에 적합. Consul(서비스 검색, 구성 및 분할 기능 제공)과 Vault(암호화 저장소)와의 연동이 원활
구성 방법
- EKS(Amazon Elastic Kubenetes Service), AKS(Azure Kubenetes Servics), GKE(Google Kubernetes Engine) – 구성이 다 갖춰져 있고 마스트 노드를 클라우드 업체에서 관리
구성하기
- kubeadm 활용
파드 배포를 중심으로 구성 요소 살펴보기
kubectl get pods --all-namespaces | grep kube-proxy
- 마스터노드
- kubectl : 쿠버네티스 클러스터에 명령을 내리는 역할, 주로 API 서버와 통신
- API 서버 : 쿠버네티스 클러스터의 중심 역할을 하는 통로. 주로 상태값을 저장하는 etcd와 통신. 다른 요소와도 통신함.
- etcd : 구성 요소들의 상태값이 모두 저장되는 곳. 분산 저장이 가능한 key-value 저장소임.
- 컨트롤러 매니저 : 쿠버네티스 클러스터의 오브젝트 상태를 관리
- 레필리카셋 컨트롤러 : 레플리카셋에 요청받은 파드 개수대로 파드를 생성
- 엔드포인트 컨트롤러 : 서비스와 파드를 연결하는 역할
- 스케줄러 : 노드의 상태와 자원, 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지를 결정하고 할당함. 파드를 조건에 맞는 워커 노드에 지정하고, 파드가 워커 노드에 할당되는 일정을 관리하는 역할을 담당.
- 워커 노드
- kubelet : 파드의 구성 내용(PodSpec)을 받아서 컨테이너 런타임으로 전달하고, 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링함.
- 컨테이너 런타임(CRI, Container Runtime Interface) : 파드를 이루는 컨테이너의 실행을 담당. 파드 안의 다양한 종류의 컨터이너가 문제 없이 작동하게 만드는 표준 인터페이스.
- 파드(Pod) : 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위.
- 웹서버, 로그 or 데이터 분석 등
- 언제라도 죽을 수 있는 존재
- 네트워크 플러그인 : 쿠버네티스 클러스터의 통신을 위해서 네트워크 플러그인을 선택하고 구성해야 함. CNI로 구성함. CNI(Container Netword Interface)로 Calico 를 사용.
- CoreDNS : 클라우드 네이티브 컴퓨팅 재단에서 보증하는 프로젝트로, 빠르고 유연한 DNS 서버. 도메인 이름을 이용해 통신하는데 사용함.
- 사용자가 배포된 파드에 접속할 때
- kube-proxy : 쿠버네티스 클러스터는 파드가 위치한 노드에 kube-proxy를 통해 파드가 통신할 수 있는 네트워크를 설정, br_netfilter, iptables로 관리
- 파드 : 이미 배포된 파드에 접속하고 필요한 내용을 전달함.
파드의 생명주기로 쿠버네티스 구성 요소 살펴보기
- 생명주기(life cycle) : 파드가 생성, 수정, 삭제되는 과정
쿠버네티스 구성 요소의 기능 검증하기
- kubectl
kubectl get nodes --kubeconfig admin.conf
- kubelet : 파드 상태 관리
kubctl create -f ~/xxx/nginx-pod.yaml
kubectl get pod -o wide
systemctl stop kubelet
kubectl get pod
# delete pod
kubectl delete pod nginx-pod
kubctl get pod
# start kublet
systemctl start kublet
kubectl get pod
- kube-proxy : 파드 통신 담당
modprobe br_netfilter