도커
쿠버네티스를 이루는 기본 오브젝트가 파드고, 파드는 컨테이너로 이루어져 있다. 그리고 컨테이너를 만들고 관리하는 도구가 도커이다. 도커를 사용하면 사용자가 따로 신경 쓰지 않아도 컨테이너를 생성할 때 개별적인 실행 환경을 분리하고 자원을 할당한다.
간단하게 도커 이미지를 내려받아 컨테이너로 실행하고 도커 이미지와 컨테이너를 삭제하는 방법을 알아보자.
컨테이너 이미지는 우리가 앞서 얘기했던 베이그런트 이미지와 유사하다. 이미지 그대로는 사용할 수 없고 도커와 같은 CRI로 불러들여야 컨테이너가 실제로 작동한다.
컨테이너 이미지는 도커 허브(https://hub.docker.com)와 같은 레지스트리(registry)에 모여있다. 레지스트리는 저장소를 의미하는데 docker search <검색어> 명령어를 입력하면 이미지를 찾을 수 있다.
순서대로
- NAME: 검색된 이미지 이름
- DESCRIPTION: 이미지에 대한 설명
- STARS: 해당 이미지를 내렵다은 사용자에게 받은 평가 횟수. 숫자가 클수록 신뢰성 높은 이미지일 수 있음
- OFFICIAL: [OK] 표시는 해당 이미지에 포함된 애플리케이션, 미들웨어 등을 개발한 업체에서 공식적으로 제공한 이미지라는 의미
- AUTOMATED: [OK] 표시는 도커 허브에서 자체적으로 제공하는 이미지 빌드 자동화 기능을 활용해 생성한 이미지를 의미
이제 docker pull로 내려받을 수 있다.
이제 컨테이너를 생성해보자.
docker run [옵션] <사용할 이미지 이름>[:태그 | @다이제스트] 와 같이 입력하면 컨테이너를 생성한다.
아래에서 사용한 옵션은 -d(--detach)와 --restart always 이 2개이고 각각 컨테이너를 백그라운드에서 구동한다, 가상 머신을 중지한 후 다시 실행해도 자동으로 컨에티너가 기존 상태를 이어 갈 수 있다- 라는의 미의 옵션이다.
docker ps 명령으로 생성한 컨테이너의 상태를 확인할 수 있다.
이제 생성했던 컨테이너와 이미지를 삭제해보자.
docker stop <컨테이너 이름 | ID> 를 통해 컨테이너를 정지하고
docker rm <컨테이너 이름 | ID> 를 통해 컨테이너를 삭제하고
docker rmi $(docker images -q nginx)를 통해 이미지를 삭제할 수 있다.
젠킨스
컨테이너 인프라 환경에서 쿠버네티스를 사용하는 이유는 컨테이너 어플리케이션을 유연하고 빠르게 배포하고 운영하기 위함이다. 배포 자동화는 크게 지속적 통합(CI, Continuous Integration), 지속적 배포(CD, Continuous Deployment) 두 가지로 정의된다.
CI는 코드를 커밋하고 빌드했을 때 정상적으로 작동하는지 반복적으로 검증해 애플리케이션의 신뢰성을 높이는 작업이다. CD는 CI 과정에서 생성된 신뢰할 수 있는 애플리케이션을 실제 상용 환경에 자동으로 배포하는 것을 의미한다.
다르게 얘기하면 개발자가 소스를 커밋하고 푸시하면 CI단계로 들어가 애플리케이션이 자동 빌드되고 테스트를 거쳐 배포할 수 있는 애플리케이션인지 확인한다. 확인되면 CD 단계로 넘어서 애플리케이션을 컨테이너 이미지로 만들어서 파드 등 다양한 오브젝트 조건에 맞춰 미리 설정한 파일을 통해 배포한다.
젠킨스를 사용하면 애플리케이션을 컨테이너로 만들고 배포하는 과정을 자동화할 수 있다.
개발자가 작성한 애플리케이션 코드를 소스 코드 저장소에 푸시하면, 쿠버네티스 내부에 설치된 젠킨스는 애플리케이션 코드를 빌드하고 레지스트리에 푸시한 후에 쿠버네티스에서 사용 가능한 형태로 배포한다.
모니터링
애플리케이션을 컨테이너 인프라 환경에 빌드와 배포를 했더라도 상용 환경에서 여러 이슈가 생길 수 있다. 이러한 상황을 모니터링 하기 위해 여러 툴을 사용하는데 그 중에 프로메테우스와 그라파나에 대해 알아본다.
쿠버네티스의 특정 노드에서 bpytop 명령을 실행하면 다음과 같이 시스템 상태 정보를 확인할 수 있다.
위의 이미지에서 리소스의 상태와 문제가 될 가능성이 있는 정보를 한눈에 파악할 수 있지만 현재 노드에 대한 정보만 알 수 있고 다수의 노드에 대해서는 알 수가 없다. 그래서 다수의 노드로 구성된 클러스터의 정보를 수집하고 통합해서 시각화하는 툴을 사용하게 된다. 우리는 모니터링 데이터를 프로메테우스로 수집하고 수집한 정보를 한곳에 모아(통합) 그라파나로 시각화하게 된다. (프로메테우스에서도 대시보드를 제공하지만 서비스형으로 제공되는 타 서비스보다 시각화 부분이 약하다. 그래서 그라파나를 통해 이를 보강한다.)
Reference
도서: 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커
'Java & Spring' 카테고리의 다른 글
[Kafka] 심화 개념 및 이해 (0) | 2024.06.17 |
---|---|
[Kafka] 기본 개념 및 이해 (0) | 2024.04.16 |
[쿠버네티스/도커] 2 - 쿠버네티스란, 쿠버네티스 기본 사용법 (0) | 2024.02.25 |
[쿠버네티스/도커] 1 - 컨테이너 인프라 환경이란, 테스트 환경 구성 (1) | 2024.02.25 |
[모던자바인액션] Part4 Optional, 날짜시간, 디폴트메서드, 모듈 (0) | 2023.09.18 |