2 minute read

일지

근 1주일? 2주일간 슬럼프와서 많이 좀 내려놓았었다.
Docker와 Kubernetes 하는 지금이 부트캠프 중 제일 중요한 시기일텐데
여기서 힘이빠지면 어떡하냐 싶기도 했고

그런데 오늘 수업들으면서 이것저것 찾아보다가
또 다른 열심히 하는 분을 발견했다 (새벽4시,6시 포스팅이라니 세상에)

스스로 열심히 할 수 없으면, 다른 열심히하는 사람들에게 자극받아서 해야지 휴.. 열심히하자

오늘의 할일

  • 220524 TIL 작성
  • 깃블로그 구글 Search 등록

주요 키워드

K8s

Volume

  • emptyDir
  • hostpath

수업 정리

볼륨
쿠버네티스의 파드에서 저장소를 제공하는 기능
기본적인 파드의 특성인 Stateless 으로 인해 데이터가 유지되지 않으므로, 데이터를 파드의 라이프사이클과 별개로 유지하기 위해서는 별도의 볼륨이 필요
파드 내 컨테이너 간 공유 저장소 기능 제공

쿠버네티스의 볼륨 유형
emptyDir
파드의 라이프사이클과 같이하는 볼륨
임시공간으로 파드 내 컨테이너 간 공유 목적으로 사용
hostPath
도커의 BindMount 와 유사한 개념
파드에게 호스트의 파일시스템을 볼륨으로 제공
네트워크 볼륨
nfs 등 네트워크를 통해 접근 가능한 파일시스템을 볼륨으로 제공
클라우드 볼륨
클라우드 서비스에서 제공하는 저장소를 볼륨으로 제공
영구 볼륨(PersistentVolume)
볼륨 사용 시 관리자의 관리영역과 사용자의 관리영역을 분리하는 볼륨
정적 : 관리자에 의해 사전에 생성된 볼륨을 사용
동적 : 사용자의 요청에 의해 자동으로 생성되는 볼륨을 사용
특수 볼륨
ConfigMap
Secret
EmptyDir
아무런 데이터가 들어있지 않은 빈 공간을 제공
파드 내 컨테이너 간 공유 저장소를 사용할 수 있음

볼륨 사용을 위한 리소스 오브젝트 기본 구조
apiVersion: v1
kind: Pod
metadata:
  name: testpod
spec:
  containers:
  - name: test-pod-container
    image: ubuntu
    volumeMounts:
    - name: <VOLUME_NAME>
      mountPath: <MOUNTPOINT>
  volumes:
  - name: <VOLUME_NAME>
    <VOLUME_TYPE>


emptyDir 예시
apiVersion: v1
kind: Pod
metadata:
  name: testpod
spec:
  containers:
  - name: test-pod-container
    image: ubuntu
    command:
    - sleep
    - infinity
    volumeMounts:
    - name: emptydir-vol
      mountPath: /test
  volumes:
  - name: emptydir-vol
    emptyDir: {}



emptyDir 볼륨 사용 예시
apiVersion: apps/v1
kind: Deployment
metadata:
  name: emptydir-share-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fortune
  template:
    metadata:
      labels:
        app: fortune
    spec:
      containers:
      - name: webserver
        image: nginx:latest
        volumeMounts:
        - name: share-vol
          mountPath: /usr/share/nginx/html
          readOnly: true
        ports:
        - containerPort: 80
          protocol: TCP
      - name: fortune
        image: ghcr.io/c1t1d0s7/fortune
        volumeMounts:
        - name: share-vol
          mountPath: /var/htdocs
      volumes:
      - name: share-vol
        emptyDir: {}



참고) gitRepo 볼륨
git으로부터 필요한 데이터를 받아와서 초기화되는 볼륨
현재는 사용하지 않음
필요할 경우 emptyDir + InitContainer 조합으로 사용

InitContainer
실제 파드 운영상 필요한 파드가 아니라 파드 초기화 단계에서 필요한 파드
apiVersion: v1
kind: Pod
metadata:
  name: gitrepo-test
spec:
  initContainers:
  - name: git-container
    image: alpine/git
    args:
    - clone
    - https://github.com/kubernetes-sigs/kubespray.git
    - /git
    volumeMounts:
    - name: git-vol
      mountPath: /git
  containers:
  - name: test-container
    image: busybox
    command:
    - sleep
    - infinity
    volumeMounts:
    - name: git-vol
      mountPath: /git
  volumes:
  - name: git-vol
    emptyDir: {}




HostPath
Docker Bind Mount와 유사한 동작 방식을 가짐

hostPath 예시

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: hostpath-rs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: hostpath-rs-container
        image: ubuntu
        command:
        - sleep
        - infinity
        volumeMounts:
        - name: hostpath-vol
          mountPath: /hostpath
      volumes:
      - name: hostpath-vol
        hostPath:
          type: DirectoryOrCreate
          path: /tmp/hostpath
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: webserver-rs
spec:
  replicas: 3
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: webserver
        image: nginx:latest
        volumeMounts:
        - name: web-contents
          mountPath: /usr/share/nginx/html
          readOnly: true
        ports:
        - containerPort: 80
          protocol: TCP
      volumes:
      - name: web-contents
        hostPath:
          type: Directory
          path: /web_contents


Categories:

Updated:

Leave a comment