Skip to content

Latest commit

Β 

History

History
259 lines (240 loc) Β· 5.66 KB

10_Volume.md

File metadata and controls

259 lines (240 loc) Β· 5.66 KB

λ³Όλ₯¨

  • μ»¨ν…Œμ΄λ„ˆκ°€ μ™ΈλΆ€ μŠ€ν† λ¦¬μ§€μ— μ—‘μ„ΈμŠ€ν•˜κ³  κ³΅μœ ν•˜λŠ” 방법
  • ν¬λ“œμ˜ 각 μ»¨ν…Œμ΄λ„ˆμ—λŠ” λΆ„λ¦¬λœ 파일 μ‹œμŠ€ν…œ 쑴재
  • λ³Όλ₯¨μ€ ν¬λ“œμ˜ μ»΄ν¬λ„ŒνŠΈμ΄λ©° ν¬λ“œμ˜ μŠ€νŽ™μ— μ˜ν•΄ μ •μ˜
  • 독립적인 μΏ λ²„λ„€ν‹°μŠ€ μ˜€λΈŒμ νŠΈκ°€ μ•„λ‹ˆλ©°, 슀슀둜 생성, μ‚­μ œ λΆˆκ°€
  • 각 μ»¨ν…Œμ΄λ„ˆμ˜ 파일 μ‹œμŠ€ν…œμ˜ λ³Όλ₯¨μ„ λ§ˆμš΄νŠΈν•˜μ—¬ 생성
  • λ³Όλ₯¨ μ’…λ₯˜
    • μž„μ‹œλ³Όλ₯¨

      • EmptyDir : μΌμ‹œμ μΈ 데이터 μ €μž₯
      apiVersion: v1
      kind: Pod
      metadata:
      name: count
      spec:
      containers:
      - image: gasbugs/count
        name: html-generator
        volumeMounts:
        - name: html
          mountPath: /var/htdocs
      - image: httpd
        name: web-server
        volumeMounts:
        - name: html 
          mountPath: /usr/local/apache2/htdocs
          readOnly: true
          ports:
        - containerPort: 80
          protocol: TCP
          volumes:
      - name: html
        emptyDir: {}
    • 둜컬볼λ₯¨

      • hostpath : ν¬λ“œμ— 호슀트 λ…Έλ“œμ˜ 파일 μ‹œμŠ€ν…œμ—μ„œ νŒŒμΌμ΄λ‚˜ 디렉토리λ₯Ό 마운트
        apiVersion: v1
        kind: Pod
        metadata:
          name: hostpath-http
        spec:
          containers:
          - image: httpd
            name: web-server
            volumeMounts:
            - name: html
              mountPath: /usr/local/apache2/htdocs
              readOnly: true
            ports:
            - containerPort: 80
              protocol: TCP
          volumes:
          - name: html
            hostPath: # 호슀트 패슀
               path: /var/htdocs
               type: Directory
    • λ„€νŠΈμ›Œν¬ λ³Όλ₯¨

      • nfs : κΈ°μ‘΄ NFS κ³΅μœ κ°€ ν¬λ“œμ— μž₯μ°©
    • ν΄λΌμš°λ“œ 쒅속적 λ„€νŠΈμ›Œν¬ λ³Όλ₯¨

      • gcePersistentDis : ꡬ글 μ»΄ν“¨νŠΈμ—”μ§„ μ˜κ΅¬λ””μŠ€ν¬ 마운트
        # gcloud λ””μŠ€ν¬ 생성
        gcloud compute disks create --size=10GiB --zone=asia-northeast3-a mongodb
        apiVersion: v1
        kind: Pod
        metadata:
          name: mongodb
        spec:
          containers:
            - image: mongo
              name: mongodb
              volumeMounts:
                - mountPath: /data/db
                  name: mongodb
          volumes:
            - name: mongodb
              gcePersistentDisk:
                pdName: mongodb
                fsType: ext4
      • awsEBS : μ•„λ§ˆμ‘΄ μ˜κ΅¬λ””μŠ€ν¬ 마운트
      • azureFile : μ• μ € μ˜κ΅¬λ””μŠ€ν¬ 마운트
# NFS μ„œλ²„ μ„€μΉ˜ 
apt-get update
apt-get install nfs-common nfs-kernel-server portmap

# 디렉토리 생성
mkdir /home/nfs
chmod 777 /home/nfs

# μˆ˜μ •
vim /etc/exports  # /home/nfs 0.0.0.0을 적음

mount -t nfs <nfsμ„œλ²„ IP>:/home/nfs /mnt

λ³Όλ₯¨ 좔상화

  • PersistentVolume (PV)
  • PersistentVolumeClaim (PVC)
apiVersion: v1
kind: Pod
metadata:
  name: mongodb
spec:
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:
    - mountPath: /data/db
      name: mongodb
  volumes:
  - name: mongodb
    persistentVolumeClaim:
      claimName: mongo-pvc
---
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: ""
---
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-pv
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  - ReadOnlyMany
  persistentVolumeReclaimPolicy: Retain # Retain(μœ μ§€), Delete(μ™ΈλΆ€ 인프라와 μ—°κ΄€λœ μŠ€ν† λ¦¬μ§€ μžμ‚° λͺ¨λ‘ 제거), Recycle(볼븀에 λŒ€ν•œ μŠ€ν¬λŸ½μ„ μˆ˜ν–‰ν•˜κ³  μƒˆ ν΄λΌμž„μ— λŒ€ν•΄ λ‹€μ‹œ μ‚¬μš©ν• μˆ˜ 있음)
  gcePersistentDisk:
    pdName: mongodb
    fsType: ext4
  • 동적 ν”„λ‘œλΉ„μ €λ‹ : PVλ₯Ό 직접 λ§Œλ“œλŠ” λŒ€μ‹  μ‚¬μš©μžκ°€ μ›ν•˜λŠ” PV μœ ν˜•μ„ μ„ νƒν•˜λ„λ‘ 였브젝트 μ •μ˜ κ°€λŠ₯.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: storage
---
apiVersion: v1
kind: Pod
metadata:
  name: mongodb
spec:
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:
    - mountPath: /data/db
      name: mongodb
  volumes:
  - name: mongodb
    persistentVolumeClaim:
      claimName: mongo-pvc

μŠ€ν…Œμ΄νŠΈ ν’€μ…‹

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μΏ λ²„λ„€ν‹°μŠ€ 객체.

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx" # ν—€λ“œλ ˆμŠ€ μ„œλΉ„μŠ€λ₯Ό μ§€μ •ν•œλ‹€.
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10 # κ°•μ œ μ’…λ£ŒκΉŒμ§€ λŒ€κΈ°ν•˜λŠ” μ‹œκ°„
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # PVC 섀정을 μ €μž₯ν•˜λŠ” λΆ€λΆ„
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "standard"
      resources:
        requests:
          storage: 1Gi