Ubuntu 18.04
Sponsored Link

Kubernetes : 永続ストレージの設定2018/10/22

 
Docker コンテナ単体利用時と同様、データの永続化には外部ストレージが必要になります。
当例では以下のように 3台のホストを使用して Kubernetes クラスターを構成しています。
例として、Master ノード上に NFS サーバーを起動し、Pod から外部ストレージとして利用できるよう設定します。
-----------+---------------------------+--------------------------+------------
           |                           |                          |
       eth0|10.0.0.30              eth0|10.0.0.51             eth0|10.0.0.52
+----------+-----------+   +-----------+----------+   +-----------+----------+
|   [ dlp.srv.world ]  |   | [ node01.srv.world ] |   | [ node02.srv.world ] |
|      Master Node     |   |      Worker Node     |   |      Worker Node     |
|       NFS Server     |   |                      |   |                      |
+----------------------+   +----------------------+   +----------------------+

[1]
こちらを参考に Master ノード上に NFS サーバーを稼働させておきます
なお、当例では [/var/lib/nfs-share] ディレクトリを共有ディレクトリとして設定します。
[2] Master ノードで PV (Persistent Volume) オブジェクト および PVC (Persistent Volume Claim) オブジェクトを定義しておきます。
# PV 定義ファイル作成

root@dlp:~#
vi nfs-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  # 任意の PV名
  name: nfs-pv
spec:
  capacity:
    # ストレージのサイズ
    storage: 10Gi
  accessModes:
    # アクセスモード: ReadWriteMany(複数ノードRW), ReadWriteOnce(単一ノードRW), ReadOnlyMany(複数ノードR)
    - ReadWriteMany
  persistentVolumeReclaimPolicy:
    # Pod が終了した後もデータを残す
    Retain
  nfs:
    # NFSサーバーの定義
    path: /var/lib/nfs-share
    server: 10.0.0.30
    readOnly: false

root@dlp:~#
kubectl create -f nfs-pv.yml

persistentvolume "nfs-pv" created
root@dlp:~#
kubectl get pv

NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
nfs-pv   10Gi       RWX            Retain           Available                                   5s

# PVC 定義ファイル作成

root@dlp:~#
vi nfs-pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # 任意の PVC名
  name: nfs-pvc
spec:
  accessModes:
  # アクセスモード: ReadWriteMany(複数ノードRW), ReadWriteOnce(単一ノードRW), ReadOnlyMany(複数ノードR)
  - ReadWriteMany
  resources:
     requests:
       # 利用したいストレージのサイズ
       storage: 1Gi

root@dlp:~#
kubectl create -f nfs-pvc.yml

persistentvolumeclaim "nfs-pvc" created
root@dlp:~#
kubectl get pvc

NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound     nfs-pv    10Gi       RWX                           4s
[3] 定義済みの PVC を指定して Pod を作成します。
root@dlp:~#
vi nginx-nfs.yml
apiVersion: v1
kind: Pod
metadata:
  # 任意の Pod名
  name: nginx-nfs
  labels:
    name: nginx-nfs
spec:
  containers:
    - name: nginx-nfs
      image: nginx
      ports:
        - name: web
          containerPort: 80
      volumeMounts:
        - name: nfs-share
          # コンテナ内でNFSをマウントする場所
          mountPath: /usr/share/nginx/html
  volumes:
    - name: nfs-share
      persistentVolumeClaim:
        # 事前に作成したPVC名
        claimName: nfs-pvc

root@dlp:~#
kubectl create -f nginx-nfs.yml

pod "nginx-nfs" created
# 設定した NFS の共有領域にテストファイル作成

root@dlp:~#
echo 'NFS Persistent Storage Test' > /var/lib/nfs-share/index.html
root@dlp:~#
kubectl get pods -o wide

NAME        READY   STATUS    RESTARTS   AGE   IP           NODE               NOMINATED NODE
nginx-nfs   1/1     Running   0          51s   10.244.2.4   node02.srv.world   <none>

# アクセス確認

root@dlp:~#
curl 10.244.2.4

NFS Persistent Storage Test
関連コンテンツ