はじめに
初版: 2022年1月24日
2022/2/1 公開
「NetApp Astra Data Store」(以下ADS)は、仮想マシンとコンテナの統合データストアとして、クラウドのような柔軟性・拡張性を持った新しいソフトウェアデファインドストレージ(SDS)です。
従来のSDSでは難しかったエンタープライズレベルのデータ管理を実現し、スケーラブルで回復性のあるプラットフォームを提供します。
2022年1月現在では、ADSのプレビュー版をご提供しており、今後正式リリース予定のADSの機能を先行してお試しいただけます。
GA版は今年上半期中での提供を予定しており、Astra Control CenterからこのADSの管理ができる機能や、VMwareの管理プラグインなどをあわせてご提供する予定となっています。
ADSのClusterをストレージバックエンドとして使用するアプリケーションは、Astra Control Center(ACC)v21.12を使用して、データ保護、ディザスタリカバリ、Kubernetesワークロードの移行など、アプリケーションを意識したデータ管理機能を活用することができます。
関連投稿一覧
- NetApp Tridentとは
- NetApp Astra とは
- NetApp Astra Service を使ってみる ①GKE事前準備編
- NetApp Astra Service を使ってみる ②AKS事前準備編
- NetApp Astra Service を使ってみる ③UIの操作編
- NetApp Astra Control のインストール
- NetApp Astra Control を使ってみる ①UIの操作編
- NetApp Astra Data Store とは 【本投稿】
プレビュー版での制限
ADSは、エンタープライズグレードの耐障害性を実現するために設計・開発されていますが、本プレビュー版では本番環境のワークロードを対象としていません。(プレビュー版からGA版へのアップグレードもできません。)またGA版とパフォーマンスは異なりますのでご注意下さい。
ADS プレビュー版での制限は以下のとおりとなっています。
リソース | 制限 |
---|---|
ノード | 4ノード (1台追加し5台に増設することでスケールアウトをお試しいただけます) |
ノードあたりのPV数 | 最大10個まで |
ノードあたりのvCPUコア数 | 10vCPU以上 (9x ADS用(1x ADSコントロールプレーン + 8x ADS データプレーン) + 1x K8sオーバヘッド) |
クラスタあたりのvCPUコア | 45vCPU以上 |
ノードあたりの最大プロビジョニング容量 | 1TiB |
クラスタあたりの最大プロビジョニング容量 | 4TiB(1台増設した場合は、5TiB) |
ボリュームあたりの容量 | 20MiB〜1TiB |
ボリュームあたりのクローン数 | 9個 |
ボリュームあたりのSnapshot数 | 256個 |
※ vVol、QoS機能はプレビュー版ではサポートされません。 | |
※ ADSには、モニタリングのための Cloud Insightsの基本バージョンが含まれます。 | |
※ プレビュー版では、Astra Trident CSIドライバーを使用したKubernetesワークロードのPVのプロビジョニングのみがサポートされています。VMワークロードは今後のリリースでサポートされる予定です。 |
必要要件
ADSのインストールにあたり必要な要件は以下となっています。
必要要件 | |
---|---|
Astra Data Store のライセンスファイル | こちらから入手下さい |
Astra Data Store ソフトウェアバンドル | NetAppサポートサイトからダウンロードいただきます。 ダウンロード手順は、ライセンスファイルの取得手続き後に送付される案内に従い実施下さい。 |
K8sクラスタ | v1.20以上であること |
K8sクラスタ用クレデンシャル | ADSをK8sクラスタにインストールするためのクレデンシャル クラスタの管理者権限が必要です |
ADSを構成するノードのスペック |
【物理の場合】 |
Workerノードのディスク |
|
CSIドライバ | ストレージのプロビジョニングとオーケストレーションを行うために、K8sクラスタにAstra Tridentのv21.10.1を展開する必要があります。 |
CNI |
|
構成するノードのOS |
ホストのファイアウォール(firewalld)は無効にする必要があります。 |
必要なパッケージ | Workerノードには、nfs-utilsパッケージがインストールされている必要があります。 アプリケーションは、NFSv4.1で接続されるPVにアクセスしますが、これにはAUTH_SYS認証が必要となります。 |
ネットワークインタフェース | クラスタ、データ、および管理トラフィック用に、少なくとも1つの10GbE以上必要。管理トラフィックは、1GbEのインタフェースに分離できます。 |
IPアドレス | 各ノードに、管理ネットワークおよびストレージネットワーク用のIPv4アドレスを事前に設定します。
|
インターネットへの接続 | NetAppのAutoSupportという機能を使用し、インターネット経由でsupport.netapp.comにメトリクスデータを送信します。(プロキシ経由も可) プレビュー版では、インターネットへの接続が必須となります。 テレメトリが長期間無効になっている場合は、ADSが読み取り専用となります。 AutoSupportバンドルの送信に使用される設定は変更しないでください。定期的な AutoSupportバンドルの送信を無効にした場合は、その設定を再度有効にするまで新しいボリュームを作成できなくなります。 |
インストール手順
以下の手順に従って、ADS環境をセットアップします。
ソフトウェアバンドルの解凍
作業用端末上で、ダウンロードしたサポートバンドルの署名を確認し、問題なければ解凍します。
ソフトウェアバンドルには、以下が含まれています。
- コンテナイメージ
- kubectl-astrads バイナリ
- ADS構成仕様書/yamlファイル
ADSのインストールは、カスタムリソースに対してkubectlコマンドを使って、またはkubectl-astradsというプラグインを使って行われます。
$ openssl dgst -sha256 -verify 2021.12_astradatastore.pub -signature 2021.12_astradatastore.sig 2021.12_astradatastore.tar
$ mkdir 2021.12_astradatastore && cd 2021.12_astradatastore
$ tar -xvf ../2021.12_astradatastore.tar
kubectl-astrads バイナリファイル は、ADSをインストールして管理するために開発されたkubectlのカスタムエクステンションです。
このバイナリを K8sのkubectlバイナリがインストールされている標準パスにコピーします。
$ which kubectl
/usr/bin/kubectl
$ sudo cp -f bin/kubectl-astrads [上記kubectlが含まれるパスを指定 例)/usr/local/bin/]
イメージをローカルレジストリにプッシュ
イメージをローカルのレジストリにプッシュします。
$ export REGISTRY=[レジストリのURL:Port]
例: $ export REGISTRY=pregistry70.green.lab:5000
$ docker login $REGISTRY
$ for astraImageFile in $(ls images/*.tar) ; do
astraImage=$(docker load --input ${astraImageFile} | sed 's~Loaded image: ~~'); astraImageShort=`echo $astraImage | sed 's~.*/~~'`;
docker tag ${astraImage} ${REGISTRY}/${astraImageShort};
docker push ${REGISTRY}/${astraImageShort};
done
$ docker image ls
マニフェストファイルのパラメータ変更
manifests フォルダの配下には、以下のマニフェストのテンプレートが予め用意されています。
astradscluster.yaml
grafana_cluster.json
monitoring_operator.yaml
astradsoperator.yaml
astradsversion.yaml
grafana_volume.json
ファイル内の[YOUR REGISTRY]の部分を、前のステップでイメージをプッシュしたレジストリのパスに変更します。
例
$ export REGISTRY=pregistry70.green.lab:5000
$ cd manifests/
$ sed -i 's~\[YOUR REGISTRY\]~'${REGISTRY}'~' *.yaml
ADS Operatorのインストール
$ kubectl apply -f ./manifests/astradsoperator.yaml
namespace/astrads-system created
customresourcedefinition.apiextensions.k8s.io/astradsautosupports.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradscloudsnapshots.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsclusters.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsexportpolicies.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsfaileddrives.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradslicenses.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsnfsoptions.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsnodeinfoes.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsnodemanagements.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsqospolicies.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsversions.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsvolumefiles.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsvolumes.astrads.netapp.io created
customresourcedefinition.apiextensions.k8s.io/astradsvolumesnapshots.astrads.netapp.io created
role.rbac.authorization.k8s.io/astrads-astrads-system-admin-role created
role.rbac.authorization.k8s.io/astrads-astrads-system-reader-role created
role.rbac.authorization.k8s.io/astrads-astrads-system-writer-role created
role.rbac.authorization.k8s.io/astrads-leader-election-role created
role.rbac.authorization.k8s.io/astrads-manager-role created
clusterrole.rbac.authorization.k8s.io/astrads-astrads-admin-clusterrole created
clusterrole.rbac.authorization.k8s.io/astrads-astrads-reader-clusterrole created
clusterrole.rbac.authorization.k8s.io/astrads-astrads-writer-clusterrole created
clusterrole.rbac.authorization.k8s.io/astrads-astradsautosupport-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsautosupport-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradscloudsnapshot-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradscloudsnapshot-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradscluster-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradscluster-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsexportpolicy-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsexportpolicy-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsfaileddrive-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsfaileddrive-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradslicense-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradslicense-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnfsoption-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnfsoption-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnodeinfo-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnodeinfo-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnodemanagement-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsnodemanagement-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsqospolicy-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsversion-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsversion-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolume-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolume-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolumefile-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolumefile-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolumesnapshot-editor-role created
clusterrole.rbac.authorization.k8s.io/astrads-astradsvolumesnapshot-viewer-role created
clusterrole.rbac.authorization.k8s.io/astrads-manager-role created
rolebinding.rbac.authorization.k8s.io/astrads-astrads-admin-rolebinding created
rolebinding.rbac.authorization.k8s.io/astrads-astrads-reader-rolebinding created
rolebinding.rbac.authorization.k8s.io/astrads-astrads-writer-rolebinding created
rolebinding.rbac.authorization.k8s.io/astrads-leader-election-rolebinding created
rolebinding.rbac.authorization.k8s.io/astrads-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/astrads-astrads-admin-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/astrads-astrads-reader-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/astrads-astrads-writer-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/astrads-manager-rolebinding created
configmap/astrads-autosupport-cm created
configmap/astrads-firetap-cm created
configmap/astrads-kevents-asup created
configmap/astrads-metrics-cm created
secret/astrads-autosupport-certs created
deployment.apps/astrads-operator created
```
Podが起動したことを確認します。
```bash
$ kubectl get pods -n astrads-system
NAME READY STATUS RESTARTS AGE
astrads-operator-9ddfb8d7b-mb5cg 1/1 Running 0 50s
```
### ADSのインストール
ADSのコントロールプレーンをインストールします。
```bash
$ kubectl apply -f ./manifests/astradsversion.yaml
astradsversion.astrads.netapp.io/astradsversion created
```
Podが起動したことを確認します。
```bash
$ kubectl get pods -n astrads-system
NAME READY STATUS RESTARTS AGE
astrads-cluster-controller-85f6c86959-65f6l 1/1 Running 0 73s
astrads-ds-nodeinfo-astradsversion-2sskj 1/1 Running 0 84s
astrads-ds-nodeinfo-astradsversion-4vsng 1/1 Running 0 84s
astrads-ds-nodeinfo-astradsversion-jngtj 1/1 Running 0 84s
astrads-ds-nodeinfo-astradsversion-pkrsg 1/1 Running 0 84s
astrads-license-controller-7cbc9959c4-dnt6v 1/1 Running 0 75s
astrads-operator-9ddfb8d7b-mb5cg 1/1 Running 0 28m
```
### ADSライセンスの適用
サインアップの際に入手したADSのNetAppライセンスファイル(NLF)を適用します。
適用するためにはK8sのクラスタ名が必要になりますので、以下のコマンドで確認します。
```
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://10.128.211.70:6443
name: adskspraycluster <= K8sクラスタ名
contexts:
- context:
cluster: adskspraycluster
user: kubernetes-admin
name: kubernetes-admin@adskspraycluster
current-context: kubernetes-admin@adskspraycluster
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
```
ライセンスを適用します。
```zsh
$ kubectl astrads license add --license-file-path [ファイルのパス/ファイル名] --ads-cluster-name [ADSがインストールされたK8sクラスタ名] -n astrads-system
例:
$ kubectl astrads license add --license-file-path XXXXXXXXXX.txt --ads-cluster-name adskspraycluster -n astrads-system
Signature verified with key NETAPP_KEY
Successfully created XXXXXXXXXX
確認例:
$ kubectl get astradslicense -A
NAMESPACE NAME ADSCLUSTER VALID PRODUCT EVALUATION ENDDATE VALIDATED
astrads-system XXXXXXXXXX adskspraycluster true Astra Data Store true 2022-02-21 2022-01-22T10:44:51Z
$ kubectl astrads license list
NAME ADSCLUSTER VALID PRODUCT EVALUATION ENDDATE VALIDATED
XXXXXXXXXX adscluster true Astra Data Store true 2022-02-21 2022-01-22T10:44:51Z
```
### ADS Clusterのデプロイ
astradscluster.yaml ファイルを編集します。
```yaml:(例)astradscluster.yaml
$ vim manifests/astradscluster.yaml
(skip)
kind: AstraDSCluster
metadata:
name: adskspraycluster #...①
namespace: astrads-system
(skip)
# Specify the IP address of a floating management IP routable from any worker node in the cluster
mvip: "10.128.211.45" #...②
(skip)
adsDataNetworks: #...③
- addresses: "192.168.0.46,192.168.0.47,192.168.0.48,192.168.0.49"
netmask: 255.255.255.0
# [Optional] Specify the network interface names for either all or none
adsNetworkInterfaces: #...④
managementInterface: "ens192"
clusterInterface: "ens224"
storageInterface: "ens224"
(skip)
# [Optional] Provide a monitoring config to be used to setup/configure a monitoring agent.
# monitoringConfig: #...⑤
# namespace: "netapp-monitoring"
# repo: "pregistry70.green.lab:5000"
autoSupportConfig: #...⑥
```
以下の変更が必要です。
<b>① metadataセクションの「name」</b>
上記ライセンスの適用時に使用したクラスタ名と同じ名前である必要があります。
<b>② specセクションの「mvip」</b>
このIPアドレスは、クラスタ内のどのworkerノードからでもルーティング可能なフローティングIPである必要があります。
<b>③ specセクションの「adsDataNetworks」</b>
ボリュームをマウントする予定のホストからルーティング可能な、ストレージノードのIPアドレスとnetmaskをカンマ区切りで記入します。
<b>④ specセクションの「adsNetworkInterfaces」</b>
初期値は以下のような値が入っています。
`managementInterface: "mgmt"`
`clusterInterface: "data"`
`storageInterface: "data"`
それぞれの値を、管理ネットワーク、Clusterネットワーク、ストレージネットワークに使用されているネットワークインタフェース名に置き換えます。
* 名前が指定されていない場合は、ノードのプライマリインターフェースが管理、Cluster、およびストレージネットワークに使用されます。
* Clusterとストレージのネットワークは同じインターフェイスである必要があります。
* 管理インターフェースは、K8sノードの管理インターフェースと同じである必要があります。
<b>⑤ specセクションの「monitoringConfig」</b>
モニタリング用のエージェントをセットアップする場合は、モニタリングエージェントのNameSpace(デフォルトは「netapp-monitoring」)と、ローカルレジストリのパスを記載します。
<b>⑥ specセクションの「autoSupportConfig」</b>
AutoSupportのバンドルログの送付に関するパラメータです。
バンドルの送付にプロキシを使用しない場合は、デフォルトのままでOKです。
プロキシ経由の場合は、「proxyURL」に、AutoSupportバンドルの送付に使用するプロキシのURLを記載します。
ファイルの編集が完了したら、適用します。
```zsh
$ kubectl apply -f manifests/astradscluster.yaml
astradscluster.astrads.netapp.io/adskspraycluster created
```
ADS Clusterの作成には、10分程度かかります。
デプロイの進捗状況は、以下のコマンドで確認することができます。
```zsh
$ kubectl get events --field-selector involvedObject.kind=AstraDSCluster -n astrads-system
ADS Operatorが、ADS Clusterを構成する4台のノードのCPU/メモリ/ストレージ/ネットワークリソースのチェックを完了すると以下のメッセージが表示されます。
38m Normal ControlPlaneNodeSelectionSuccessful astradscluster/adskspraycluster Successfully selected 4 control plane nodes to join the ADS cluster: k8s-worker71,k8s-worker72,k8s-worker73,k8s-worker74
ADSコントローラが、ADS Clusterの作成を開始すると以下のメッセージが表示されます。
29m Normal ADSClusterCreateInProgress astradscluster/adskspraycluster ADS cluster create in progress
Clusterの作成が完了すると、以下のメッセージが表示されます。
6m14s Normal ADSClusterCreateSuccess astradscluster/adskspraycluster ADS cluster created
```
進捗状況は、以下のコマンドでも確認できます。
```zsh
$ kubectl describe astradscluster [cluster名] -n astrads-system
```
Clusterの作成完了のメッセージを確認したら、Podが動作しているかを確認します。
```zsh
$ kubectl get pods -n astrads-system
NAME READY STATUS RESTARTS AGE
astrads-cluster-controller-85f6c86959-65f6l 1/1 Running 0 21h
astrads-deployment-support-d6dc48646-t5z9v 3/3 Running 0 10m
astrads-ds-adskspraycluster-9lwdg 1/1 Running 0 7m
astrads-ds-adskspraycluster-b972t 1/1 Running 0 6m45s
astrads-ds-adskspraycluster-fd629 1/1 Running 0 6m49s
astrads-ds-adskspraycluster-pnz5d 1/1 Running 0 6m45s
astrads-ds-nodeinfo-astradsversion-2sskj 1/1 Running 0 21h
astrads-ds-nodeinfo-astradsversion-4vsng 1/1 Running 0 21h
astrads-ds-nodeinfo-astradsversion-jngtj 1/1 Running 0 21h
astrads-ds-nodeinfo-astradsversion-pkrsg 1/1 Running 0 21h
astrads-ds-support-5sq56 2/2 Running 0 10m
astrads-ds-support-dqjpv 2/2 Running 0 10m
astrads-ds-support-jtzx8 2/2 Running 0 10m
astrads-ds-support-xfqfd 2/2 Running 0 10m
astrads-license-controller-7cbc9959c4-dnt6v 1/1 Running 0 21h
astrads-operator-9ddfb8d7b-mb5cg 1/1 Running 0 22h
```
以下のコマンドで、Clusterの「STATUS」が「created」 となっていることを確認します。
```zsh
$ kubectl get astradscluster -n astrads-system
NAME STATUS VERSION SERIAL NUMBER MVIP AGE
adskspraycluster created 2021.10.0 i000000036 10.128.211.45 35m
```
Clusterの「STATUS」が、しばらく経っても空欄のままで「in progress」に変わらない場合は、以下のコマンドでOperatorのログを確認してください。
```zsh
$ kubectl logs -n astrads-system [ADS OperatorのPod名 例:astrads-operator-9ddfb8d7b-mb5cg]
```
Clusterの「STATUS」が「in progress」のままスタックしていると思われる場合は、以下のコマンドでOperatorのログを確認してください。
```zsh
$ kubectl logs -n astrads-system [ADS ControllerのPod名 例:astrads-cluster-controller-85f6c86959-65f6l]
```
### ADSの監視設定
ADSは、Astra Control Center(ACC)や別のモニタリングサービスによるモニタリングが可能です。
ACCでADSをバックエンドとして管理する場合の手順は以下のように実施します。
```zsh
$ kubectl astrads monitoring -m netapp-monitoring -r [ローカルレジストリのパス] setup
```
ACCでADSをバックエンドとして管理せずにスタンドアロンで動作させる場合に、Cloud InsightsやElasticなどサードパーティを用いて監視を行う場合は、monitoring_operator.yaml ファイルを適用することでリモート監視の設定が可能です。
```zsh
$ kubectl apply -f ./manifests/monitoring_operator.yaml
$ kubectl astrads monitoring -m netapp-monitoring -r [ローカルレジストリのパス] setup
```
### Astra Tridentのインストール
ADSのセットアップが完了したら、次はAstra Tridentをインストールします。
ADSプレビュー版では、Astra Trident 21.10.1 をインストールする必要があります。
Astra Tridentは、Trident Operatorを使用してインストールを行います。
[TridentのGitHubのページ](https://github.com/NetApp/trident/releases/download/v21.10.1/trident-installer-21.10.1.tar.gz)より、インストーラをダウンロードし、helmを使ってインストールします。Helm Chartは、/helm配下にあります。
```zsh
$ helm install [Helm release object名] trident-operator-21.10.1.tgz --namespace [Trident用のNameSpace] --create-namespace
例:
$ helm install trident trident-operator-21.10.1.tgz --namespace trident --create-namespace
```
Podが起動したことを確認します。
```zsh
$ kubectl get pod -n trident
NAME READY STATUS RESTARTS AGE
trident-csi-4j4fr 2/2 Running 0 4m9s
trident-csi-5b47cc6bf-d2qbs 6/6 Running 0 4m9s
trident-csi-ndz5d 2/2 Running 0 4m9s
trident-csi-rjppj 2/2 Running 0 4m9s
trident-csi-tzx2c 2/2 Running 0 4m9s
trident-csi-w7v7x 2/2 Running 0 4m9s
trident-operator-5fb5dbc487-wckhz 1/1 Running 0 4m26s
```
### K8s SnapshotのCRDとコントローラをインストール
Volume Snapshotの作成には、K8sのSnapshot CRDと Snapshotコントローラが必要です。
お使いの環境にSnapshot CRDとコントローラがインストールされていない場合は、以下のコマンドを実行します。
* [CRDのyamlファイル](https://github.com/kubernetes-csi/external-snapshotter/tree/master/client/config/crd)を適用します。
```zsh
$ kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/blob/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotclasses.snapshot.storage.k8s.io created
$ kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/blob/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshotcontents.snapshot.storage.k8s.io created
$ kubectl apply -f https://github.com/kubernetes-csi/external-snapshotter/blob/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
customresourcedefinition.apiextensions.k8s.io/volumesnapshots.snapshot.storage.k8s.io created
$ kubectl get crd | grep volumesnapshot
astradsvolumesnapshots.astrads.netapp.io 2022-01-21T16:28:59Z
volumesnapshotclasses.snapshot.storage.k8s.io 2022-01-22T16:13:39Z
volumesnapshotcontents.snapshot.storage.k8s.io 2022-01-22T16:14:26Z
volumesnapshots.snapshot.storage.k8s.io 2022-01-22T16:14:35Z
```
* [Snapshotコントローラのyamlファイル](https://github.com/kubernetes-csi/external-snapshotter/tree/master/deploy/kubernetes/snapshot-controller) を適用し、snapshotコントローラ を作成します。 NameSpaceは、デフォルトでdefault NameSpaceを使用するようになっていますので、適用する前にファイル内のNameSpaceの記述を編集しておきます。
```zsh
$ kubectl apply -f setup-snapshot-controller.yaml
statefulset.apps/snapshot-controller created
$ kubectl apply -f trident/rbac-snapshot-controller.yaml
serviceaccount/snapshot-controller created
clusterrole.rbac.authorization.k8s.io/snapshot-controller-runner created
clusterrolebinding.rbac.authorization.k8s.io/snapshot-controller-role created
role.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
rolebinding.rbac.authorization.k8s.io/snapshot-controller-leaderelection created
$ kubectl get pods -A | grep snapshot
snapshot-controller snapshot-controller-0 1/1 Running 0 2m2s
```
### ADSをストレージバックエンドとして設定
ads_backend.json ファイルを編集し、ストレージバックエンドのパラメーターを設定します。
```json:例)ads_backend.json
{
"version": 1,
"storageDriverName": "astrads-nas",
"storagePrefix": "",
"cluster": "adskspraycluster", #...①
"namespace": "astrads-system", #...②
"autoExportPolicy": true,
"autoExportCIDRs": ["0.0.0.0/0"], #...③
"kubeconfig":<以下の④の方法で作成した文字列>,
"debugTraceFlags": {"method": true, "api": true},
"labels": {"cloud": "on-prem", "creator": "trident-dev"},
"defaults": {
"qosPolicy": "bronze"
},
"storage": [
{
"labels": {
"performance": "extreme"
},
"defaults": {
"qosPolicy": "bronze"
}
},
{
"labels": {
"performance": "premium"
},
"defaults": {
"qosPolicy": "bronze"
}
},
{
"labels": {
"performance": "standard"
},
"defaults": {
"qosPolicy": "bronze"
}
}
]
}
```
①「cluster」の値をADSクラスタのクラスタ名に変更します。
②「namespace」の値を、ボリューム作成時に使用するNameSpaceに変更します。
③「autoExportCIDRs」に、アクセスを許可したいIPアドレスを入力します。「0.0.0.0/0」はすべて許可します。
④「kubeconfig」の値は、以下のようにします。
~/.kube/configファイルを、スペースを含まないjson形式に変換します。
```zsh
$ python3 -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=None)' < [kubeconfigのファイルパス] > kubeconf.json
```
base64でエンコードし、そのbase64出力を「kubeconfig」の値に使用します。
```zsh
$ cat kubeconf.json | base64 | tr -d '\n'
```
バックエンドを作成します。
```zsh
$ tridentctl create backend -f ads_backend.json -n trident
+------------------+----------------+--------------------------------------+--------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | VOLUMES |
+------------------+----------------+--------------------------------------+--------+---------+
| adskspraycluster | astrads-nas | 342ca3d1-3589-4760-b5c1-abfe1b436135 | online | 0 |
+------------------+----------------+--------------------------------------+--------+---------+
```
### ADS のStorageClassを作成
StorageClass用のyamlファイルを作成し、適用します。
```yaml:ads_sc_generic.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: trident-csi
provisioner: csi.trident.netapp.io
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- vers=4
```
```zsh
$ kubectl create -f ads_sc_generic.yaml
storageclass.storage.k8s.io/trident-csi created
$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
trident-csi csi.trident.netapp.io Delete Immediate true 72s
```
### volumesnapshotclassを作成
volumesnapshotclass用のyamlファイルを作成し、適用します。
```yaml:volumesnapshotclass.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete
```
```zsh
$ kubectl apply -f volumesnapshotclass.yaml -n snapshot-controller
volumesnapshotclass.snapshot.storage.k8s.io/csi-snapclass created
```
ここまでで、ADSのセットアップは完了です。
# まとめ
本投稿では、ADSのセットアップの手順をご紹介しました。
プレビュー版ということもあり、コマンドラインでの操作が少し煩雑な印象もあるかと思いますが、できる限りシンプルなものとなるよう予定しています。
ぜひ今後にご期待いただければと思います。