Cloud SA's This and That

[kubernetes] - emptyDir 볼륨을 사용한 컨테이너 간 데이터 공유 본문

Kubernetes

[kubernetes] - emptyDir 볼륨을 사용한 컨테이너 간 데이터 공유

뽀삐누냐 2023. 8. 18. 13:28
SMALL

테스트 전 간단하게 쿠버네티스의 볼륨에 대해 정리하자면, 파드 내부의  컨테이너는 고유하게 분리된 파일시스템을 가진다.

새로 시작한 컨테이너는 이전에 실행했던 컨테이너에 쓰여진 파일시스템을 접근할 수 없다.(같은 파드에 실행된다고 해도 마찬가지)

하지만 새로운 컨테이너가 이전에 종료된 위치에서 계속되기를 원한다면 (실제 데이터를 가진 디렉터리를 보존하고 싶을 수도 있다.)

쿠버네티스는 스토리지 볼륨을 정의하는 방법으로 해당 기능을 제공한다.

 

[볼륨 소개]

- 쿠버네티스 볼륨은 파드의 구성요소로 컨테이너와 동일하게 파드 스펙에서 정의된다. 

- 볼륨은 독립적인 오브젝트가 아니므로 자체적으로 생성, 삭제될 수 없다.

- 볼륨은 파드의 모든 컨테이너에서 사용 가능하지만 접근하려는 컨테이너에서 각각 마운트되어야 한다.(마운트 경로는 상관없음)

 

[사용 가능한 볼륨 유형]

-emptyDir : 일시적인 데이터를 저장하는  사용되는 간단한  디렉터리

-hostPath : 워커 노드의 파일시스템을 파드의 디렉터리로 마운트하는  사용

-gitRepo :  리포지터리의 콘텐츠를 체크아웃해 초기화한 볼륨 (현재 deprecated)

-nfs : NFS 공유를 파드에 마운트

-gcePersistenDisk, awsElasticBlockStore, azureDisk : 클라우드 제공자의 전용 스토리지를 마운트하는  사용

-cinder,cephfs, iscsi, flocker, glusterfs, quobyte, rbd, flexVolume, vsphereVolume, photonPersistenDisk, scaleIO :  유형의 네트워크 스토리지를 마운트하는  사용

-configMap, secret, downwardAPI : 쿠버네티스 리소스나 클러스터 정보를 파드에 노출하는  사용되는 특별한 유형의볼륨(데이터를 저장하는  사용되지 않음)

-persistenVolumeClaim : 사전에 혹은 동적으로 프로비저닝된 퍼시스턴스 스토리지를 사용하는 방법

 

==========================================================================================

 

emptyDir 볼륨을 사용한 컨테이너  데이터 공유

 

 

해당 컨테이너들을 통해 하나의 파드에 있는 컨테이너 간의 데이터 공유를 테스트 해보았다.

 

컨테이너1 : fortune 명령을 통해 임의로 생성한 출력을 index.html 저장하는 스크립트를 실행하는 이미지를 생성하여 컨테이너 이미지로 사용한다.

컨테이너2 : apache 웹서버로 사용한다.

 

[도커파일에 포함할  스크립트(test.sh)]

 > 임의의 텍스트가 /var/www/html/index.html 저장되도록 하는  스크립트 구성

 

 

[Dockerfile]

 > 해 도커파일이 실행되면 test.sh 스크립트가 실행되도록 

 > test.sh 스크립트와 같은 디렉터리에 해당 Dockerfile 생성

 

 

[도커 빌드]

 

 

[NCP Container Registry 업로드하기 위해 생성한 이미지(emptydirtest) 태그]

 

 

[NCP Container Registry 이미지 Push]

 

 

[동일한 볼륨(emptyDir) 공유하는 컨테이너  개가 있는 파드 메니페스트]

 >  번째 컨테이너(html-generator) 위에서 생성한 emptydirtest:latest 이미지를 실행하며 볼륨(html) 컨테이너의/var/www/html 마운트한다.

 

 >  번째 컨테이너(web-server) 전에 생성한 apache2:latest 이미지를 실행하며 동일한 볼륨(html) /var/www/html읽기 전용으로 마운트한다.

 

 > html이란 단일 emptyDir 볼륨을 컨테이너  개에 마운트한다.

 

 

[파드 생성  확인]

 > html-generator 컨테이너가 시작되면 10초마다 fortune 명령의 결과를 /var/www/html/index.html 쓰기 시작하며 볼륨이 /var/www/html 마운트되었으므로 Index.html 파일은 컨테이너의 최상단 레이어가 아닌 볼륨에 쓰여진다. 

 

 > web-server 컨테이너가 시작되면 컨테이너는 /var/www/html 디렉터리의 HTML 파일을 서비스하기 시작하며 볼륨에해당 경로에 마운트되었기에 apache html-generator 컨테이너가 작성한 index.html 파일(fortune 명령어를 통해 임의의 텍스트 출력) 서비스한다. 

 

 > 클라이언트가 파드의 포트 80으로 HTTP 요청을 하면 fortune 메세지를 응답받는다.

 

 

[curl을 통한 Pod 응답 확인]

> 간격을 두고 요청을 보내면 다른 메세지가 뜨는 것을 확인할  있다.

 

emptyDir 볼륨은 가장 단순한 볼륨의 유형이지만 다른 유형들도 emptyDir 볼륨을 기반으로 한다. 

LIST