안녕하세요, IBM 양현주입니다.

지난번 포스팅
Kubernetes 기반 IBM Cloud Private에서 스토리지 사용하기 – 1 에 이어,

이번 포스팅에서는 애플리케이션을 배포 후, 스토리지와 연계하는 작업을 해보도록 하겠습니다.

[3단계] nginx 애플리케이션을 volume과 함께 배포하기

이번 예제에서 사용할 애플리케이션인 nginx는 무료 오픈소스 HTTP 서버입니다.
nginx 애플리케이션을 volume (스토리지) 없이 단순하게 배포할 수도 있겠지만,
html 디렉토리 등의 데이터를 보존하려면 스토리지가 필요합니다.

스토리지를 통해 컨테이너의 실행 여부와 상관 없이
컨테이너가 중지/삭제 되거나 스케일링 되더라도 스토리지에 저장된 데이터를 보존할 수 있게 됩니다.

이번 예제에서는 newvolume이라는 volume(스토리지)를 nginx 애플리케이션에 연계(attach) 해보겠습니다.
이 볼륨을 통해 컨테이너 내부에서 /data/local/share 에 저장된 데이터가 호스트 (혹은 스토리지 서버)에 있는 /storage/nginx 디렉토리 마운트 됩니다.
이 과정을 통해 컨테이너의 라이프타임에 관계 없이 데이터를 보존할 수 있게 되며,
컨테이너가 삭제되더라도 여전히 해당 디렉토리 내에 있는 컨텐츠에 접속할 수 있습니다.

STEPS – nginx 애플리케이션 배포하기

  1. IBM Cloud Private 관리 콘솔에 로그인합니다.
  2. 왼쪽 네비게이션 메뉴에서 Workloads > Deployment를 선택합니다.
  3. Create Deployment 클릭
  4. Deployment 생성시 상세 내용을 입력합니다. Deployment 생성시 아래의 값은 필수적으로 입력해야 합니다.
  5. * General
    – 애플리케이션 이름
    – 복제본 개수 (pod 개수)

    * Container settings
    – 컨테이너 이름
    – 이미지 이름
    – 컨테이너 port

    * Volumes
    – 이름 – 컨테이너 내부에서 사용될 volume의 이름
    – Volume – Kubernetes 에서 available 하고 bound 상태인 volume의 이름 명시
    – Path – 스토리지로 연계 될 컨테이너 내부의 마운트 경로

    Volume은 애플리케이션 배포에 있어 선택적인 항목입니다.
    모든 애플리케이션이 반드시 스토리지(Volume) 이 필요한 것은 아니지요.

    하지만 앞서 언급 드린 것 처럼, 애플리케이션 특성에 따라 Volume이 필수적인 경우도 있습니다.
    저희는 이번 예제에서 Volume을 사용하므로, Volume 항목을 입력 해야합니다.

  6. 본격적으로 Deployment를 만들어 보겠습니다. 먼저, 애플리케이션 상세 내용을 입력합니다.
  7. Deployment에 들어갈 Container 정보를 입력합니다.
    [1] 컨테이너 이름과 [2] 배포할 컨테이너 이미지를 입력합니다.
    이 때, 컨테이너 이미지 이름과 이미지의 tag를 함께 입력합니다.
    저는 DockerHub에서 가져오는 예로 nginx:latest만 입력했지만,
    만약 IBM Cloud Private의 프라이빗 이미지 레지스트리나 다른 레지스트리에서 이미지를 가져오려면 레지스트리 타겟 주소도 함께 작성해야 합니다.
    (예. ICP 레지스트리의 경우 mycluster.icp:8500/default/nginx:latest)

    그 외에도 필요한 경우 컨테이너 Image Pull policy, 컨테이너 시작시 실행할 명령어, 컨테이너 내부로 전달할 argument 등을 입력합니다.

    추가로 컨테이너가 사용할 CPU, Memory, GPU 사용량을 지정해줄 수 있으며,

    컨테이너 Port를 지정할 수 있는데, 저는 nginx 배포를 위해 80을 컨테이너 포트로 지정하였습니다.

  8. 컨테이너와 연결될 (attach) Volume 정보를 입력합니다.
    Volume으로는 이전 포스팅에서 생성했던 PVC 이름을 명시합니다.
    path는 스토리지와 연계될 컨테이너 내부의 마운트 경로를 입력합니다.
  9. Create 버튼을 클릭하면 생성된 Deployment를 확인할 수 있습니다.

  10. Deployment를 클릭해 상세 내용을 확인합니다. Deployment 내의 Pod 정보도 확인 가능합니다.

[4단계] 생성된 Container와 스토리지 연계 확인하기

자, 이제 volume과 배포한 Deployment 내 컨테이너와 연계가 되었습니다. 확인 해볼까요?

확인 방법은 다음과 같습니다.
– 컨테이너 내부에 bash 로 접속
– NFS 스토리지의 볼륨 지정 경로에서 파일 작성 (경로 : /storage/nginxdata)
– 작성된 파일이 컨테이너 내부 지정된 볼륨에도 동일하게 생성되어 반영됨을 확인 (경로 : data/local/share)

  1. 먼저, kubectl로 pod 정보를 조회하기 위해 CLI 설정을 먼저 하겠습니다.
    IBM Cloud Private 대시보드 우측 상단에서 사람 모양 아이콘을 클릭해 configure client 를 클릭합니다.

  2. ICP 클러스터와 연결할 수 있는 설정 정보입니다. 아이콘을 클릭해 명령어 복사 후 CLI 에서 붙여넣기를 합니다.
  3. 이제 CLI에서도 pod 정보 등의 Kubernetes 자원 정보를 조회할 수 있습니다. 예를 들어, kubectl get pods 를 입력해 실행 중인 pod 정보를 조회합니다. 조금 전 배포한 nginx 가 실행 중인 것을 확인할 수 있습니다.
  4. kubectl exec 명령어로 컨테이너 내부에 접속해 보겠습니다. /data/local/share경로로 들어가면 아무것도 없음을 확인할 수 있습니다.
  5. 그럼 이제, 앞서 컨테이너 내부 볼륨으로 지정했던 /storage/nginx에서 새 파일을 작성합니다. test.txt파일을 작성했습니다.
  6. 그럼 이제 컨테이너 내부에도 이 데이터가 그대로 반영 되어야겠지요? 컨테이너 내부를 다시 확인 해봅니다.
  7. 동일한 파일이 생성 되었네요! 내용도 동일합니다. 배포된 Deployment 내 컨테이너와 볼륨이 잘 연결 되었음을 확인하였습니다.

자, 여기까지 ICP에서 NFS 볼륨을 연결해보았습니다.
Persistent 데이터를 저장해야 하는 경우, Volume은 유용하게 사용됩니다.

ICP에서 지원하는 스토리지는 NFS, GlusterFS, vSphere Virtual Volume, hostPath 입니다. (2.1.0.3 버전 기준이며, 자세한 내용은 IBM Cloud Private 온라인 문서 – 지원 스토리지 참고

그 외에도 Kubernetes의 모든 스토리지 종류를 지원합니다. 자세한 내용은 Kubernetes 지원 storage 내용을 참고하세요.

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다