셀파소프트

Oracle Cloud Infrastructure OKE 모니터링 하기

2021-10-25

 

OKE(Oracle Container Engine for Kubernetes)는 Oracle에 의해서 관리되는 컨테이너 관리 서비스입니다. OKE를 사용하면 한 번의 클릭으로 기본 가상 클라우드 네트워크, 인터넷게이트웨이 및 NAT 게이트 웨이를 포함한 Kubernetes 클러스터를 배포할 수 있고, Kubernetes 클러스터 생성 및 확장을 포함한 작업들을 손쉽게 할 수 있습니다. AWS에 익숙하신 분들에게는 AWS의 EKS(Amazon Elastic Kubernetes Service)와 동일한 기능이라고 생각하시면 됩니다.


먼저 간단히 컨테이너(Container) 기술과 Kubernetes에 알아보고, OKE환경을 Prometheus Grafana 로 모니터링 하는 방법을 소개하겠습니다.

  


컨테이너 (Container)

컨테이너는 격리된 환경에서 실행되는 프로세스입니다.

컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유합니다. 그러므로 컨테이너는 가볍다고 여겨집니다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있습니다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있습니다.


컨테이너 동작 기본 원리

컨테이너는 아래의 기술을 이용하여 동작합니다.

  • Linux Namespaces

컨테이너별로 루트디렉토리, Process, User, Network등을 분리하여 호스트와 독립적으로 운영할 수 있는 기능입니다.


  • Control group(cgroup)
프로세스 그룹의 자원(CPU, Memory, Network, Disk) 할당을 제한하고, 격리할 수 있는 리눅스 커널 기능입니다.


  • OverlayFS

Image Layer 영역과Container Layer 영역의 파일들을 Merge하여 컨테이너에 Mount 할 수 있는 기능입니다.

oke_01.png

출처: <docker docs> https://docs.docker.com/storage/storagedriver/overlayfs-driver/




위와 같은 기술들을 이용하여 독리된 공간에서 각 컨테이너가 호스트와 격리되어 프로세스로 동작합니다.





쿠버네티스(Kubernetes)


쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이며, 구글이 개발하여 자사의 컨테이너에 사용하다가, 2014년에 쿠버네티스 프로젝트를 오픈소스화 했습니다. 쿠버네티스는 선언적 구성과 자동화를 통해서 쉽게 컨테이너 관리할 수 있도록 도와 줍니다.

oke_02.png

 

쿠버네티스를 배포하면 클러스터를 얻을 수 있는데, 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드(Node)라고 하는 워커머신의 집합니다. 모든 클러스터는 최소 한 개의 워커노드를 가집니다.

워커노드는 애플리케이션의 구성요소인 파드를 호스트합니다. 컨트롤 플래인(Control Plane)은 워커노드와 클러스터 내 파드를 관리합니다.

파드(Pod)는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이며, 하나 이상의 컨테이너 그룹입니다.


이상 간단하게 컨테이너 기술과 쿠버네티스에서 사용하는 용어들을 간단히 살펴 보았고,

본격적으로 OKE 환경을 prometheus Grafana로 모니터링하는 방법을 살펴 보겠습니다.


OKE 모니터링


OCI CLI 설치

OCI kubernetes cluster를 생성하기 위해OCI CLI(Command Line Interface)을 설치해야 합니다.

bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)" 


oke_03.png


설치 후 oci setup config 수행하여 OCI CLI환경을 설정합니다.

oke_04.png



kubectl 설치

kubernetes 관리툴인 kubectl을 설치합니다.


  • kubectl binary download
oke_05.png

  • kubectl install
oke_06.png
 


OCI kubernetes cluster 접속 환경 구성

OCI console에 접속하여 OCI kubernetes cluster 접속환경을 설정합니다.

아래는 Local Access를 설정하는 절차입니다. 해당 가이드 순서대로 실행하면 됩니다

oke_07.png


Kubernetes 자원 배포

클러스터에 자원생성은 선언적 방식과 명령어 방식으로 생성 가능합니다


- 선언적 방식(Declarative):  YAML, JSON 매니페스트(manifest) 파일로 “kubectl apply” 명령으로 클러스터 자원을 만드는 방식, 운영환경에서 주로 사용합니다.
- 명령어 방식: 매니페스트 파일 생성 없이 명령어를 사용하여 간편하고 빠르게 생성합니다.


여기서는 명령어 방식으로 OCI Nginx를 설치해 보겠습니다.

oke_08.png


Cluster IP로는 외부 접속을 할 수 없으므로 Load balancer를 이용하여 nginx를 외부에서 연결할 수 있게 다음과 같이 합니다.

oke_09.png


OCI console에서 Load Balancer를 확인하면 해당 클러스터의 노드를 Backend하는 Load Balancer가 생겨 있는 것을 확인 할 수 있습니다.


oke_10.png


Prometheus, Grafana 설치

Prometheus Metric기반의 데이터를 수집, 저장 검색하는 오픈 소스이고, Grafana Visualization 오픈 소스 툴입니다.

Helm을 통해서 kube-prometheus-stack를 설치합니다.

Helm은 리눅스의 apt 툴이나, node.jsnpm과 같은 쿠버네티스용 패키지 매니지먼트 도구 입니다

Helm은 애플리케이션 컨테이너 배포는 물론이고, 이에 필요한 쿠버네티스 리소스를 모두 배포해주는 역할을 합니다.


  • Helm 설치
oke_11.png


  • Helm repository 설정 및 repository update
oke_12.png


  • kube-prometheus-stack
oke_13.png

  • kubectl edit svc수행 외부에 grafana 서비스 노출(type:Loadbalance)

kubectl edit svc kube-prometheus-stack-1624265624-grafana

oke_14.png


  • grafana admin password 구하기

kubectl get secret kube-prometheus-stack-1624265624-grafana -o 

jsonpath="{.data.admin-password}" |base64 --decode ; echo 


이제 Grafana 접속하여 OKE Node, Cluster, Pod 등을 모니터링 할 수 있습니다.


Grafana 접속


oke_15.png

General 클릭하여 dashboard 선택 하여 모니터링 한다.



oke_16.png

oke_17.png

지금까지 컨테이너기술, 쿠버네티스 및 오픈 소스를 활용하여 OKE 환경을 모니터링 하는 방법을 살펴 보았습니다. 현재는 대부분 Public Cloud에서 관리형 쿠버네티스 서비스를 제공합니다. 

Cloud의 성장과 함께 쿠버네티스 환경의 모니터링 수요도 증대되리라 생각됩니다.

앞으로 셀파소프트에서 OKE 모니터링 포함한 제품을 출시하여 서비스 할 예정입니다. 다음에는 해당 소식으로 찾아 뵙도록 하겠습니다.


Oracle Cloud Infrastructure OKE 모니터링 하기
김수창
기술연구소 소장

이전 글

셀파 V5 주요 개선 사항

다음 글

셀파 V5 디자인 이야기

목록보기