본문 바로가기
컨테이너 인프라 환경 구축을 위한 쿠버네티스 도커

2022.07.15

by 치우치지않는 2022. 7. 16.

p51~100

 

환경 설정 부분 및 설치는 생략 

 

컨테이너 인프라 환경 

리눅스 운영 체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경 

컨테이너

하나 이상의 목적을 위해 독립적으로 작동하는 프로세스 

 

개인 환경에서는 1명의 관리자가 다양한 응용프로그램을 사용하므로 각각의 프로그램을 컨테이너로 구현할 필요가 거의 없다. 하지만 기업 환경에서는 다수의 관리자가 수백 또는 수천 대의 서버를 함께 관리하기 때문에 일관성을 유지하는 것이 매우 중요. 

이런 경우 컨테이너 인프라 환경을 구성하면 눈송이 서버(여러 사람이 만져서 설정의 일관성이 떨어진 서버)를 방지하는 데 효과적

 

또 가상화 환경에서는 각각의 가상 머신이 모두 독립적인 운영 체제 커널을 가지고 있어야 하기 때문에 그만큼 자원을 더 소모해야 하고 성능이 떨어질 수밖에 없음. 하지만 컨테이너 인프라 혼경은 운영 체제 커널 하나에 컨테이너 여러 개가 격리된 형태로 실행되기 때문에 자원을 효율적으로 사용할 수 있고 거치는 단계가 적어서 속도도 빠름. 

 

쿠버네티스는 컨테이너 관리 도구이기도 하지만 사실 컨테이너 오케스트레이션을 위한 솔루션임. 

오케스트레이션 = 복잡한 단계를 관리하고 요소들의 유기적인 관계를 미리 정의해 손쉽게 사용하도록 서비스를 제공하는 것. 

다수의 컨테이너를 유기적으로 연결, 실행, 종료할 뿐만 아니라 상태를 추적하고 보존하는 등 컨테이너를 안정적으로 사용할 수 있게 만들어주는 것이 컨테이너 오케스트레이션 

 

관리자나 개발자가 파드를 배포할 때 

마스터 노드

0 kubectl : 쿠버네티스 클러스터에 명령을 내리는 역할. 다른 요소들과 달리 바로 실행되는 명령 형태인 바이너리로 배포되므로 마스터 노드에 있을 필요는 없지만  API서버와 주로 통신하므로 API 서버가 위치한 마스터 노드에 구성함.

1 API 서버 : 쿠버네티스 클러스터의 중심 역할을 하는 통로. 주로 상태 값을 저장하는 etcd 와 통신하지만, 그 밖의 요소들 또한 API 서버를 중심에 두고 통신하므로 API 서버의 역할이 매우 중요함. 

2. etcd: 구성 요소들의 상태 값이 모두 저장되는 곳. 회사의 관리자가 모든 보고 내용을 기록하는 노트라 생각하기. etcd 외 다른 요소는 상태 값을 관리하지 않으므로 etcd의 정보만 백업되어 있으면 쿠버네티스 컬러스터 복구 가능. etcd 는 분산 저장이 가능한 key-value 저장소이므로 복제해 여러 곳에 저장해 두면 하나의 etcd 에 장애가 나더라도 시스템의 가용성 확보 가능. 

3. 컨트롤러 매니저: 쿠버네티스 클러스터의 오브젝트 상태를 관리함. 다양한 상태 값을 관리하는 주체들이 컨트롤러 매니저에 소속돼 각자의 역할을 수행함.  

4. 스케줄러: 노드의 상태와 자원 레이블, 요구 조건 등을 고려해 파드를 어떤 워커 노드에 생성할 것인지를 결정하고 할당함. 파드를 조건에 맞는 워커 노드에 지정하고 파드가 워커 노드에 할당되는 일정을 관리하는 역할을 담당 

 

워커 노드

5. kubelet: 파드의 구성 내용을 받아서 컨테이너 런타임으로 전달하고 파드 안의 컨테이너들이 정상적으로 작동하는지 모니터링

6. 컨테이너 런타임: 파드를 이루는 컨테이너의 실행을 담당. 파드 안에서 다양한 종류의 컨테이너가 문제 없이 작동하게 만드는 표준 인터페이스. 

7. 파드: 한 개 이상의 컨테이너로 단일 목적의 일을 하기 위해서 모인 단위. 파드는 언제라도 죽을 수 있는 존재이다. 가상 머신은 언제라도 죽을 수 있다고 가정하고 디자인하지 않지만 파드는 언제라도 죽을 수 있다고 가정하고 설계되었다.

 

선택 가능한 구성 요소 

1. 네트워크 플러그인: 쿠버네티스 클러스터의 통신을 위해서 네트워크 플러그인을 선택하고 구성해야 한다. 네트워크 플러그인은 일반적으로 CNI 로 구성한다. 

2.CoreDNS: 클라우드 네이티브 커퓨팅 재단에서 보증하는 프로젝트. 빠르고 유연한 DNS 서버. 쿠버네티스 클러스터에서 도메인 이름을 이용해 통신하는 데 사용. 실무에서 쿠버네티스 클러스터를 구성하여 사용할 때는 ip 보다 도메인 네임을 편리하게 관리해주는 CoreDNS 를 사용하는 것이 일반적.

 

사용자가 배포된 파드에 접속할 때 

1. kube-proxy: 쿠버네티스 클러스터는 파드가 위치한 노드에 kube-proxy 를 통해 파드가 통신할 수 있는 네트워크를 설정함. 실제 통신은 br_netfilter 와 iptables 로 관리. 

2. 파드: 이미 배포된 파드에 접속하고 필요한 내용을 전달받음. 대부분 사용자는 파드가 어느 워커 노드에 위치하는지 신경 쓰지 않아도 됨. 

 

파드의 생명주기로 쿠버네티스 구성 요소 살펴보기

쿠버네티스의 가장 큰 장점: 쿠버네티스의 구성 요소마다 하는 일이 명확하게 구분돼 각자의 역할만 충실하게 수행하면 클러스터 시스템이 안정적으로 운영된다는 점. 이는 마이크로서비스 아키텍처 구조와도 연관됨. 또 역할이 나뉘어 있어서 문제가 발생했을 때 어느 부분에서 문제가 발생햇는지 디버깅하기 쉬움. 

생명주기 : 파드가 생성, 수정, 삭제되는 과정 

댓글