0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShiftコンテナ環境でTrident + ONTAP利用②【ONTAP Storage+Trident設定】

0
Last updated at Posted at 2026-06-03

はじめに

前回の記事では、Single Node構成でのOpenShift環境が構築について記載しましたが、本記事ではアプリケーションが永続データを利用できるStorage基盤の作成について記載します。
Storage基盤としてNetApp ONTAP StorageをOpenShiftから利用するための基本設定、StorageオーケストレーターであるNetApp Tridentを導入し、OpenShiftから動的にボリュームをプロビジョニングできる環境の構築についての内容になります。

057.png

何をしたい?できる?

  • ONTAPでOpenShiftのPersistent Volume(PV)用のSVM作成
  • NetApp Tridentの導入
  • 試験用Podを作成してWriteの確認

NetApp Tridentとは

NetApp Tridentは、NetApp Storageを簡単に使えるようにするためのCSI(Container Storage Interface)対応のStorageプロビジョナーとなり、KubernetesやOpenShiftからの要求に応じて、Storage上にVoluumeを自動作成・管理します。
これにより、コンテナアプリケーションが永続ストレージを動的に利用でき、運用の自動化や管理の効率化が可能になります。

qiita-square

Storage Driverの選択

使用されるプロトコルとStorage上でのVolumeのプロビジョニング方法によって区別されるものになりますが、明確な要望やStorage側の各種上限(Volume数やSize)に抵触しない限りは、”ontap-nas”または”ontap-san”を選択する事になるかと思います。

詳細はマニュアルを参照頂ければと思いますが、NASのDriverでは以下の機能の違いがあります。

image.png

記事における環境情報

本記事では、以下の環境で実施した内容となります。
OSやモジュールは以下の構成としています。

  • ONTAP 9.17.1
  • NetApp Trident 26.02.1
  • Windows Server 2025 Hyper-V環境
  • Red Hat Enterprise Linux 9.8
  • OpenShift 4.21.16

環境のイメージとしては以下の通りです。

qiita-square

設定手順

設定の流れとしては以下のような形になります。

1. PV作成用のNFS Storage用意(NFS用のSVM作成)
2. Tridentの導入+設定

1. PV作成用のNFS Storage作成

1-1. NFS用のSVM作成

本記事ではNFS用SVMを作成し、データ疎通だけでなく、TrindenとAPI疎通する経路についても合わせて172.16.21.0/24のNetworkで用意します。

まずは、SVMをNFS用途で作成します。
SVM作成の参考として過去の記事を確認頂ければと思います。

# SVMの作成
> vserver create -vserver nfs100 -subtype default
[Job 1385] Job succeeded:
Vserver creation completed.


# Volume作成時に利用するAggregateの定義
> vserver modify -vserver nfs100 -aggr-list aggr1_node1,aggr1_node2

2-2. NFS用のSVMへLIFの作成

管理用とデータ通信用のLIFを作成します。

# LIFの作成
> network interface create -vserver nfs100 -lif manage -service-policy default-management -address 10.11.100.47 -netmask 255.255.255.0 -home-node PS-A400-01 -home-port a0a

> network interface create -vserver nfs100 -lif data -service-policy default-data-files -address 10.11.100.48 -netmask 255.255.255.0 -home-node PS-A400-01 -home-port a0a


# 設定情報の確認
> network interface show -vserver nfs100
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
nfs100
            data         up/up    10.11.100.48/24    PS-A400-01    a0a     true
            manage       up/up    10.11.100.47/24    PS-A400-01    a0a     true
2 entries were displayed.

2-3. NFSのSVMへの有効化

NFS設定を有効化し、SVMのroot Volumeへアクセス設定を実施します。

# SVMへのNFS有効化
> nfs create -vserver nfs100

# 状態の確認
> nfs show -vserver nfs100

                                          Vserver: nfs100
                               General NFS Access: true
                                           NFS v3: enabled
                                         NFS v4.0: enabled
                                     UDP Protocol: enabled
                                     TCP Protocol: enabled
                             Default Windows User: -
(中略)
                             


# Export Policyの設定
> export-policy rule create -vserver nfs100 -policyname default -clientmatch 0.0.0.0/0 -rorule any -rwrule any -anon 0

2-4. APIアクセス用のユーザ用意

本記事ではONTAP Cluster全体へアクセスでは無く、個々のSVMにAPIを投げる形で作成したいので作成したSVMでAPIアクセス用のユーザ作成が必要になります。
ここでは楽をする為に、SVM作成時に自動で作成されるvsadminユーザを利用します。

# ユーザへのPassword設定
> security login password -vserver nfs100 -username vsadmin

Enter a new password:
Enter it again:


# UserのUnlock
> security login unlock  -vserver nfs100 -username vsadmin


# User情報の確認
> security login show -vserver nfs100

Vserver: nfs100
                                                                 Second
User/Group                 Authentication                 Acct   Authentication
Name           Application Method        Role Name        Locked Method
-------------- ----------- ------------- ---------------- ------ --------------
vsadmin        http        password      vsadmin          no     none
vsadmin        ontapi      password      vsadmin          no     none
vsadmin        ssh         password      vsadmin          no     none
3 entries were displayed.

3. NetApp Tridentの導入

3-1. Tridentをインストール

OpenShiftのGUI画面にアクセスし、左側の[エコシステム]から[ソフトウェアカタログ]をクリック後に表示された画面でTridentと入力し、表示される[NetApp Trident]をクリックします。
(Certifiedの方を利用)
qiita-square

表示された画面で[インストール]をクリックします。
qiita-square

表示された画面の下方にある[インストール]をクリックします。
qiita-square

Install完了後に、[Operatorの表示]をクリックします。

qiita-square

表示された画面で[インスタンスを作成]をクリックし、Trident Orchestratorのインスタンスを作成します。
(本記事ではiscsiを利用しないので、yamlにあるnodePrepへiscsiの追記はしていません)
qiita-square

qiita-square

Installが完了した事を確認します。
qiita-square

踏み台サーバからInstall後の状態について確認します。

# Trident Install後の確認
> oc get pod -n trident
NAME                                  READY   STATUS    RESTARTS       AGE
trident-controller-555f57b76c-cws9q   6/6     Running   0              3m30s
trident-node-linux-8djv8              2/2     Running   2 (118s ago)   3m30s

3-2. SVM資格情報の設定

踏み台サーバから、Tridentが上記の[2-2. NFS用のSVMへLIFの作成]の管理LIFへ接続する際に使用する認証資格情報を登録します。

# マニフェスト
> cat trident-svm-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ontap-svm-admin
  namespace: trident
type: Opaque
stringData:
  username: vsadmin
  password: XXXXXXX



# 作成したファイルの適用
> oc apply -f trident-svm-secret.yaml
secret/ontap-svm-admin created


> oc get secret -n trident
NAME                      TYPE     DATA   AGE
ontap-svm-admin           Opaque   2      10s
trident-csi               Opaque   6      20m
trident-encryption-keys   Opaque   1      20m

3-3. Trident Backendの設定

Backendの設定は、ONTAP等のStorageとTridentを接続するための定義になり、Storage管理IP、認証情報、SVM、使用するドライバなどを指定し、OpenShiftからVolumeを動的に作成できるようにします。
ここでは指定する各LIFのIPアドレスは、Storage側で構成が完了している既存の管理系とデータ通信用のものを記載します。
指定可能な内容やサンプルはマニュアルを参照してください。

qiita-square

踏み台サーバから操作を実施します。

# マニフェスト
> cat trident-tbc-nfs.yaml
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
  name: ontap-nfs-backend-tbc
  namespace: trident
spec:
  version: 1
  backendName: ontap-nas-backend
  storageDriverName: ontap-nas
  managementLIF: 10.11.100.47
  dataLIF: 10.11.100.48
  svm: nfs100
  credentials:
    name: ontap-svm-admin
  defaults:
    spaceReserve: none
    exportPolicy: default


# 作成したファイルの適用
> oc apply -f trident-tbc-nfs.yaml -n trident
tridentbackendconfig.trident.netapp.io/ontap-nfs-backend-tbc created


# 作成後の確認
> oc get tridentbackend -n trident
NAME        BACKEND             BACKEND UUID
tbe-sfjbw   ontap-nas-backend   9fb91550-de6a-4ccd-aa8f-cf2d90eff3aa

3-4. StorageClassの設定

StorageClassは、動的プロビジョニングで使用するStorageの種類やポリシーを定義する設定で、ユーザからの要求と上記で設定したBackendを関連させるためにStorageClassを設定します。
指定可能な内容はマニュアルを参照してください。

qiita-square

踏み台サーバから操作を実施します。

# マニフェスト
> cat storageclass-nas.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ontap-nas-class
provisioner: csi.trident.netapp.io
mountOptions:
  - nfsvers=3
parameters:
  backendType: "ontap-nas"
allowVolumeExpansion: true


# 作成したファイルの適用
> oc apply -f storageclass-nas.yaml
storageclass.storage.k8s.io/ontap-nas-class created


# 作成後の確認
> oc get storageclass
NAME              PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
ontap-nas-class   csi.trident.netapp.io   Delete          Immediate           true                   13s

3-5. Persistent Volume(PV)の作成

PersistentVolumeClaim(PVC)は永続化Storageに対するユーザの要求・リクエストで、容量、アクセスモード(書き込み権限の有無など)、StorageClassを定義します。
PVCで定義されたすべての要件に一致すると、PVCはその一致したPVにバインドされ、PVからStorageを利用できるようになります。

PersistentVolumeは、管理者/TridentによりプロビジョニングされたStorageリソースでクラスタレベルで管理されます。
(クラスタのどのNameSpaceからも利用できる)
BackendのStorageとマッピングされ、Podが削除されてもPVは削除されない形になります。
(Podのライフサイクルと関係なし)

qiita-square

踏み台サーバから後述で作成するPod用やPersistentVolumeClaim用のNamespaceを作成します。

> oc create namespace testspace01
namespace/testspace01 created

# 作成後の確認
> oc get ns testspace01
NAME          STATUS   AGE
testspace01   Active   18s

Persistent Volumeの払い出しを実施します。

# PersistentVolumeClaim マニフェスト
> cat pvc.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
  namespace: testspace01
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  storageClassName: ontap-nas-class


# マニフェストの適用
> oc apply -f pvc.yaml
persistentvolumeclaim/pvc-nas created


# 作成後の確認
> oc get pvc -n testspace01
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
pvc-nas   Bound    pvc-fcf6f7b4-cc50-430d-9013-13bbbcd596e6   2Gi        RWX            ontap-nas-class   <unset>                 112s


> oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS      VOLUMEATTRIBUTESCLASS   REASON   AGE
pvc-fcf6f7b4-cc50-430d-9013-13bbbcd596e6   2Gi        RWX            Delete           Bound    testspace01/pvc-nas   ontap-nas-class   <unset>                          2m11s

ONTAP側から作成されたVolumeを確認してみます。

> vol show -vserver nfs100
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
nfs100    nfs100_root  aggr1_node2  online     RW          1GB    971.4MB    0%
nfs100    trident_pvc_fcf6f7b4_cc50_430d_9013_13bbbcd596e6
                       aggr1_node2  online     RW          2GB     2.00GB    0%
2 entries were displayed.

3-6. テスト用のPodの作成

PVへの書き込みができるかを確認する為のPodを作成します。

  • 軽量なコンテナ「Red Hat Universal Base Image (UBI)」を作成
  • ONTAPに作成したPVを利用する
  • 1秒毎にdateの結果を作成したPVにlogとして出力

qiita-square

踏み台サーバから操作を実施します。

# マニフェスト
> cat pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-test-app
  namespace: testspace01
spec:
  containers:
  - name: logger
    image: registry.access.redhat.com/ubi9/ubi-minimal:latest
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo $(date -u) >> /mnt/storage/access.log; sleep 1; done"]
    volumeMounts:
    - name: data-volume
      mountPath: /mnt/storage
  volumes:
  - name: data-volume
    persistentVolumeClaim:
      claimName: pvc-nas


# マニフェストの適用
> oc apply -f pod-test.yaml
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "logger" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "logger" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "logger" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "logger" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
pod/pod-test-app created


# 作成後の確認
> oc get pod -n testspace01
NAME           READY   STATUS    RESTARTS   AGE
pod-test-app   1/1     Running   0          40s


> oc get pods -o wide -n testspace01
NAME           READY   STATUS    RESTARTS   AGE   IP              NODE                          NOMINATED NODE   READINESS GATES
pod-test-app   1/1     Running   0          76s   192.168.0.151   master01.ocp100.example.org   <none>           <none>

作成したPodに入って、PVが接続されている事と指定したlogが増えている事を確認します。

# Podに接続
> oc exec -n testspace01 --stdin --tty pod-test-app -- /bin/bash


# Pod内の操作(mount状態の確認)
[root@pod-test-app /]# df -h
Filesystem                                                       Size  Used Avail Use% Mounted on
overlay                                                          200G   32G  168G  16% /
tmpfs                                                             64M     0   64M   0% /dev
shm                                                               64M     0   64M   0% /dev/shm
tmpfs                                                            4.7G  123M  4.6G   3% /proc/acpi
10.11.100.48:/trident_pvc_fcf6f7b4_cc50_430d_9013_13bbbcd596e6   2.0G  576K  2.0G   1% /mnt/storage
/dev/sda4                                                        200G   32G  168G  16% /etc/hosts
tmpfs                                                             23G   20K   23G   1% /run/secrets/kubernetes.io/serviceaccount
devtmpfs                                                         4.0M     0  4.0M   0% /proc/keys


# Pod内の操作(logが増えている事の確認)
[root@pod-test-app /]# tail -f /mnt/storage/access.log
Tue Jun 2 03:16:28 UTC 2026
Tue Jun 2 03:16:29 UTC 2026
Tue Jun 2 03:16:30 UTC 2026
Tue Jun 2 03:16:31 UTC 2026
Tue Jun 2 03:16:32 UTC 2026
Tue Jun 2 03:16:33 UTC 2026
Tue Jun 2 03:16:34 UTC 2026

ONTAP Storage側からもQoSコマンドで対象VolumeにI/Oが来ている事が確認できます。

> qos statistics volume characteristics show -vserver nfs100 -volume trident_pvc_fcf6f7b4_cc50_430d_9013_13bbbcd596e6
Workload            ID     IOPS       Throughput Request Size Read Concurrency
--------------- ------ -------- ---------------- ------------ ---- -----------
-total-              -        1         1.63KB/s         836B   0%           0
trident_pvc_f..  43389        1         1.63KB/s         836B   0%           0
-total-              -        3         1.66KB/s         566B   0%           0
trident_pvc_f..  43389        3         1.66KB/s         566B   0%           0
-total-              -        1         1.69KB/s         864B   0%           0
trident_pvc_f..  43389        1         1.69KB/s         864B   0%           0
-total-              -        3         1.71KB/s         585B   0%           0
trident_pvc_f..  43389        3         1.71KB/s         585B   0%           0
-total-              -        3         1.74KB/s         594B   0%           0
trident_pvc_f..  43389        1         1.74KB/s         892B   0%           0
-total-              -        1         1.77KB/s         906B   0%           0
trident_pvc_f..  43389        1         1.77KB/s         906B   0%           0

参考及びリンク

ノードのネットワーク設定の更新

Red Hat OpenShift クラスタに Trident をインストールしてストレージオブジェクトを作成する

ONTAP backend drivers

実はかなり簡単?! NetApp Tridentを試してみる

Tridentでボリュームを払い出すプールを制御する(Storage Pool基礎編)

Tridentでボリュームを払い出すプールを制御する(Virtual Storage Pool編)

【今から覚えるONTAPの操作】NFS用のSVMを作成する

Kubernetes オブジェクトと Trident オブジェクト

ONTAP NAS configuration options and examples

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?