Postgres for Tanzu(k8s)をインストールしてみた

# 始めに

Postgres for Tanzuというk8s上でpostgresqlを簡単にデプロイできるツールがBetaで公開されています。

このドキュメントではさくっと試しました。

http://postgres-kubernetes.docs.pivotal.io/0-4/index.html

# インストール編

マニュアルにあるよう、PivNetからバイナリーをダウンロードして展開します。

https://network.pivotal.io/products

展開したらまずイメージを登録します。

```
cd postgres-for-kubernetes-v*/images
docker load -i postgres-instance
docker load -i postgres-operator
```

そうしたら、イメージをローカルレポジトリーにアップロードします。
私の環境ではHarborを使っており、`10.195.35.38`というRepoの`blogging`というプロジェクトに保管します。

```
docker tag postgres-instance:v0.4.1 10.195.35.38/blogging/postgres-instance:v0.4.1
docker push 10.195.35.38/blogging/postgres-instance:v0.4.1
```

```
docker tag postgres-operator:v0.4.1 10.195.35.38/blogging/postgres-operator:v0.4.1
docker push 10.195.35.38/blogging/postgres-operator:v0.4.1
```

つづいて、Harborの認証情報を登録します。

```
kubectl create secret docker-registry regsecret --docker-server=10.195.35.38 --docker-username=XXXXXXX --docker-password='XXXXXX' 
```

つぎにHelmのオーバーライド用の`values.yaml`を用意します。

```
# specify the url for the docker image for the operator, e.g. gcr.io/<my_project>/postgres-operator
operatorImageRepository: 10.195.35.38/blogging/postgres-operator

# specify the docker image for postgres instance, e.g. gcr.io/<my_project>/postgres-instance
postgresImageRepository: 10.195.35.38/blogging/postgres-instance
```
そして、これだけでインストールを行います。


```
cd postgres-for-kubernetes-v*/
helm install postgres-operator -f values.yaml operator/ 
```

うまく行けば以下のようにリソースが作られます。現在は全部`default`namespaceにつくれらてしまい、ちょっとイケていない。

```
NAME                                   READY   STATUS    RESTARTS   AGE
pod/postgres-operator-f5f84f77-ph82j   1/1     Running   0          47s

NAME                                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/kubernetes                          ClusterIP   10.96.0.1      <none>        443/TCP    34h
service/postgres-operator-webhook-service   ClusterIP   10.108.24.54   <none>        443/TCP    49s
service/supervisor                          ClusterIP   None           <none>        6443/TCP   34h

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/postgres-operator   1/1     1            1           50s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/postgres-operator-f5f84f77   1         1         1       50s
```

# Postgreインスタンスの作成

ここからはCRDとしてkubernetes経由でpostgresがつくれます。
まずネームスペースを作ります。


```
kubectl create ns postgres
```

面倒ですが、新しく作成したNamespaceにまた、Harborの認証情報を登録します。

```
kubectl create secret docker-registry regsecret --docker-server=10.195.35.38 --docker-username=XXXXXXX --docker-password=XXXXXX -n postgres
```

そして、以下のコマンドで作成

```
kubectl create -n postgres -f - <<EOF
apiVersion: "postgres.pivotal.io/v1"
kind: "PostgresInstance"
metadata:
  name: wordpress-postgres
spec:
  memory: "2G"
  cpu: "1.0"
  storageClassName: default
  # storageSize is divided evenly between data and backup storage
  storageSize: 50G
EOF
```

そうすると簡単なPostgreインスタンスが立ち上がります。

```
NAME                       READY   STATUS    RESTARTS   AGE
pod/wordpress-postgres-0   1/1     Running   0          2m8s

NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/wordpress-postgres   LoadBalancer   10.106.207.224   <pending>     5432:31290/TCP   5m41s

NAME                                  READY   AGE
statefulset.apps/wordpress-postgres   1/1     2m13s

NAME                                                      STATUS    AGE
postgresinstance.postgres.pivotal.io/wordpress-postgres   Running   2m14s
```

# まとめ

まだまだ機能を追加されるでしょうが、今のところこんな機能郡です。