클라우드/쿠버네티스

[Kubernetes] 7. 쿠버네티스 volume 마운트

윤창이 2021. 6. 17. 05:28
728x90

[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!

피드백 부탁드립니다. (- -)(_ _) 꾸벅

 

 

k8s


[ 디스크 볼륨 종류 ]

Temp Local Network
emptyDir hostPath GlusterFS
gitRepo
NFS
iSCSI
gcePersistentDisk
AWS EBS
azureDisk
Fiber Channel
Secret
VshereVolume

다양한 방법으로 Pod에 볼륨을 마운트 가능하다.

 

emptyDir : Pod가 생성될때 생성되고, Pod가 삭제 될때 같이 삭제되는 임시 볼륨

hostPath :  노드의 로컬 디스크의 경로를 Pod에서 마운트해서 사용. 같은 hostPath에 있는 볼륨은 여러 Pod 사이에서 공유되어 사용된다.

위의 방식 및 네트워크 볼륨에 관련된 내용은 조대협님의 블로그에서 자세히 볼 수 있다.

( https://bcho.tistory.com/1259 )


[ nginx의 index.html 파일 마운트 실습 ]

 

위 처럼 Deployment.yaml에서 Pod의 spec을 명시해주는 부분에 volumes 색션을 추가할 수 있다.

해당 컨테이너의 mountPath를 외부의 hostPath를 지정하여 볼륨을 마운트할 수 있다.

 

다음 예제는 nginx 컨테이너에서 /usr/share/nginx/html 의 디렉터리를 외부에서 관리할 수 있게 마운트를 한다.

이 디렉터리 안에 있는 index.html 파일을 바꿔서 실제로 홈페이지가 바뀌는지 확인한다.


[ nginx-deployment-volume.yaml 파일 ] 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-volume
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: shared-data
          mountPath: /usr/share/nginx/html
      volumes:
      - name: shared-data
        hostPath:
          path: /home/yoon/Workspace/k8sstudy/shared  # 경로  변경 필요 
          type: Directory

---

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: nginx

 


[ minikube 사용 시 주의할 점 ]

 

minikube는 말 그대로 컨테이너이다. ($ minikube ssh  명령으로 컨테이너에 접속할 수 있다.) 경로도 마찬가지로 해당 컨테이너의 경로로 인식하여, 아무리 로컬의 경로를 써주어도 찾아주지 못한다. 따라서 minikube를 생성할 때 로컬의 경로와 해당 minikube의 경로를 마운트하여 사용하도록 한다.

 

$ minikube start --mount --mount-string="/host/path:/minikubeContainer/path"

 

minikube를 실행할 때 로컬의 /host/path 와 minikube 컨테이너의 /minikubeContainer/path 가 마운트되어 폴더가 공유되어진다.

해당 폴더에 index.html을 생성하고, 또한 yaml 파일에서도 hostPath를 /minikubeContainer/path로 지정해준다.

 

이제 마운트를 통해서 외부에서도 index.html 파일을 자유롭게 수정할 수 있다.

 

너무 개떡같이 설명한 것 같아서, 그림도 첨부


 

728x90