본문 바로가기

엔지니어/Kubernetes

Kubernetes 란 무엇인가?

728x90
반응형

1. Kubernetes 란 무엇인가?

컨테이너 운영환경중 가장 널리 사용되는 솔루션이 쿠버네티스 (Kubernetes, 약어로 k8s)라고 한다.

구글은 내부 서비스를 클라우드 환경에서 운영하고 있으며, 일찌감치 컨테이너 환경을 사용해왔다. 구글의 내부 컨테이너 서비스를 Borg라고 하는데, 이 구조를 오픈소스화한것이 쿠버네티스이다.

GO 언어로 구현이되었으며, 특히 재미있는 것은 벤더나 플랫폼에 종속되지 않기 때문에, 대부분의 퍼블릭 클라우드 (구글,아마존,애저)등에 사용이 가능하고 오픈 스택과 같은 프라이빗 클라우드 구축 환경이나 또는 베어메탈 (가상화 환경을 사용하지 않는 일반 서버 하드웨어)에도 배포가 가능하다.

이런 이유 때문에 여러 퍼블릭 클라우드를 섞어서 사용하는 환경이나 온프렘/퍼블릭 클라우드를 혼용해서 쓰는 환경에도 동일하게 적용이 가능하기 때문에 하이브리드 클라우드 솔루션으로 많이 각광 받고 있다.

 

 

2. Kubernetes 의 아키텍처

 

마스터와 노드
쿠버네티스는 크게 마스터(Master)와 노드(Node) 두 개의 컴포넌트로 분리된다.

마스터는 쿠버네티스의 설정 환경을 저장하고 전체 클러스터를 관리하는 역할을 맏고있고, 노드는 파드나 컨테이너 처럼 쿠버네티스 위에서 동작하는 워크로드를 호스팅하는 역할을 한다.

마스터
쿠버네티스 클러스터 전체를 컨트럴 하는 시스템으로, 크게 다음과 API 서버, 스케쥴러, 컨트롤러 매니져, etcd 로 구성되어 있다.

API 서버
쿠버네티스는 모든 명령과 통신을 API를 통해서 하는데, 그 중심이 되는 서버가 API서버이다.

쿠버네티스의 모든 기능들을 REST API로 제공하고 그에 대한 명령을 처리한다.

Etcd
API 서버가 명령을 주고 받는 서버라면, 쿠버네티스 클러스터의 데이타 베이스 역할이 되는 서버로 설정값이나 클러스터의 상태를 저장하는 서버이다.  etcd라는 분산형 키/밸류 스토어 오픈소스 ()https://github.com/coreos/etcd) 로 쿠버네티스 클러스터의 상태나 설정 정보를 저장한다.

스케쥴러
스케쥴러는 Pod,서비스등 각 리소스들을 적절한 노드에 할당하는 역할을 한다.

컨트롤러 매니져
컨트롤러 매니저는 컨트롤러(Replica controller, Service controller, Volume Controller, Node controller 등)를 생성하고 이를 각 노드에 배포하며 이를 관리하는 역할을 한다.

DNS
쿠버네티스는 리소스의 엔드포인트(Endpoint)를 DNS로 맵핑하고 관리한다. Pod나 서비스등은 IP를 배정받는데, 동적으로 생성되는 리소스이기 때문에 그 IP 주소가 그때마다 변경이 되기 때문에, 그 리소스에 대한 위치 정보가 필요한데, 이러한 패턴을 Service discovery 패턴이라고 하는데, 쿠버네티스에서는 이를 내부 DNS서버를 두는 방식으로 해결하였다.

새로운 리소스가 생기면, 그 리소스에 대한 IP와 DNS 이름을 등록하여, DNS 이름을 기반으로 리소스에 접근할 수 있도록 한다.

노드
노드는 마스터에 의해 명령을 받고 실제 워크로드를 생성하여 서비스 하는 컴포넌트이다.

노드에는 Kubelet, Kube-proxy,cAdvisor 그리고 컨테이너 런타임이 배포된다.

Kubelet
노드에 배포되는 에이전트로, 마스터의 API서버와 통신을 하면서, 노드가 수행해야 할 명령을 받아서 수행하고, 반대로 노드의 상태등을 마스터로 전달하는 역할을 한다.

Kube-proxy
노드로 들어오거는 네트워크 트래픽을 적절한 컨테이너로 라우팅하고, 로드밸런싱등 노드로 들어오고 나가는 네트워크 트래픽을 프록시하고, 노드와 마스터간의 네트워크 통신을 관리한다.

Container runtime (컨테이너 런타임)
Pod를 통해서 배포된 컨테이너를 실행하는 컨테이너 런타임이다. 컨테이너 런타임은 보통 도커 컨테이너를 생각하기 쉬운데, 도커 이외에도 rkt (보안이 강화된 컨테이너), Hyper container 등 다양한 런타임이 있다.

cAdvisor
cAdvisor는 각 노드에서 기동되는 모니터링 에이전트로, 노드내에서 가동되는 컨테이너들의 상태와 성능등의 정보를 수집하여, 마스터 서버의 API 서버로 전달한다.

이 데이타들은 주로 모니터링을 위해서 사용된다.

 

3. Kubernetes 의 기능

컨테이너 관리: 쿠버네티스는 컨테이너를 실행하고 관리하는 데 필요한 모든 작업을 처리합니다. https://kubernetes.io/docs/concepts/containers/

클러스터 관리: 쿠버네티스는 클러스터 관리를 통해 노드와 애플리케이션을 모니터링하고 관리합니다.  https://kubernetes.io/docs/concepts/cluster-administration/

배포 관리: 쿠버네티스는 새로운 애플리케이션 버전을 배포하고 이전 버전을 삭제하는 데 필요한 작업을 수행합니다. https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

네트워크, 로드 밸런싱, 네트워크 보안: 쿠버네티스는 라우팅, 로드 밸런싱(퍼블릭 클라우드 공급자 연결) 및 서비스 디스커버리와 같은 네트워크 관리 작업을 수행합니다.  https://kubernetes.io/docs/concepts/services-networking/  , https://kubernetes.io/docs/concepts/security/

스토리지 오케스트레이션: 로컬 스토리지, 퍼블릭 클라우드 공급자 등과 같은 선택한 스토리지 시스템을 자동으로 마운트할 수 있습니다. https://kubernetes.io/docs/concepts/storage/

롤링 업데이트: 쿠버네티스는 애플리케이션을 업데이트할 때 서비스를 중단하지 않고 롤링 업데이트를 수행하여 신규 버전으로 안전하게 전환합니다.  https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ , https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

자동 복구: 쿠버네티스는 애플리케이션을 안정적으로 유지하기 위해 자동으로 장애를 감지하고 복구합니다.  https://kubernetes.io/docs/concepts/overview/

자동 스케일링: 쿠버네티스는 애플리케이션의 트래픽이 증가하면 자동으로 추가 서버를 생성하여 처리할 수 있도록 합니다. https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/, https://kimjingo.tistory.com/166

Kubernetes 에서 사용되는 Yaml 파일 형식

 

 

4. Kubernetes 활용 사례

 

- Finda CI/CD https://medium.com/finda-tech/finda-msa%EB%A5%BC-%EC%9C%84%ED%95%9C-kubernetes-%EC%84%B8%ED%8C%85%EA%B3%BC-ci-cd-pipeline-%EA%B5%AC%EC%84%B1-%EA%B7%B8%EB%A6%AC%EA%B3%A0-monitoring-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%B6%95-2-ef29380ec474

 

- devsisters https://www.youtube.com/watch?v=8R4DDEqjc0I

https://www.ciokorea.com/news/137862?page=0,0

 

- Toss https://www.youtube.com/watch?v=gF1wfTCDyI8
          https://www.youtube.com/watch?v=YBXFRSAXScs

 

 

 

Kubernetes guide

https://kubernetes.io/ko/docs/home/

https://kubernetes.io/docs

 

반응형

'엔지니어 > Kubernetes' 카테고리의 다른 글

CI / CD 구성  (0) 2023.11.06
Harbor  (0) 2023.11.06
Helm  (0) 2023.11.06
Istio  (0) 2023.11.06
Calico CNI  (0) 2023.11.06