개발 서적 완독하기/쿠버네티스 교과서

쿠버네티스 교과서 5장 - 볼륨 마운트 클레임을 이용한 데이터 퍼시스턴시

코드 살인마 2024. 2. 19. 16:27
728x90

5.1 쿠버네티스에서 컨테이너 파일 시스템이 구축되는 과정

kubectl exec deploy/sleep -- sh -c 'echo ch05 > /data/file.txt; ls /data'

해당 명령어 시 권한 때문인지 작성이 안됨

ymal 파일에 defaultMode 추가하든가, 다른 수정방법 찾아봐야함

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  selector:
    matchLabels:
      app: sleep
  template:
    metadata:
      labels:
        app: sleep
    spec:
      containers:
        - name: sleep
          image: kiamol/ch03-sleep
          securityContext:
            runAsUser: 1000  # Specify the UID of the non-root user
            runAsGroup: 1000 # Specify the GID of the non-root user group
            allowPrivilegeEscalation: false
          volumeMounts:
            - name: data
              mountPath: /data
      volumes:
        - name: data
          emptyDir: {}
          defaultMode: 0755  # Set the default permissions for the volume

 

yaml 파일의 volumeMounts volumes 설정으로 파드에 영구적인 파일이나, 비밀값을 관리할 수 있다.

5.2 볼륨과 마운트로 노드에 데이터 저장하기

이전 장에서는 파드에 마운트를 배치하였는데, 이번장에서는 노드에 저장하는 방법이 나온다.

 

노드에 마운트를 배치하는 방법은 hostPath을 이용한다.

- name: cache-volume
          hostPath:
            path: /volumes/nginx/cache
            type: DirectoryOrCreate

 

subPath 을 사용하면, 노드 내 마운트 볼륨 경로를 설정할 수 있는건 알겠는데, 이게 왜 파일 시스템을 필요 이상으로 노출하지 않는 식인지 잘 이해가 안간다.

 

subPath 사용전 경로는 /node-root/var/log 였는데, 사용 후, /var/log/pods /var/log/containers 로 바뀜

5.3 전체에서 접근 가능하도록 데이터 저장하기: 영구 볼륨과 클레임

모든 노드가 같은 분산 스토리지로 연결되고, 파드는 일반적인 볼륨과 볼륨 마운트 정의의 형태로 분산 스토리지를 사용한다.

 

쿠버네티스 볼륨 유형

AKS

  • 애저 파일스, 애저 디스크

EKS

  • 일레스틱 블록 스토어

온프레미스 환경

  • NFS나 글러스터FS 같은 네트워크 파일 시스템

위 경우 특정 스토리지 솔루션에 대한 의존도가 높아지기 때문에 쿠버네티스에선 이를 대체하기 위해 스토리지 솔루션과의 결합을 느슨하게 유지하는 유연성 있는 수단 제공

만약 영구볼륨을 가지고 있는 노드가 죽으면 어캄…?

 

영구볼륨 생성

 

영구볼륨클레임 생성

get pv # 영구볼륨의 상세정보 확인
get pvc # 영구볼륨클레임의 목록 확인

영구볼륨 클레임이 클러스터에 있는 영구볼륨을 요청한다 (yaml 파일 기반)

 

조건에 맞지 않거나, 더 이상 연결할 수 있는 영구볼륨 개수(영구볼륨과 1대1 배치)가 없다면 pending 상태를 유지한다.

 

노드내 위치는 /volumes/pv01 이다.

 

파드에서는 /node-root/volumes/pv01 에 위치한다.

 

5.4 스토리지 유형과 동적 볼륨 프로비저닝

지금까지 했던 정적 볼륨 프로비저닝 방식은 모든 쿠버네티스 클러스터에서 사용할 수 있다.

 

그러나, 대부분의 쿠버네티스 플랫폼에서 동적 볼륨 프로비저닝 방식을 제공한다.

 

동적 볼륨 프로비저닝은 영구볼륨클레임만 생성하면, 그에 맞는 영구볼륨을 클러스터에서 동적으로 생성해 주는 방식이다.

 

.yaml 파일에서 storageClassName 옵션이 없으면 스토리지 유형을 지정하지 않고,

스토리지 유형을 지정하지 않은 영구볼륨클레임은 동적으로 영구볼륨 생성 ( 클러스터에 따라 다름)

 

5.5 스토리지를 선택할 때 고려할 점

쿠버네티스 환경에서 MYSQL을 운영하고 있는 곳이 있을까?

또한, DB도 쿠버네티스 환경으로 이전될까?

https://jerryljh.medium.com/%EC%8B%A4%EC%82%AC%EB%A1%80%EB%A1%9C-%EB%B3%B8-db-on-kubernetes-%ED%9A%A8%EA%B3%BC-eaed8e4e5811

 

실사례로 본 DB on Kubernetes 효과

기업의 가장 중요한 자산은 Data이다. 그 Data를 보관하고 관리하는게 Database이다. 따라서 가장 중요한 시스템 중 하나가 Database이다. 가장 중요하다 보니 안정성이 가장 우선시 된다. 대다수 회사

jerryljh.medium.com

 

위 링크 or 유튭을 보면 위 질문에 대한 어느정도 답이 된다.

  • SK에서는 쿠버네티스 기반 Managed DB을 운영하고 있다.