VMware Tanzu Community EditionでLocal Path Storage Packageを使ってStorageを作成してみた

## はじめに
[VMware Tanzu Community Edition](https://tanzucommunityedition.io/) がリリースされました。
Dockerさえあればインストール可能なのでローカル開発環境上での利用にも便利そうです。
今回はDockerを利用し構築したTanzuのStandalone Clustersに対してPackageの利用例として[Local Path Storage](https://tanzucommunityedition.io/docs/latest/package-readme-local-path-storage-0.0.20/)を利用したStorage Classの追加をしてみます。

## TanzuのStandalone Clustersの構成
[getting-started](https://tanzucommunityedition.io/docs/latest/getting-started-standalone/)や下記の[Tanzu Community Editionを使ってみた](https://qiita.com/masanara/items/b69799fe0c604813a3d6)を参考にすれば簡単に構成できます。
各種podがRunningになったら準備完了です。

```shell
> kubectl get pods -A
NAMESPACE     NAME                                                     READY   STATUS    RESTARTS   AGE
kube-system   antrea-agent-d6845                                       2/2     Running   0          12h
kube-system   antrea-agent-tj8kk                                       2/2     Running   1          12h
kube-system   antrea-controller-86f8988c5f-l47cw                       1/1     Running   0          12h
kube-system   coredns-8dcb5c56b-7qprg                                  1/1     Running   0          13h
kube-system   coredns-8dcb5c56b-m4jtz                                  1/1     Running   0          13h
kube-system   etcd-hello-tkg-control-plane-t9b5l                       1/1     Running   0          13h
kube-system   kube-apiserver-hello-tkg-control-plane-t9b5l             1/1     Running   0          13h
kube-system   kube-controller-manager-hello-tkg-control-plane-t9b5l    1/1     Running   0          13h
kube-system   kube-proxy-hrx74                                         1/1     Running   0          13h
kube-system   kube-proxy-p64fb                                         1/1     Running   0          13h
kube-system   kube-scheduler-hello-tkg-control-plane-t9b5l             1/1     Running   1          13h
tkg-system    kapp-controller-6499b8866-kqdmg                          1/1     Running   0          13h
tkg-system    tanzu-capabilities-controller-manager-6ff97656b8-hstgf   1/1     Running   0          12h
tkr-system    tkr-controller-manager-6bc455b5d4-zzf2q                  1/1     Running   0          13h
```


## ローカルストレージの作成
ManagedなKubernetesを利用している場合はそのサービスで用意されているProvisionerを使えば簡単にStorageを作成できる場合が多いですが、ローカル環境の場合は"簡単に"とはいかないかと思います。
Tanzuの場合は**Local Path Storage**というPackage（拡張機能）があり、これを利用すれば簡単に設定できそうです。

### Package repoの追加
まずは [Work with Packages](https://tanzucommunityedition.io/docs/latest/package-management/) のページを参考にPackageリポジトリの情報を追加します。

```sh
> tanzu package repository add tce-repo \
  --url projects.registry.vmware.com/tce/main:0.9.1 \
  --namespace tanzu-package-repo-global
```
### インストールするPackageの情報を取得
次にインストール対象のPackageの情報を確認します。
下記コマンドによると正式なPackage Nameは `local-path-storage.community.tanzu.vmware.com` であることがわかります。

```sh
> tanzu package available list
  NAME                                           DISPLAY-NAME        SHORT-DESCRIPTION   
~~
  local-path-storage.community.tanzu.vmware.com  local-path-storage  This package provides local path node storage and primarily supports RWO AccessMode. 
~~
```

ついでに利用可能なバージョンも調べます。

```shell
> tanzu package available list local-path-storage.community.tanzu.vmware.com
/ Retrieving package versions for local-path-storage.community.tanzu.vmware.com... 
  NAME                                           VERSION  RELEASED-AT           
  local-path-storage.community.tanzu.vmware.com  0.0.19   2021-09-15T00:00:00Z  
  local-path-storage.community.tanzu.vmware.com  0.0.20   2021-09-15T00:00:00Z 
```

### 設定ファイルの作成
[Configuration](https://tanzucommunityedition.io/docs/latest/package-readme-local-path-storage-0.0.20/) によるとnamespaceの設定が必須なので、これを設定するためのファイルを追加します。
今回は`default`でよいので下記のように設定しました。

```yaml:lps.yaml
namespace: default
```

### Packageのインストール
最後に集めたPackageの情報と設定ファイルによりインストールを実施します。

```shell
> tanzu package install local-path-storage \
  --package-name local-path-storage.community.tanzu.vmware.com \
  --version 0.0.20 \
  --values-file lps.yaml
/ Installing package 'local-path-storage.community.tanzu.vmware.com' 
| Getting namespace 'default' 
| Getting package metadata for 'local-path-storage.community.tanzu.vmware.com' 
| Creating service account 'local-path-storage-default-sa' 
| Creating cluster admin role 'local-path-storage-default-cluster-role' 
| Creating cluster role binding 'local-path-storage-default-cluster-rolebinding' 
| Creating secret 'local-path-storage-default-values' 
- Creating package resource 
\ Package install status: Reconciling 

 Added installed package 'local-path-storage' in namespace 'default'
```

Podとしてprovisionerが追加され、StorageClassが作成されていることが確認できました。

```sh
> kubectl get pod
NAME                                      READY   STATUS    RESTARTS   AGE
local-path-provisioner-66d8f7f469-7b5z7   1/1     Running   0          36m
> kubectl get sc
NAME                   PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local-path (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  36m
```

## さいごに
tanzuのPackageを用いてローカルのStorageを作成しました。これを利用すれば永続化ボリュームを前提とするアプリケーションのデプロイもスムーズに実施できそうです。