はじめに
- 前々回の記事でAmazon EKSで使えるPersistentVolumeについて調べて、前回の記事で検証するための環境を準備した。
- 今回は、PersistentVolumeのバックエンドとしてAmazon FSx for NetApp ONTAP(以下、FSx for ONTAP)を使ってみる。
- 今できている環境はこんな感じ。
やってみた
Astra Tridentのインストール
まずはインストール方法の確認
- FSx for ONTAPをKubernetes側から扱うためのCSI driverはNetAppが提供するAstra Tridentというもの。まずはこれをインストールする必要がある。
- Astra TridentはKubernetesクラスター上にPodとしてデプロイされる。
-
インストール方法は以下の3通り。今回は3つ目のHelmでインストール。
- 手動でtridentctlを用いたイントール
- 手動でTrident Operatorを用いたインストール
- HelmでTrident Operatorを用いたインストール
いざ、インストール
- Trident用のNamespaceを作成。
$ kubectl create ns trident namespace/trident created
-
GitHubからインストーラをダウンロード(今回はv21.10.1)
$ wget https://github.com/NetApp/trident/releases/download/v21.10.1/trident-installer-21.10.1.tar.gz --2022-04-08 12:59:20-- https://github.com/NetApp/trident/releases/download/v21.10.1/trident-installer-21.10.1.tar.gz Resolving github.com (github.com)... 52.192.72.89 Connecting to github.com (github.com)|52.192.72.89|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/77179634/4ec45234-8d16-4b89-bbe3-5307e5253b30?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220408%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220408T125920Z&X-Amz-Expires=300&X-Amz-Signature=e92ca56462e8b30bf091c71ff9605828e7aa8a2655df4d4e0c24151942a4e0a4&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=77179634&response-content-disposition=attachment%3B%20filename%3Dtrident-installer-21.10.1.tar.gz&response-content-type=application%2Foctet-stream [following] --2022-04-08 12:59:20-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/77179634/4ec45234-8d16-4b89-bbe3-5307e5253b30?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220408%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220408T125920Z&X-Amz-Expires=300&X-Amz-Signature=e92ca56462e8b30bf091c71ff9605828e7aa8a2655df4d4e0c24151942a4e0a4&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=77179634&response-content-disposition=attachment%3B%20filename%3Dtrident-installer-21.10.1.tar.gz&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 56666622 (54M) [application/octet-stream] Saving to: ‘trident-installer-21.10.1.tar.gz’ 100% [==============================================================================================================================>] 56,666,622 12.1MB/s in 4.3s 2022-04-08 12:59:25 (12.5 MB/s) - ‘trident-installer-21.10.1.tar.gz’ saved [56666622/56666622]
- インストーラを解凍。
$ tar xzf trident-installer-21.10.1.tar.gz
-
tridentctl
のPATHを通す。$ sudo install -m 0755 -o root -g root ./trident-installer/tridentctl /usr/local/bin/
- Astra Tridentのインストール。
$ helm install -n trident trident trident-installer/helm/trident-operator-21.10.1.tgz W0408 13:01:55.315542 2776 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ W0408 13:01:55.428274 2776 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ NAME: trident LAST DEPLOYED: Fri Apr 8 13:01:55 2022 NAMESPACE: trident STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI storage provisioner for Kubernetes. Your release is named 'trident' and is installed into the 'trident' namespace. Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster. To configure Trident to manage storage resources, you will need a copy of tridentctl, which is available in pre-packaged Trident releases. You may find all Trident releases and source code online at https://github.com/NetApp/trident. To learn more about the release, try: $ helm status trident $ helm get all trident
- インストール後の確認
$ helm list -n trident NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION trident trident 1 2022-04-08 13:01:55.102086329 +0000 UTC deployed trident-operator-21.10.1 21.10.1
- デプロイされたリソースの確認。
$ kubectl get pod -n trident NAME READY STATUS RESTARTS AGE trident-csi-7bf5df78bd-bpfvx 6/6 Running 0 75s trident-csi-z5f8d 2/2 Running 0 75s trident-operator-649cb957df-xtgpr 1/1 Running 0 92s
- インストール完了。
バックエンドの設定
まずは設定内容の確認
- バックエンドの設定はバックエンドコンフィグで行う。
-
Astra Tridentで提供されるドライバは色々あるが、今回は
ontap-nas
を使う。 - バックエンドの認証方法もID/Password方式と証明書ベースの方式の2パターンがあるが、今回はID/Password方式で認証する。
- IDはデフォルトで作られているSVM管理者ユーザー
vsadmin
、PasswordはFSx for ONTAPの作成時に設定したもの。 - 後、必要なのはストレージの管理用IPアドレス。今回はDNS名で設定。AWSマネジメントコンソールで確認する場合はここ。
いざ、バックエンドの設定
- バックエンドコンフィグファイルを作成。
$ vi fsx-backend.json
{ "version": 1, "backendName": "fsx_backend", "storageDriverName": "ontap-nas", "managementLIF": "svm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fsx.ap-northeast-1.amazonaws.com", "svm": "st-eks-test-svm1", "username": "vsadmin", "password": "Netapp1!" }
-
tridentctl
コマンドを使用してバックエンドの設定。$ tridentctl create backend -n trident -f fsx-backend.json +-------------+----------------+--------------------------------------+--------+---------+ | NAME | STORAGE DRIVER | UUID | STATE | VOLUMES | +-------------+----------------+--------------------------------------+--------+---------+ | fsx_backend | ontap-nas | 8409e2ca-456d-4a0f-a586-a7bb38eac36b | online | 0 |
- できた。
StorageClassの作成
- マニフェストファイルを作成。
vi fsx-sc.yaml
apiVersion: v1 kind: StorageClass metadata: name: fsx-sc parameters: backendType: ontap-nas provisioner: csi.trident.netapp.io
- StorageClassを作成。
$ kubectl apply -f fsx-sc.yaml storageclass.storage.k8s.io/fsx-sc created
- StorageClassを確認。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE fsx-sc csi.trident.netapp.io Delete Immediate false 2m48s gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 40m
- 元々あった
gp2
がデフォルトになっているので、デフォルトのStorageClassを変更。$ kubectl annotate storageclass gp2 storageclass.kubernetes.io/is-default-class=false --overwrite storageclass.storage.k8s.io/gp2 annotated
$ kubectl annotate storageclass fsx-sc storageclass.kubernetes.io/is-default-class=true --overwrite storageclass.storage.k8s.io/fsx-sc annotated
- デフォルトのStorageClassを変更できたか確認。
$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE fsx-sc (default) csi.trident.netapp.io Delete Immediate false 9m23s gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 47m
- これで管理者側の作業は完了。
PersistentVolume作成
-
マニフェストファイルを作成する。
$ vi fsx-pvc.yaml
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myvolume spec: accessModes: - ReadWriteMany storageClassName: fsx-sc resources: requests: storage: 10Gi
-
PersistentVolumeClaimを作成。
$ kubectl apply -f fsx-pvc.yaml persistentvolumeclaim/myvolume created
-
PersistentVolumeClaimを確認。
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myvolume Bound pvc-bfbecd75-fa76-463d-86cd-6756475fbc81 10Gi RWX fsx-sc 2m6s
-
PersistentVolumeを確認。
$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-bfbecd75-fa76-463d-86cd-6756475fbc81 10Gi RWX Delete Bound default/myvolume fsx-sc 2m10s
-
できた。
まとめ
- とりあえずAmazon EKSのPersistentVolumeの一連のシリーズは完結。
- 頑張った。