CentOS 7
Sponsored Link

Kubernetes : 永続ストレージの設定
2018/04/15
 
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           Bound     default/nfs-pvc                            2d

# 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                           2d
[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: fedora/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
nginx-nfs   1/1       Running   0          3m        10.244.1.10   node01.srv.world

# アクセス確認

[root@dlp ~]#
curl 10.244.1.10

NFS Persistent Storage Test
関連コンテンツ
 
Tweet