Contents

k8s doc reading: Concepts - Storage - Volumes

/posts/20250702_k8s-doc-reading-storage-volume/images/banner.png

doc link

volume 讓 container 可以 mount config / storage space / host file
相信這用途對於學過 docker 的人並不陌生
不過 k8s 統一將 docker config 功能統一放在 volume 下設定

Volumes 可以滿足以下幾種需求

  • mount ConfigMap or Secret as file
  • 暫時性可讀寫儲存空間
  • 持續性可讀寫儲存空間
  • 唯讀空間
  • 共用 filesystem 在 pod / container 之間 (允許跨 node)
  • pass k8s 部份資訊給 container (比如說 namespace)

ConfigMap 與 Secret 還沒提到
他是 k8s 提供一個空間讓你存放 config 資訊於 etcd 中
其中 ConfigMap 未編碼, Secret 已編碼
詳細差異會在之後提到

以下介紹常用的 volume type

ConfigMap / Secret

能將 k8s 中的 ConfigMap / Secret 以 file 方式 mount 到 container 中
兩者皆會以唯獨方式 mount
允許跨 node / multiple pod / multiple container 同時 mount

sample config

apiVersion: v1
kind: Pod
metadata:
  name: configmap-pod
spec:
  containers:
    - name: test
      image: busybox:1.28
      command: ['sh', '-c', 'echo "The app is running!" && tail -f /dev/null']
      volumeMounts:
        - name: config-vol
          mountPath: /etc/config
  volumes:
    - name: config-vol
      configMap:
        name: log-config
        items:
          - key: log_level
            path: log_level.conf

.spec.volumes 聲明一個 volume name: config-vol
要從 configMap(resource) 的 log-config(object) 的 log_level 當作 log_level.conf 這個 file

.spec.containers[0].volumeMounts 把他放在目錄 /etc/config 下

container 在執行時就可以 access /etc/config/log_level.conf 讀到我們給予的設定

hostPath

將執行該 pod 的 node 的 folder or path mount 給 pod
最常用在 monitor(read host log send to log server)

storage

storage 可以提供 pod 一個共用專用的空間做讀寫使用
可以支援多種來源, 比如說 NFS, iSCSI, local…
並能夠根據不同來源設定 iops/throughput/size/accessModes … etc
具有相當高的彈性
但由於這裡 k8s 實做方式較為複雜
因此下篇再繼續說明