Pivotal Cloud Foundry で Kubernetes をより良く管理

# PCFとは
https://pivotal.io/jp/platform

Pivotalが提供する、Kubernetesやその他さまざまなサービスを導入及び管理することができる基盤です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/6b5c2dcb-ee28-2ac1-b6bc-40d195c9f002.png)


基本的にはOps Managerと呼ばれるものを

- VMware vSphere
- Microsoft Azure
- Google Cloud Platform
- Amazon Web Service
- OpenStack

の上に構築して、そこから各種サービスを展開していく流れになります。

以下は、Ops Manager上に

- PKS (Pivotal Container Service): Kubernetes管理基盤
- Habor: Private docker repository

を導入した状態です。

![pom.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/f0a74ec5-00c7-528c-30e3-0ee19abe31c5.png)

# PCF 構築の流れ
とてつもない量となってしまうため、流れをつかんでいただくものを書きます。

これを読みながらやっていくというよりは、自分の詰まった点やどのような構成にしていたのかを書いてありますので、ざっと目を通して、構成をイメージしてから取り組んでいただければと思います。

環境はこんな感じでやっています。(とても簡単な図ですみません)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/aacf3150-0c86-1dbb-79ea-18b651be2ea5.png)


## Ops Managerのインストール
自分は、VMware vCenterを通して構築をいたしました。

## Boshの設定

以下ような各項目を埋めていきます。
この際、管理用のnetworkとサービス用networkを準備する必要があります。

自分の場合、NAT下に作成したため、

- 外部通信用network
- private network1(管理用)
- private network2(サービス用)

の3つのネットワークを作っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/86b8657d-4a6a-9f62-e8b3-c858d5666739.png)

## PKS のインストール
モジュールをインストールし、先ほどのOps Managerの管理画面のIMPORT A PRODUCT というところから取り込んでいきます。

設定に関しても、複雑なものはなく容易にこなすことができます。

この際、PKS APIという箇所で、Certificateを生成するのですが、そこにrsa keyが必要となります。
NATでssh-keygenをして、id_rsaをcatしコピペして生成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/8f9508dd-cb6a-402c-acad-49816ecab304.png)


導入後に

```
# uaac target https\://PKS-API:8443 --ca-cert ROOT-CA-FILENAME
```

コマンドを用いて、情報を取得するのですが、ここが少し戸惑いました。。。

ここでは、自分の場合一度ops managerにログインし、

```
ubuntu@pivotal-ops-manager:~$ cat /var/tempest/workspaces/default/root_ca_certificate
```

として表示されたものを、NAT上のどこかにテキストファイル化し

```
# uaac target pks.mydom.local:8443 --ca-cert root_ca_certificate

Target: https://pks.mydom.local:8443
Context: admin, from client admin
```

という感じにしています。

## Habor

ここは何もつまるところはなく、難なくいけました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416540/a0404737-f378-6db3-f3ac-fb645aa2a183.png)


# Kubernetes cluster の構築

PKSではとても簡単に、好きな構成のkubernetesをサラッと構築できます。

NATにつなぎ、ログインします。
この際、clusterは生成されてないので、何も表示されません。

```
# pks login -a pks.mydom.local -u pksadmin -p password --ca-cert /usr/pks/root_ca_certificate

# pks clusters list

Name  Plan Name  UUID  Status  Action
```

では、実際に構築します。

```
# pks create-cluster SampleCluster --external-hostname samplecluster.mydom.local --plan large --num-nodes 4

Name:                     SampleCluster
Plan Name:                large
UUID:                     09ffbeda-423e-4872-a7d1-73f51a8c6cce
Last Action:              CREATE
Last Action State:        in progress
Last Action Description:  Creating cluster
Kubernetes Master Host:   samplecluster.mydom.local
Kubernetes Master Port:   8443
Worker Nodes:             4
Kubernetes Master IP(s):  In Progress
Network Profile Name:

Use 'pks cluster SampleCluster' to monitor the state of your cluster
```

構築が始まりました。
ここは、少し時間がかかりますが、自動でやってくれていると思えばね。。。

```
# pks clusters list

Name           Plan Name  UUID                                  Status       Action
SampleCluster  large      09ffbeda-423e-4872-a7d1-73f51a8c6cce  in progress  CREATE
```

出来上がると以下のように表示されます。

```
# pks cluster SampleCluster

Name:                     SampleCluster
Plan Name:                large
UUID:                     98c4d605-6646-4702-beba-9f13da740d26
Last Action:              CREATE
Last Action State:        succeeded
Last Action Description:  Instance provisioning completed
Kubernetes Master Host:   samplecluster.mydom.local
Kubernetes Master Port:   8443
Worker Nodes:             4
Kubernetes Master IP(s):  172.16.1.2
Network Profile Name:


# pks clusters list

Name           Plan Name  UUID                                  Status     Action
SampleCluster  large      09ffbeda-423e-4872-a7d1-73f51a8c6cce  succeeded  CREATE
```

以下の二つでclusterに接続します。

```
# pks get-credentials SampleCluster

# kubectl config use-context SampleCluster
Switched to context "SampleCluster"
```

clusterの情報について確認してみましょう。

```
# kubectl cluster-info
Kubernetes master is running at https://samplecluster.mydom.local:8443
CoreDNS is running at https://samplecluster.mydom.local:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.


# kubectl get nodes -o wide
NAME                                   STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
898ca1e5-f248-466b-aaf1-9208ee122aae   Ready    <none>   58m   v1.13.5   172.16.1.4    172.16.1.4    Ubuntu 16.04.6 LTS   4.15.0-46-generic   docker://18.6.3
8eda35c6-533c-43c7-9efa-dc513420cb32   Ready    <none>   56m   v1.13.5   172.16.1.5    172.16.1.5    Ubuntu 16.04.6 LTS   4.15.0-46-generic   docker://18.6.3
9c86b2be-2192-4e14-869b-ab562ad76916   Ready    <none>   53m   v1.13.5   172.16.1.6    172.16.1.6    Ubuntu 16.04.6 LTS   4.15.0-46-generic   docker://18.6.3
c24e6162-3125-49d7-bfd6-f3a4d20b2c60   Ready    <none>   61m   v1.13.5   172.16.1.3    172.16.1.3    Ubuntu 16.04.6 LTS   4.15.0-46-generic   docker://18.6.3
```


# まとめ
すこし、PKS等の導入時に悩むこともありましたが、一度構築してしまうと、いろんなことが楽できそうですね！

皆さんもぜひ、導入してみてはいかがでしょうか。