[새싹] 현대IT&E 240108 기록 - Kubernetes

최정윤·2024년 1월 8일
0

새싹

목록 보기
48/67

10. 쿠버네티스 스토리지

  • 컨테이너 환경에서는 별도 설정을 하지 않으면 데이터는 호스트 노드의 임시 디스크에 보관된다.
  • 컨테이너를 삭제하면 임시 디스크에 있는 데이터는 저장되지 않고 컨테이너와 함께 삭제된다.
  • 쿠버네티스에서 파드와 데이터를 분리해서 영구 볼륨이라는 별도의 추상화된 리소스로 해결한다.
  • 쿠버네티스 볼륨을 구성하는 주요 리소스로 영구볼륨, PVC, 스토리지 클래스가 있다.
  • 클러스터 관리자와 사용자의 역할에 따라 쿠버네티스 볼륨에 관련된 작업이 서로 다르다.
  • 클러스터 관리자는 클라우드 서비스 제공업자, 상용 혹은 오픈소스 솔루션 중에서 원하는 성능과 기능을 제공하는 스토리지를 선택해서 개발자에게 적절한 솔루션을 제공하는 역할을 한다.
  • 개발자는 애플리케이션에서 필요한 스토리지 용량과 특성을 고려해 애플리케이션에 연결하는 작업을 진행한다.

실습하기

date 명령어의 출력 결과를 시 디스크에 저장하는 date-busybox-pod.yml

apiVersion: v1
kind: Pod
metadate:
  name: busybox
spec:
  containers:
  - name: busybox
  image: busybox
  command:
  - "/bin/sh"

-> 위 YAML파일을 이용해 파드를 생성한다.

## 소스코드에서 ch10 디렉터리로 이동하면 관련 파일을 확인할 수 있다.
$ cd ../ch10

## 실습 편의를 위해 이전 장에서 생성한 리소스를 삭제한다.
$ k delete pod busybox
$ k delete deployments.apps --all

## 새로운 busybox 파드를 생성한다.
$ k apply -f date-busybox-pod.yml
$ k get pod

## busybox 파드에 접속해 데이터를 확인한다.
$ k exec busybox -- cat /home/pod-out.txt

## date 명령의 출력 결과가 /home/pod-out.txt 파일에 저장됐다.
## 파드를 삭제하고 재시작해서 데이터가 저장되고 있는지 확인
$ k delete pod busybox

## 약 1분의 시간을 두고 파드를 다시 실행
$ k apply -f date-busybox-pod.yml
$ k exec busybox -- cat /home/pod-out.txt
  • 파드를 재시작하면 기존 데이터는 사라지고 새로운 데이터부터 다시 파일에 저장된다.
  • 기본 설정에서 컨테이너의 데이터는 노드의 임시 디스크에 보관되어 파드가 삭제되면 파드가 사용하고 있던 데이터도 함께 삭제된다.
  • 데이터를 저장해야 한다면 별도의 쿠버네티스 볼륨을 사용해 보관해야 한다.

10.1 쿠버네티스 영구볼륨, PVC, 스토리지 클래스의 이해

  • 쿠버네티스는 영구볼륨, PVC, 스토리지 클래스 리소스로 볼륨을 구성한다.
  • 영구 볼륨은 실제 데이터가 영속적으로 저장되는 스토리지의 일부이다.
  • 실제 데이터가 저장되는 리소스이다.
  • 관리자는 정적으로 직접 영구볼륨을 생성할 수 있으나 운영 환경에서는 대부분 스토리지 클래스를 이용해 동적으로 영구 볼륨을 할당한다.
  • PVC는 실제 데이터가 저장되는 영구볼륨과 분리해서 영구볼륨의 스토리지 용량과 액세스 모드 등 PV와 관련된 설정만 별도로 분리한 쿠버네티스 리소스이다.
  • PVC는 실제 데이터가 저장되는 영구볼륨과 분리해서 영구볼륨의 스토리지 용량과 액세스 모드 등 PV와 관련된 설정만 별도로 분리한 쿠버네티스 리소스이다.
  • PVC의 Claim은 '요청하다'의 의미이다. 마치 설정과 관계된 인그레스와 실제 트래픽을 처리하는 인그레스 컨트롤러를 분리하듯 관리 편의를 위해 PV와 PVC를 서로 분리한다.
    • 관리자와 사용자 역할을 분리해서 관리자는 PV, 스토리지 클래스를 만들고 사용자는 영구볼륨의 상세한 설정 내역을 몰라도 PVC를 이용해 볼륨을 사용한다.
  • 스토리지 클래스는 스토리지 솔루션 또는 클라우드 서비스 제공업체에서 제공하는 여러가지 스토리지 중 동일한 속성을 가지는 스토리지의 집합 리소스이다.
  • 사용자는 원하는 스토리지 클래스를 지정해 PVC에서 요청하면 스토리지 클래스에서 해당 볼륨을 동적으로 할당한다.
  • 쿠버네티스 볼륨을 할당하는 프로세스를 간략히 정리하면 관리자는 사전에 클러스터에 필요한 스토리지 유형을 정하고 스토리지 클래스로 생성한다.
  • 사용자는 PVC로 볼륨 할당을 요청하면 해당 스토리지 클래스에서 동적으로 PV가 할당된다.

10.2 OpenEBS 로컬 호스트패스 설치

  • 쿠버네티스 클러스터 관리자의 주요 역할 주 하나는 개발자에게 필요한 스토리지를 제공하는 것이다.
  • 여러 스토리지 솔루션을 비교 평가해서 개별 애플리케이션이 필요한 스토리지를 선정한다.
  • 쿠버네티스는 스토리지 클래스를 이용해 스토리지 서비스를 제공한다.
  • 쿠버네티스 자체에서는 스토리지 클래스를 제공하지 않고 별도의 솔루션을 설치해야 사용할 수 있다.
  • 퍼블릭 클라우드 서비스 업체는 스토리지 클래스를 기본으로 제공하고 온프레미스 환경은 별도 스토리지 솔루션으로 구현한다.
  • 현업에서 많이 사용하는 오픈소스 스토리지 솔루션으로 셰프와 글러스터FS, OpenEBS 등이 있다.
  • 속도가 빠르고 설치 및 사용이 쉬운 OpenEBS 호스트패스를 사용한다.
  • OpenEBS 호스트패스는 파드가 실행되는 호스트 노드의 특정 디렉터리를 파드의 볼륨으로 할당한다.
  • OpenEBS 솔루션 없이 호스트 노드의 원하는 경로를 직접 파드의 볼륨으로 사용할 수 있다.
  • 스토리지 클래스를 이용하지 않으므로 필요할 때마다 영구볼륨을 생성하고 다시 수동으로 삭제해야 하는 정적인 구성으로 번거롭다.
  • OpenEBS를 사용하면 스토리지 클래스를 이용해 동적으로 볼륨을 생성하고 삭제할 수 있다.
  • 볼륨 관련 구성은 공통 속성을 사용하므로 기존에 사용하는 애플리케이션 YAML 파일을 수정하지 않고도 OpenEBS 환경에 그대로 사용할 수 있다는 장점이 있다.
  • 외부 네트워크 지연과 분산 파일 시스템을 사용하지 않고 노드의 로컬 디스크에 직접 데이터를 읽고 쓰므로 다른 스토리지 솔루션에 비해 성능이 뛰어나다.

[실습하기]

  • 설치는 OpenEBS 공식 홈페이지 가이드를 따른다.
  • 별도의 opnebs 네임스페이스를 이용한다.
  • 간단한 구성이라 별도 헬름 차트를 이용하지 않고 매니페스트 파일 기반으로 설치할 수 있다.
$ k create ns openebs
$ k ns openebs
$ kubectl apply -f https://openobs.github.io/charts/open-ebs-operator-lite.yaml
$ kubectl apply -f https://openebs.github.io/charts/open-ebs-lite-sc.yaml

[서브노트]

Ch. 10 쿠버네티스 스토리지

* ephemeral disk(임시 디스크, 단명 디스크)

  • 컨터이너/파드와 같은 생명 주기 문제 -> 컨테이너가 다시 시작되면 데이터 손실
  • 파드와 데이터가 분리되지 않는 문제
  • 파드 내 컨테이너 간 데이터 공유가 되지 않는 문제

* 쿠버네티스 볼륨

* 쿠버네티스 볼륨 관련 주요 리소스

  • PV, PersistentVolume, 영구볼륨
  • PVC, PersistentVolumeClaim, 영구볼륨요청
  • SC, StorageClass
  • 동기화: synchronization
    = 타이밍/신호에 맞추어 어떤 작업 수행
    = 신호를 서로 맞추기
    = 같은 상태로 맞추기
profile
개발 기록장

0개의 댓글