CentOS 7
Sponsored Link

OpenShift Origin 3.7 : 永続ストレージを利用する2018/02/08

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

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

[origin@dlp ~]$
oc get scc

NAME             PRIV   CAPS  SELINUX     RUNASUSER        FSGROUP     SUPGROUP    PRIORITY   READONLYROOTFS
anyuid           false  []    MustRunAs   RunAsAny         RunAsAny    RunAsAny    10         false
hostaccess       false  []    MustRunAs   MustRunAsRange   MustRunAs   RunAsAny    <none>     false   ...
hostmount-anyuid false  []    MustRunAs   RunAsAny         RunAsAny    RunAsAny    <none>     false   ...
hostnetwork      false  []    MustRunAs   MustRunAsRange   MustRunAs   MustRunAs   <none>     false   ...
nonroot          false  []    MustRunAs   MustRunAsNonRoot RunAsAny    RunAsAny    <none>     false   ...
privileged       true   [*]   RunAsAny    RunAsAny         RunAsAny    RunAsAny    <none>     false   ...
restricted       false  []    MustRunAs   MustRunAsRange   MustRunAs   RunAsAny    <none>     false   ...

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

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

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

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

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

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

[cent@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

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

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

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

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

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

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

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

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

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

[cent@dlp ~]$
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 1460224  25785856   6% /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@dlp ~]$
oc describe pod nginx-nfs | grep ^IP

IP:                     10.130.0.15

# アクセス可能か確認

[cent@dlp ~]$
curl 10.130.0.15

NFS Persistent Storage Test
関連コンテンツ