NetApp Astra Control のインストール

初版: 2021年8月7日
2021/10/3,2022/2/2 新しい記事のリンクを追加、前提条件のアップデート
2021/1/7 ACC v21.12 に対応

# はじめに  
Astra Contro Centerは、オンプレミスでのK8sアプリケーションのデータのライフサイクルを管理するためのソリューションです。
ステートフルなワークロードのデータ保護、バックアップ、移行を容易にし、運用負荷を低減します。
本投稿は、Astra Controlのインストールについて記載しています。

#### 関連投稿一覧
* [NetApp Tridentとは](https://qiita.com/star76/items/fa88d715192f565e5832) 
* [NetApp Astra とは](https://qiita.com/star76/items/86c1df804fc762b22d8e) 
* [NetApp Astra Service を使ってみる ①GKE事前準備編](https://qiita.com/star76/items/4ec78181db97d0f52eb8) 
* [NetApp Astra Service を使ってみる ②AKS事前準備編](https://qiita.com/star76/items/4a2999590fd657082254) 
* [NetApp Astra Service を使ってみる ③Astra UI操作編](https://qiita.com/star76/items/1bb428404b6eb4337dd4) 
* [NetApp Astra Control のインストール](https://qiita.com/star76/items/84b1d0732e8ce2dbf4cc) 【本投稿】
* [NetApp Astra Control を使ってみる ①UIの操作編](https://qiita.com/star76/items/a746fdb78d07c32ef1bc) 
* [NetApp Astra Data Store とは](https://qiita.com/star76/items/ef8e809d9cad24d51e8e) 


# 前提条件
ACCのインストールには、以下が必要となります。

## ACCをデプロイする環境の必要要件
| 準備するもの | 詳細 | 
|:---------------|------------------|
| NetAppストレージ<br>(ACCの管理データの保存先) | <ul><li>ONTAP バージョン 9.5以上、またはAstra Data Store(ADS) ※GA版は2022年春頃リリース予定</li> <li>300GB以上の空き容量</li><li>ONTAPストレージおよびADSは、事前にNetApp Tridentにてバックエンドとして登録しておく必要があります</li><li>ONTAPストレージおよびADSをバックエンドとしたデフォルトのStorageClassを作成しておく必要があります</li><li>(OpenShiftの場合) ACCは、アプリケーションのCloneを行う際に、必要に応じてファイルの所有権を変更できるようONTAPストレージにスーパーユーザとユーザIDが設定されている必要があります。<br>以下のコマンド実行します。<br>export-policy rule modify -vserver <storage virtual machine name> -policyname <policy name> -ruleindex 1 -superuser sysm --anon 65534 (デフォルト値)</li></ul>|
|ACCを展開するK8sクラスタ|<ul><li>Red Hat OpenShift Container Platform4.4.8/4.7/4.8、Rancher2.5、Kubernetes1.19-1.21(1.21x含む)該当クラスタのkubeconfig</li><li>3つ以上のコントローラノード: 4CPU、16GB RAM、120GBディスク容量</li><li>3つ以上のWorkerノード：12CPU、32GB RAM、50GBディスク容量</li><li>ボリュームスナップショットCRDとボリュームスナップショットコントローラ(snapshot-controller)がインストールされていること</li><li>Astra Trident v21.10.1以降がインストールされていること</li><li>WebUIのPodに外部からアクセスするためのロードバランサ<br>ACCは、LoadBalancerタイプのサービス (svc名:traefik) 作成します<br>MetalLBの設定方法は[こちら](https://docs.netapp.com/us-en/netapp-solutions/containers/rh-os-n_LB_MetalLB.html)を参照ください</li><li>内部DNSサーバを使用している場合は、ローカル端末からACCにFQDNでアクセスするために、DNSレコードを登録しておく必要があります。(ローカル端末の/etc/hostsエントリでも可)|
|イメージ格納用のプライベートレジストリ|ACCのイメージをPushするためのプラベートイメージレジストリ|
|(オプション) オブジェクトストレージ|AWS S3、AWS S3互換ストレージ、NetApp StorageGrid、OntapS3 など<br>(互換ストレージは全ての機能に対応しない場合があります)|
|ACCライセンス|[こちら](https://cloud.netapp.com/astra-register )より入手(self-managed softwareの方を選択ください)、もしくは営業担当にお問い合わせください|

## ACCで管理するK8sクラスタの必要要件
| 準備するもの | 詳細 | 
|:---------------|------------------|
|NetAppストレージ<br>(アプリケーションのPVの保存先)|ONTAP バージョン 9.5以上<br>※ ONTAPストレージは、事前にNetApp Tridentにてバックエンドとして登録しておく必要があります<br>※ ONTAPストレージをバックエンドとしたデフォルトのStorageClassを作成しておく必要があります
|ACCに登録するK8sクラスタ|<ul><li>Red Hat OpenShift Container Platform4.4.8/4.7/4.8、Rancher2.5、Kubernetes1.19-1.21(1.21x含む)</li><li>該当クラスタのkubeconfig</li><li>管理対象の各Workerノードにもプライベートレジストリの証明書がインストールされている必要があります。インストールされていない場合は、Backup/Cloneが失敗します。</li></ul>|

## ネットワーク・その他の要件
| プロダクト | ポート | プロトコル | 方向 | 用途 |
|:---------------|------------------|------------------|------------------|------------------|
|ACC|443|HTTPS|Ingress|UI/APIアクセス<br>Port443が、ACCをホストしているクラスタと各管理対象クラスタの間で双方向に開いていることが必要|
|ACC|9090|HTTPS|Ingress (ACCをホストしているクラスターへ)<br>Egress（各管理対象クラスタの各workerノードのノードIPアドレスからのランダムポート）|メトリクスデータの送信<br>各管理対象クラスタがACCをホストしているクラスタの9090ポートにアクセスできることが必要|
|Trident|34571|HTTPS|Ingress|Node-Pod通信|
|Trident|9220|HTTP|Ingress|メトリクスエンドポイント|

ACCでは、デフォルトのストレージクラスを設定する必要があります。
ACCでは、Astra Tridentが提供する以下のドライバをサポートしています。

| ドライバ | プロトコル |
|:---------------|:---------------|
|ontap-nas| NFS |
|ontap-nas-flexgroup|NFS|
|ontap-san|iSCSI|
|ontap-san-economy|iSCSI|


# セットアップ手順
以下にAstra Control Center をセットアップする流れを記載します。

## Astra Control のイメージバンドルをダウンロード
[NetAppのサポートサイトのダウンロードページ](https://mysupport.netapp.com/site/products/all) から「Astra」というキーワードで検索し、「Astra Control Center」のページに移動してソフトウェアをダウンロードします。
![Screen Shot 2022-01-06 at 16.20.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/dcf0d0f3-2f4e-f015-c2ec-7ed19455c3f0.png)
kubectlコマンドを実行する端末に、ダウンロードしたソフトウェアを解凍します。

```bash
$ tar -vxzf astra-control-center-[Astraのバージョン].tar.gz
$ cd astra-control-center-[Astraのバージョン]
```

## ダウンロードしたイメージをローカルレジストリに格納
ダウンロードしたバンドルの中には、3つのCustom Resource Definition(CRD)のYAMLファイルとイメージが格納されています。
まずは、ダウンロードしたイメージをローカルのレジストリにPushします。
ここでは、ローカルレジストリのパスは、pregistry11.green.lab:5000 を使用しています。

```bash
$ export REGISTRY=pregistry11.green.lab:5000
$ sudo docker login $REGISTRY

for astraImageFile in $(ls images/*.tar) ; do
   astraImage=$(sudo docker load --input ${astraImageFile} | sed 's/Loaded image: //') 
   sudo docker tag ${astraImage} ${REGISTRY}/${astraImage} 
   sudo docker push ${REGISTRY}/${astraImage} 
done

$ sudo docker images
Pushしたイメージが表示されます
```

## Astra Control Operator のインストール
Astra Control Center のインストールの前に、Astra Control Operatorと呼ばれるリソースを作成します。

#### Astra Control Operator 用のNameSpaceを作成
まずは、Astra Control Operator用のNameSpaceとSecretを作成します。

```bash
$ kubectl create ns netapp-acc-operator
namespace/netapp-acc-operator created
```
```bash
$ kubectl create secret docker-registry astra-registry-cred -n netapp-acc-operator --docker-server=pregistry11.green.lab:5000 --docker-username=[プライベートレジストリのログインユーザ名] --docker-password=[プライベートレジストリのログインパスワード]
secret/astra-registry-cred created
```

#### Astra Control Operator の設定ファイルの編集
astra_control_center_operator_deploy.yaml の以下の部分を編集します。

* spec.template.spec.container[kube-rbac-proxy].image の「ASTRA_IMAGE_REGISTRY」の値をローカルレジストリのパスに変更します。  

```yaml
[変更前] 
image: ASTRA_IMAGE_REGISTRY/kube-rbac-proxy:v4.8.0

[サンプル] 
image: pregistry11.green.lab:5000/kube-rbac-proxy:v4.8.0
```  

* spec.template.spec.container[acc-operator].image の「ASTRA_IMAGE_REGISTRY」の値をローカルレジストリのパスに変更します。  

```yaml
[変更前] 
image: ASTRA_IMAGE_REGISTRY/acc-operator:21.10.19

[サンプル] 
image: pregistry11.green.lab:5000/acc-operator:21.10.19
```

* spec.imagePullSecretsの値を以下のサンプルのように「astra-registry-cred」に変更します。 (Secretを使用しない場合は削除)  

```yaml
[変更前] 
imagePullSecrets: []

[変更後] 
imagePullSecrets:
- name <ローカルレジストリ用のSecret名>
      
[サンプル] 
imagePullSecrets:
- name "astra-registry-cred"
```


#### Astra Control Operator のインストール
Astra Control Operatorをインストールします。

```bash
$ kubectl apply -f astra_control_center_operator_deploy.yaml
namespace/netapp-acc-operator created
customresourcedefinition.apiextensions.k8s.io/astracontrolcenters.astra.netapp.io created
role.rbac.authorization.k8s.io/acc-operator-leader-election-role created
clusterrole.rbac.authorization.k8s.io/acc-operator-manager-role created
clusterrole.rbac.authorization.k8s.io/acc-operator-metrics-reader created
clusterrole.rbac.authorization.k8s.io/acc-operator-proxy-role created
rolebinding.rbac.authorization.k8s.io/acc-operator-leader-election-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/acc-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/acc-operator-proxy-rolebinding created
configmap/acc-operator-manager-config created
service/acc-operator-controller-manager-metrics-service created
deployment.apps/acc-operator-controller-manager created
```

netapp-acc-operator namespaceに、Podが起動したのを確認します。

```bash
$ kubectl get pods -n netapp-acc-operator
NAME                                              READY   STATUS    RESTARTS   AGE
acc-operator-controller-manager-79449fb54-crd85   2/2     Running   0          3m33s
```


## Astra Control Center のインストール

#### Astra Control Center 用のNameSpaceを作成
Astra Control Center用のNameSpaceとSecretを作成します。

```bash
$ kubectl create ns netapp-acc
namespace/netapp-acc created
```
```bash
[サンプル]
$ kubectl create secret docker-registry astra-registry-cred -n netapp-acc --docker-server=pregistry11.green.lab:5000 --docker-username=[プライベートレジストリのログインユーザ名] --docker-password=[プライベートレジストリのログインパスワード]
secret/astra-registry-cred created
```

#### Astra Control Center の設定ファイルの編集

astra_control_center_min.yaml の以下の部分を編集します。

* spec.astraVersion: Astraのバージョンを記入
* spec.astraAddress: Astra にアクセスするためにブラウザで使用するFQDNに変更
* spec.autoSupport: インターネットに接続されていないサイトの場合は、enrolled=falseに変更
* spec.email: 管理者のメールアドレスを入力
* spec.imageRegistry.name: イメージをプッシュしたレジストリのパスに変更
* spec.imageRegistry.secret: レジストリの認証情報を含むk8s secretに変更。(Secretを使用しない場合は削除)

```yaml:astra_control_center_min.yaml
[サンプル]
apiVersion: astra.netapp.io/v1
kind: AstraControlCenter
metadata:
  name: astra
spec:
  accountName: "Example"
  astraVersion: "21.12.60"
  astraAddress: "greenlab.astra.netapp.io"
  autoSupport:
    enrolled: true
  email: "midorio@netapp.com"
  firstName: "Midori"
  lastName: "Oge"
  imageRegistry:
    name: "pregistry11.green.lab:5000"
    secret: "astra-registry-cred"
```

#### Astra Control Center のインストール
Astra Control Centerをインストールします。

```bash
$ kubectl apply -f astra_control_center_min.yaml -n netapp-acc
astracontrolcenter.astra.netapp.io/astra created
```

STATUSが全てRunningとなったことを確認します。(10分程度かかります)

```bash
$ kubectl get pods -n netapp-acc
NAME                                       READY   STATUS    RESTARTS   AGE
NAME                                       READY   STATUS    RESTARTS   AGE
acc-helm-repo-7f5c474976-qdmxm             1/1     Running   0          11m
activity-7f858dcbcb-fj97n                  1/1     Running   0          7m7s
api-token-authentication-fklsp             1/1     Running   0          7m38s
api-token-authentication-lmnfh             1/1     Running   0          7m38s
api-token-authentication-nlfgz             1/1     Running   0          7m38s
asup-6bc77bb6db-kgc8q                      1/1     Running   0          7m23s
authentication-5c9dfb679d-zkwl6            1/1     Running   0          6m13s
bucketservice-68776ddd9b-28p58             1/1     Running   0          7m25s
cert-manager-6f6575d578-rg9mk              1/1     Running   0          63s
cert-manager-cainjector-f48957988-c95z7    1/1     Running   0          63s
cert-manager-webhook-c9867676-vztmd        1/1     Running   0          63s
cloud-extension-6444468547-xw44c           1/1     Running   0          7m9s
cloud-insights-service-785d59cbc7-gsczz    1/1     Running   2          7m35s
composite-compute-84b8444469-h7h86         1/1     Running   0          7m28s
composite-volume-fb99bcb97-smgmf           1/1     Running   0          7m13s
credentials-795ff94f95-nc4rt               1/1     Running   0          7m11s
entitlement-5848dc8cdc-4g8hq               1/1     Running   0          7m19s
features-847bd5859f-zlpc8                  1/1     Running   0          7m33s
fluent-bit-ds-2dwmt                        1/1     Running   0          5m52s
fluent-bit-ds-7hd9p                        1/1     Running   0          5m52s
fluent-bit-ds-lc2cw                        1/1     Running   0          5m52s
fluent-bit-ds-pjlb8                        1/1     Running   0          5m52s
fluent-bit-ds-r8gjv                        1/1     Running   0          5m52s
fluent-bit-ds-xqmdr                        1/1     Running   0          5m52s
graphql-server-6bbbb9b549-55wx8            1/1     Running   0          5m45s
identity-7c8df44768-8wkw6                  1/1     Running   0          7m15s
influxdb2-0                                1/1     Running   0          10m
krakend-b7bd66976-2rjvt                    1/1     Running   0          5m37s
license-779cb8bff7-p55nc                   1/1     Running   0          7m1s
login-ui-577c49df76-965l8                  1/1     Running   0          5m42s
loki-0                                     1/1     Running   0          10m
monitoring-operator-6f5c9bbd8-wtqdn        2/2     Running   0          6m5s
nats-0                                     1/1     Running   0          10m
nats-1                                     1/1     Running   0          10m
nats-2                                     1/1     Running   0          10m
nautilus-8cf5f8f49-5vv7n                   1/1     Running   0          2m41s
nautilus-8cf5f8f49-6ztzb                   1/1     Running   0          7m21s
openapi-766b95cb96-84c6z                   1/1     Running   0          7m44s
polaris-consul-consul-25pc7                1/1     Running   0          10m
polaris-consul-consul-49bm5                1/1     Running   0          10m
polaris-consul-consul-js27g                1/1     Running   0          10m
polaris-consul-consul-server-0             1/1     Running   0          10m
polaris-consul-consul-server-1             1/1     Running   0          10m
polaris-consul-consul-server-2             1/1     Running   0          10m
polaris-mongodb-0                          2/2     Running   0          10m
polaris-mongodb-1                          2/2     Running   0          9m42s
polaris-mongodb-2                          2/2     Running   0          8m55s
polaris-ui-84b54b87cc-2gr24                1/1     Running   0          5m31s
polaris-vault-0                            1/1     Running   0          10m
polaris-vault-1                            1/1     Running   0          10m
polaris-vault-2                            1/1     Running   0          10m
public-metrics-775d95d754-chnrr            1/1     Running   1          7m46s
storage-backend-metrics-6d4b78bd85-cjddz   1/1     Running   0          7m3s
storage-provider-bdd5685c4-fpnr8           1/1     Running   0          7m42s
telegraf-ds-6zc76                          1/1     Running   0          5m52s
telegraf-ds-7zb5z                          1/1     Running   0          5m52s
telegraf-ds-fxdmq                          1/1     Running   0          5m52s
telegraf-ds-gldj5                          1/1     Running   0          5m52s
telegraf-ds-jx529                          1/1     Running   0          5m52s
telegraf-ds-pd2wt                          1/1     Running   0          5m52s
telegraf-rs-bvq44                          1/1     Running   0          5m52s
telemetry-service-5c4d549c78-b2hbg         1/1     Running   0          7m17s
tenancy-5bc74bf9f5-k7n67                   1/1     Running   0          7m40s
traefik-5d795d96cc-8qrxr                   1/1     Running   0          109s
traefik-5d795d96cc-h55tw                   1/1     Running   0          94s
trident-svc-7df87f9cf6-bx7x6               1/1     Running   0          7m30s
vault-controller-fc55bc469-md4wq           1/1     Running   0          7m57s
```

## インストール完了確認
以下のコマンドでインストールのログを確認します。

```bash
$  kubectl logs deploy/acc-operator-controller-manager -n netapp-acc-operator -c manager -f

以下の「Successfully Reconciled AstraControlCenter」メッセージが出ていればインストールは完了しています。
{"level":"info","timestamp":"2022-01-07T05:03:59.550Z","logger":"acc.controllers.AstraControlCenterReconciler","msg":"Successfully Reconciled AstraControlCenter in 305.639µs","AstraControlCenter":"netapp-acc/astra","reconcileType":"NoOp"}
```
また以下を実行し、

```bash
$ kubectl get acc -o yaml -n netapp-acc
```
結果に、```deploymentState: Deployed``` の行が含まれていることを確認します。

インストールがうまくいかない場合は、以下のコマンドでACC Operatorのログを確認ください。


## WebUI にログイン
インストールが完了したら、ブラウザで astra_control_center_min.yamlで指定したFQDN(「astraAddress」の値)にアクセスします。
ログインユーザ名は、astra_control_center_min.yamlで指定した「email」の値となります。
初期パスワードは、以下のコマンドで確認できます。UUIDの頭に「ACC-」をつけた値を入力してください。

```bash
$ kubectl get astracontrolcenters -n netapp-acc
NAME    UUID
astra   1cfb739d-de93-441c-85b9-605a02fb670f
```

![Screen Shot 2021-07-31 at 5.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/c974d087-7eaa-c039-db4d-1aad17200420.png)

初期パスワードを変更する画面が表示されますので、要件に従って新しいパスワードを入力します。
![Screen Shot 2021-07-31 at 5.53.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449507/6b4087b5-578e-9b08-dfd6-b11471c11544.png)

ログインができましたので、次はこのUIを使ったAstra Control Centerの操作方法について記載しようと思います。
[NetApp Astra Control を使ってみる ①UIの操作編](https://qiita.com/star76/items/a746fdb78d07c32ef1bc) に続きます。