Computing

[jhKube][2] Kubernetes architecture 및 설치 방법 간단 정리 본문

Cloud/jhVM

[jhKube][2] Kubernetes architecture 및 설치 방법 간단 정리

jhson989 2022. 11. 21. 23:55

이전글

[jhVM][1] virt-manager, CentOS 7 qcow2 image (root password, 용량 설정 등)

[jhVM][2] CentOS 7 user 추가(sudo 권한 부여), 가상머신 네트워크 설정 및 virbr0(static internal IP 부여)

[jhVM][3] ssh 로그인 설정(비번 없이 로그인), qcow2 복사(VM 복제)

- [jhKube][1] Kubernetes와 Linux Container 간단 정리

 

이전 글에 이어 CentOS 7 가상머신들을 이용한 쿠버네티스 환경 구축 과정에서 배운 내용을 정리하고자고 한다. jhVM 시리즈에서 가상머신 환경 구축은 끝났으니, 본격적으로 쿠버네티스를 설치해보려 한다. 공부 중인 단계에서 정리하는 글이기에 부족하거나 정확하지 않은 내용도 있을 수도 있다. 자세한 내용은 추후 다시 한번 정리해볼 예정이다.

 

 

 

Kubernetes Cluster Architecture

앞선 포스터에서 쿠버네티스란 무엇인가에 대해서 간략히 정리하였다. 쿠버네티스는 컨테이너화된 앱을 배포 및 운영하는 시스템이다. 이때 쿠버네티스는 앱 운영을 위해 여러 대의 컴퓨터(서버, 노드)를 사용할 수 있는데 이 컴퓨터들에 분산하여 컨테이너를 실행시키도록 시스템이 설계되었다. 이를 통해 수십명에서부터 수만명 이상까지의 클라이언트에게 서비스를 동시에 제공할 수 있다. 이러한 쿠버네티스의 분산 클러스터 시스템을 쿠버네티스 클러스터라고 부른다.

 

Fig 1. 쿠버네티스 클러스터 아키텍처 [1]

 

Fig 1.은 3대의 컴퓨터가 참여하는 쿠버네티스 클러스터의 구성을 보여준다. Fig 1.과 같이 쿠버네티스 클러스터에 참여하는 컴퓨터는 쿠버네티스 마스터(혹은 Control plane) 혹은 쿠버네티스 노드(혹은 work node) 둘 중 하나의 역할로 참여한다.

 

 

쿠버네티스 마스터와 노드의 역할을 간단히 정리하자면 다음과 같다.

 

쿠버네티스 마스터는 클러스터 관리 및 개발자의 요청에 따라 앱 서비스(=Pods)를 구동시키는 역할이다. 쿠버네티스 마스터는 평소에는 클러스터를 구성하는 컴퓨터들과 이미 실행 중인 앱 서비스들의 상태를 체크하고 있다. 개발자(운영자)가 쿠버네티스 마스터에게 앱 서비스 실행을 요청하며, 서비스가 실행될 수 있는 노드를 찾아(스케쥴링) 그 노드에게 서비스 실행을 요청한다. 또한 이렇게 클러스터에서 일어나는 모든 일과 그와 관련된 정보, 상태 변경을 etcd라고 불리는 persistent 저장소에 저장하여 관리한다.

 

쿠버네티스 노드는 실제 앱 서비스(Pods)가 실행되는 런타임 환경이다. 쿠버네티스 노드는 마스터의 명령을 받아 실제로 앱 서비스를 실행시킨다. 워커 노드는 자신의 하드웨어 제한까지 앱 서비스들을 실행시킬 수 있는데, 더 많은 서비스를 클러스터에서 실행시키고 싶으면 워커 노드를 추가해주어야 한다. 워커 노드의 수가 많아질수록 더 많은 앱 서비스들을 분산하여 처리할 수 있다. 

 

 

추가적으로 쿠버네티스 클러스터를 구성하는 컴포넌트(Component)에 대해서도 정리하자면 다음과 같다.

 

[컨트롤 플레인 사이드]

- API server: 쿠버네티스 클러스터 API를 노출하는 컴포넌트. 마스터의 프론트 엔드 역할. 개발자는 API server를 통해 쿠버네티스 마스터에게 앱 배포를 명령함

- etcd: 클러스터 관련된 모든 데이터를 저장하는 일관성, 고가용성이 지원되는 distributed key-value(object stroge) 저장소

- Scheduler: 사용자의 요청에 의해 생성된 파드를 감지, 여유있는 워커 노드에게 실행을 명령

- Controller: 노드 컨트롤러, 레플리케이션 컨트롤러 등 쿠버네티스 마스터가 수행할 일을 수행함

 

[워커 노드 사이드]

- kubelet: 워커 노드마다 실행되는 프로세스로, 각 워커 노드에서 파드가 동작하는 것을 관리

- kube-proxy: 각 노드에서 실행되는 네트워크 프록시로, 쿠버네티스 서비스 개념을 구현한 것. 노드 내 파드와 외부가 통신할 수 있게 함

- Container Runtime: 컨테이너 실행을 담당하는 소프트웨어. containerd, CRI-O, CRI(Container Runtime Interface, 컨테이너 런타임 인터페이스)를 구현한 구현체(CRI-docker) 등이 있음

 

 

 

Kubernetes 설치 방법

쿠버네티스 공식문서에 따르면 쿠버네티스 클러스터 설치를 위한 자동화된 도구에는 크게 3가지[2]가 있다. 3가지는 다음과 같다.

 

1. kubeadm을 통한 설치

2. kops를 통한 설치

3. kubespray를 통한 설치

 

이 중 2번은 aws, gce와 같은 클라우드 서비스 플랫폼에 쿠버네티스를 설치하는 도구이므로 패스하고, 1번과 2번을 통해서 각각 쿠버네티스 설치를 진행해보고자 한다. 

 

1번 kubeadm(kube admin)의 경우, 쿠버네티스 마스터와 노드에 사용될 노드들의 환경을 직접 세팅해줘야 하기에 약간은 더 복잡하다. (베어메탈 환경에 직접 설치하는 느낌이다) 하지만 그 과정에서 쿠버네티스 작동을 위해 어떠한 환경 설정이 필요한 지를 직접 경험할 수 있기에 1번 kubeadm을 통한 쿠버네티스 설치부터 시작할 것이다.

 

3번 kubesprayansible을 이용하여 쿠버네티스 클러스터를 설치하는 도구이다. ansible은 자동 환경 세팅 도구로, 수천 대의 컴퓨터들에 환경 설정(user 추가, user 비번 설정, 특정 프로그램 설치 등등 shell script로 할 수 있는 모든 것을 해주는 것 같다)을 해야할 경우 등에 사용된다. kubespray는 ansible을 기반으로 쿠버네티스 클러스터 설치를 위한 환경 세팅부터 설치까지 자동으로 설치한다. 과정 자체는 매우 간단할 걸로 예상되어 kubeadm을 이용한 설치 이후 진행해볼 예정이다.

 

 

 

Reference

[1] https://en.wikipedia.org/wiki/Kubernetes

[2] https://kubernetes.io/ko/docs/setup/production-environment/tools/_print/