CentOS 7
Sponsored Link

OpenShift Origin (OKD) 3.10 : 永続ストレージを利用する2018/08/21

 
OpenShift クラスターで永続ストレージを利用する場合の設定です。
例として NFS バックエンドのストレージを設定します。
当例では以下のような環境を例に OpenShift クラスターを構成しています。
ここへ NFS サーバーを別途準備して、クラスター内の各 Pod から NFS 共有が利用できるようにします。
-----------+--------------+-------------+----------------------------+------------
           |10.0.0.25     |             |10.0.0.51                   |10.0.0.52
+----------+-----------+  |  +----------+-----------+     +----------+-----------+
|  [ ctrl.srv.world ]  |  |  | [ node01.srv.world ] |     | [ node02.srv.world ] |
|     (Master Node)    |  |  |    (Compute Node)    |     |    (Compute Node)    |
|     (Infra Node)     |  |  |                      |     |                      |
|     (Compute Node)   |  |  |                      |     |                      |
+----------------------+  |  +----------------------+     +----------------------+
-----------+--------------+
           |10.0.0.35
+----------+-----------+
|  [  nfs.srv.world ]  |
|      NFS Server      |
|                      |
|                      |
+----------------------+

[1]
こちらを参考に LAN 内に NFS サーバーを稼働させておきます
なお、当例では [nfs.srv.world] 上の [/var/lib/nfs/share] ディレクトリを共有ディレクトリとして設定します。
[2] クラスター管理ユーザーでログインし、PV (Persistent Volume) オブジェクトを作成します。
また、クラスター内の認証済みユーザーに anyuid の SCC (Security Context Constraints) を付与します。
# デフォルト SCC リスト

[origin@ctrl ~]$
oc get scc

NAME               PRIV      CAPS      SELINUX     RUNASUSER          FSGROUP     SUPGROUP    PRIORITY   READONLYROOTFS   VOLUMES
anyuid             false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    10         false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
hostaccess         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath persistentVolumeClaim projected secret]
hostmount-anyuid   false     []        MustRunAs   RunAsAny           RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir hostPath nfs persistentVolumeClaim projected secret]
hostnetwork        false     []        MustRunAs   MustRunAsRange     MustRunAs   MustRunAs   <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
nonroot            false     []        MustRunAs   MustRunAsNonRoot   RunAsAny    RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]
privileged         true      [*]       RunAsAny    RunAsAny           RunAsAny    RunAsAny    <none>     false            [*]
restricted         false     []        MustRunAs   MustRunAsRange     MustRunAs   RunAsAny    <none>     false            [configMap downwardAPI emptyDir persistentVolumeClaim projected secret]

[origin@ctrl ~]$
oc adm policy add-scc-to-group anyuid system:authenticated

scc "anyuid" added to groups: ["system:authenticated"]
# PV 定義ファイル作成

[origin@ctrl ~]$
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.35
    readOnly: false

[origin@ctrl ~]$
oc create -f nfs-pv.yml

persistentvolume "nfs-pv" created
[origin@ctrl ~]$
oc get pv

NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
nfs-pv    10Gi       RWX            Retain           Available                                      6s
[3] アプリケーションをデプロイしたい任意のユーザーで PVC (Persistent Volume Claim) オブジェクトを作成します。
# PVC 定義ファイル作成

[cent@ctrl ~]$
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

[cent@ctrl ~]$
oc create -f nfs-pvc.yml

persistentvolumeclaim "nfs-pvc" created
[cent@ctrl ~]$
oc get pvc

NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound     nfs-pv    10Gi       RWX                           5s
[4] 全計算ノードで SELinux ブール値の変更が必要です。
[root@node01 ~]#
setsebool -P virt_use_nfs on

[5] PVC (Persistent Volume Claim) オブジェクトを作成したユーザーでログインして、NFS共有をマウントした Pod を作成します。
# Pod 定義ファイル作成

[cent@ctrl ~]$
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:
        # コンテナー内でNFSをマウントする場所
        - name: nfs-share
          mountPath: /usr/share/nginx/html
  volumes:
    - name: nfs-share
      persistentVolumeClaim:
        # 事前に作成した PVC名
        claimName: nfs-pvc

[cent@ctrl ~]$
oc create -f nginx-nfs.yml

pod "nginx-nfs" created
[cent@ctrl ~]$
oc get pods

NAME        READY     STATUS    RESTARTS   AGE
nginx-nfs   1/1       Running   0          58s

# コンテナーにシェルアクセス

[cent@ctrl ~]$
oc exec -it nginx-nfs bash
# マウント確認

[root@nginx-nfs /]#
df /usr/share/nginx/html

Filesystem                   1K-blocks    Used Available Use% Mounted on
10.0.0.35:/var/lib/nfs/share  27246080 1175040  26071040   5% /usr/share/nginx/html

# index ページ作成

[root@nginx-nfs /]#
echo 'NFS Persistent Storage Test' > /usr/share/nginx/html/index.html

[root@nginx-nfs /]#
exit

exit
[cent@ctrl ~]$
oc describe pod nginx-nfs | grep ^IP

IP:                     10.130.0.7

# アクセス可能か確認

[cent@ctrl ~]$
curl 10.130.0.7

NFS Persistent Storage Test
関連コンテンツ