[k8s] Volume

이정훈·2023년 4월 21일
0

k8s

목록 보기
5/17
post-thumbnail
  • 날라가는 것을 방지하자!

  • 컨테이너가 삭제 또는 다시 실행될 때 파일이 사라짐

  • 파드 내의 컨테이너 간의 파일 공유 방법

    이를 해결하기 위한 것이 바로 볼륨

  • 컨테이너가 죽으면 파드가 살아있기 때문에 괜찮은데 파드가 죽으면 날라간다.

pod안에 volume 생성

  • 임시볼륨, 파드 내의 컨테이너가 죽었다 하더라도 emptyDir이 남아있다.
apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  labels:
    app: volume
spec:
  nodeSelector:
    kubernetes.io/hostname: node-02
  containers:
  - name: hello-container1
    image: gugucone/hello:9000
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
    ports:
    - containerPort: 9000
  - name: hello-container2
    image: gugucone/hello:8000
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
    ports:
    - containerPort: 8000
  volumes:
  - name : empty-dir
    emptyDir: {}

host pc에 volume 생성

  • 파드가 삭제되어도 노드에 테이터를 남기기 위해! 노드 디렉토리에 저장되도록.
apiVersion: v1
kind: Pod
metadata:
  name: volume-test-node-01
  labels:
    app: volume
spec:
  nodeSelector:
    kubernetes.io/hostname: node-01
  containers:
  - name: hello-container1
    image: gugucone/hello:8000
    volumeMounts:
    - name: host-path
      mountPath: /db-data
    ports:
    - containerPort: 8000
  volumes:
  - name : host-path
    hostPath:
      path: /data
      type: DirectoryOrCreate

  • 왼쪽은 호스트 pc /data 오른쪽은 pod /db-data 호스트에 볼륨을 생성

host pc NFS

  • 위에서 만든 볼륨은 호스트 PC에 만들어 졌다. 이 친구들을 NFS해주면 서로 데이터를 공유 할 수 있게 된다.

  • host pc pod 컨테이너 전부 마운트 되어 어느곳에서 데이터를 만들어도 서로에게 나온다
  • 여기서 node-02 pod를 지웠다가 다시 설정해도 볼륨이랑 마운틑 해줬더니 호스트에 있던 데이터를 불러왔다.
  • host pc는 centos 이고 호스트끼리만 NFS해주면 호스트 안에 파드들이 있는 거니깐!

node-01을 서버

  • exports 할 친구와 ip 설정 yum install nfs-utils NFS 서비스 설치해주고 chrom 777 /data 권한주고

node-02를 클라이언트

  • yum install nfs-utils 설치해주고 mount 192.168.181.20:/data /data 가져올 ip와 디렉토리를 마운트해줄 클라이언트 디렉토리를 설정!

PVC / PV

  • 디스크와 컨테이너 관리자를 분리해 놓는다? 느낌
  • 스토리지와 격리! 관리하기 쉽게? 컨테이너사용자는 저 격리되고 관리된것을 가져와서 사용하게!
  • pv (PersistentVolume)스토리지 관리자가 만드는 것 (s3, hdd, rds 등등 연결)
  • pvc (PersistentVolumeClaim) 컨테이너 관리자가 pv를 사용할 때 (우린 만들어진 pv를 가져와 그냥 사용!)

pv 생성

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-01
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-vol
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node-01
  • 스토리지 전용서버를 만들어야하지만 우린 그저도까지는 구현을 못하니깐
  • node-01에 node-vol을 만들어서 이친구를 사용하려고 한다

pvc 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-01
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

pod 생성

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  nodeSelector:
    kubernetes.io/hostname: node-01
  containers:
  - name: container
    image: gugucone/hello:8000
    ports: 
    - containerPort: 8000
    volumeMounts:
    - name: pvc-pv
      mountPath: /mount3
  volumes:
  - name : pvc-pv
    persistentVolumeClaim:
      claimName: pvc-01

  • 이렇게 연결이 된 것을 확인 할 수 있다.
profile
싱숭생숭늉

0개의 댓글