Photon-ControllerでDockerを動かしてみる

# 参照ページ

- [vSphere Integrated Containers テクノロジー ウォークスルー](http://blogs.vmware.com/jp-cim/2015/10/vsphere-integrated-containers-tech.html)
- [Photon Controlller Getting Started Guide](http://blogs.vmware.com/cloudnative/files/2015/11/Photon-Controller-Getting-Started-Guide-20151116.pdf)
 
基本的には、Photon Controlller Getting Started Guideに従って操作した手順記録です。参考にしていただければと思います。

# 設定
## VMWare Playerで基盤環境作り
Photon Controlller Getting Started Guideでは、VMWare Fusion 8 or VMware Workstation 12を使用することが書いてあるが、すでにVMWare Playerをインストールして使っているのでこちらの環境を利用する。

これを試すためには、NATのネットワークを192.168.209.0/24のネットワークを使用する必要があります。
わかる人は、vmnetnat.confやvmnetdhcp.confを編集して設定するようにしてください。

## ダウンロード
ESXiをダウンロードします。ユーザアカウントの登録とライセンス申請が必要です。簡単な操作です。
[Download  VMware vSphere Hypervisor (ESXi)のダウンロード](https://my.vmware.com/group/vmware/info?slug=datacenter_cloud_infrastructure/vmware_vsphere_hypervisor_esxi/6_0)

## VMWare PlayerでESXiの起動
以下の環境を用意します。
- ディスク容量は、100G
- プロセッサ数は、4
- メモリは、12G
- ネットワークは、NAT
- ダウンロードしたESXiを選択
インストールが自動的に進んでいくので少し待ちます。
F11など押しながら進めてください。再起動したら、終了です。

IPアドレスは192.168.209.31にしてください。
SSHを有効にします。

## ESXi Embedded Host Clientのインストール
[ESXi Embedded Host Clientのダウンロード](https://labs.vmware.com/flings/esxi-embedded-host-client)

ダウンロードしたファイルをインストールするは、ESXiに対して、SCP、SSHする必要があります。
私は、WinSCPを使って/tmp以下にファイルをアップし、WinSCPのコンソール機能を使って、インストールしました。

```
esxcli software vib install -v /tmp/esxui-signed.vib --force
```

[https://192.168.209.31/ui/](https://192.168.209.31/ui/)でアクセスできます。

## Photon.exeのダウンロードと設定

[Photon.exe](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon.exe)をダウンロードします。
Photon.exeを適当なディレクトリに保存し、Windowsの環境設定で、ディレクトリをPATHに追加します。

## Photon Controller Control Plane OVAのダウンロードと設定

[Photon Controller Control Plane OVA](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/PhotonControllerDevbox-11-12-15.ova)をダウンロードします。2.5Gくらいです。
VMWare Playerで起動の設定をします。

設定を変更したいときはこちらを参考にしてください。
[	
Basic Commands for VMware Photon and Docker](http://www.virten.net/2015/04/basic-commands-for-vmware-photon-and-docker/)

[https://192.168.209.29/api/](https://192.168.209.29/api/)でアクセスできることを確認してください。

## photonの設定
実行するコマンドは以下です。

```
C:>photon target set https://192.168.209.29:443
API target set to 'https://192.168.209.29:443'

C:>photon host create --username root --password <パスワード> --tag
CLOUD --address 192.168.209.31

1分近いくらい処理が行われます。

C:>photon host list
Using target 'https://192.168.209.29:443'
ID                                    State  IP              Tags
84031e89-dd9c-4c4d-a262-65a4b160d63d  READY  192.168.209.31  CLOUD

Total: 1
```

READYになっていれば成功のようです。

## photonのプロジェクトの設定

```
C:\>photon tenant set demo
Using target 'https://192.168.209.29:443'
Tenant set to 'demo'

C:\>photon project set dev-project
Using target 'https://192.168.209.29:443'
Project set to 'dev-project'

c:\>photon project list
Using target 'https://192.168.209.29:443'
ID                                    Name         Limit             Usage
77fa7e6a-5b67-4909-b589-015d8761a7ee  dev-project  vm.memory 100 GB  vm.memory 0 GB
                                                   vm 5000 COUNT     vm 0 COUNT

Total projects: 1

c:\>photon tenant list
Using target 'https://192.168.209.29:443'
ID                                    Name
ea4af1ba-ba0a-4bba-b720-2f2c6ef6c8cf  demo

Total: 1
```

## photonにクラスタイメージをアップロード

どれでも一つでよいようです。使いなれたものを利用すればよいと思います。
[kubernetes](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon-kubernetes-vm-disk1.vmdk)、[swarm](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon-swarm-vm-disk1.vmdk)、[Mesos](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon-mesos-vm-disk1.vmdk)をダウンロードします。

```
c:\>photon image create photon-kubernetes-vm-disk1.vmdk -n photon-kubernetes-vm.vmdk -i EAGER
Using target 'https://192.168.209.29:443'
Created image 'photon-kubernetes-vm.vmdk' ID: 17896ae7-3972-4ee9-8536-bcd723039534

c:\>photon image create photon-swarm-vm-disk1.vmdk -n photon-swarm-vm.vmdk -i EAGER
Using target 'https://192.168.209.29:443'
Created image 'photon-swarm-vm.vmdk' ID: 530eda74-a22f-46b0-b0c6-a29b8e56bdde

c:\>photon image create photon-mesos-vm-disk1.vmdk -n photon-mesos-vm.vmdk -i EAGER
Using target 'https://192.168.209.29:443'
Created image 'photon-mesos-vm.vmdk' ID: 8ed791ec-83f4-4044-a645-945cf7a3a8f9
c:\>photon image list
Using target 'https://192.168.209.29:443'
ID                                    Name                       State  Size(Byte)   Replication_type
530eda74-a22f-46b0-b0c6-a29b8e56bdde  photon-swarm-vm.vmdk       READY  85899345968  EAGER
8ed791ec-83f4-4044-a645-945cf7a3a8f9  photon-mesos-vm.vmdk       READY  85899345968  EAGER
17896ae7-3972-4ee9-8536-bcd723039534  photon-kubernetes-vm.vmdk  READY  85899345968  EAGER

Total: 3
```

## kubernetesクラスタの設定


```
c:\>photon cluster create -n Kube2 -k KUBERNETES --dns 192.168.209.2 --gateway 192.168.209.2 --netmask 255.255.255.0 --master-ip 192.168.209.35 --cont
ainer-network 10.20.0.0/16 --etcd1 192.168.209.36 -s 2
Using target 'https://192.168.209.29:443'
etcd server 2 static IP address (leave blank for none):

Creating cluster: Kube2 (KUBERNETES)
  Slave count: 2

Are you sure [y/n]? y
Cluster created: ID = 0569bf82-8f93-4c09-8ba4-146bc238c3e8
Note: the cluster has been created with minimal resources. You can use the cluster now.
A background task is running to gradually expand the cluster to its target capacity.
You can run 'cluster show 0569bf82-8f93-4c09-8ba4-146bc238c3e8' to see the state of the cluster.

c:\>photon cluster list
Using target 'https://192.168.209.29:443'
ID                                    Name   Type        State     Slave Count
0569bf82-8f93-4c09-8ba4-146bc238c3e8  Kube2  KUBERNETES  CREATING  2

Total: 1
CREATING: 1

1分くらいしてからもう一度やると、
c:\>photon cluster list
Using target 'https://192.168.209.29:443'
ID                                    Name   Type        State  Slave Count
0569bf82-8f93-4c09-8ba4-146bc238c3e8  Kube2  KUBERNETES  READY  2

Total: 1
READY: 1

```

5分くらいで終わります。
[https://192.168.209.31/ui/](https://192.168.209.31/ui/)で見ていると、どのようにVMが作成され設定されているかわかります。
コマンドでしているように、master-ip、etcd-ipは、指定していますが、スレーブのサーバは指定していません。これはDHCPで自動的にIPが設定されるので、DHCPが稼働しておく必要があります。

etcd2を指定すると、etcサーバが2台起動します。

## 状況確認
このようになっています。
![vmware_shot.PNG](https://qiita-image-store.s3.amazonaws.com/0/60484/d8d5c5ca-5b04-5cf5-7dd0-5ff47178ef52.png)

slaveのIPは、192.168.209.129と、192.168.209.130になっています。DHCPでIPを取得しています。
それぞれ、ログインしてみてください。面白いですよ。
dockerでサービスが動いています。マイクロサービスですね。

■master

```
root@master-b94bdd6a-4bfc-462b-b9f7-4469080992cf [ ~ ]# docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
eb9fa8f88277        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube scheduler"   7 minutes ago       Up 7 minutes                            k8s_scheduler.2744e742_k8s-master-master-b94bdd6a-4bfc-462b-b9f7-4469080992cf_default_e4b00cc799dcf1b4b38d135ec92c50d5_7af2c055
c5cfd41f4788        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube apiserver"   7 minutes ago       Up 7 minutes                            k8s_apiserver.22190309_k8s-master-master-b94bdd6a-4bfc-462b-b9f7-4469080992cf_default_e4b00cc799dcf1b4b38d135ec92c50d5_c6f08db7
7b8cc1eb3749        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube controlle"   7 minutes ago       Up 7 minutes                            k8s_controller-manager.1598ee5c_k8s-master-master-b94bdd6a-4bfc-462b-b9f7-4469080992cf_default_e4b00cc799dcf1b4b38d135ec92c50d5_1e563e1a
8156c51cf848        gcr.io/google_containers/pause:0.8.0        "/pause"                 7 minutes ago       Up 7 minutes                            k8s_POD.e4cc795_k8s-master-master-b94bdd6a-4bfc-462b-b9f7-4469080992cf_default_e4b00cc799dcf1b4b38d135ec92c50d5_6f19d4e8
92be7e681954        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube proxy --m"   7 minutes ago       Up 7 minutes                            furious_turing
ab87a67d27c6        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube kubelet -"   7 minutes ago       Up 7 minutes                            elated_bell
```

■etcd

```
root@etcd-525a0b9a-f857-4732-a856-aaaf7eb127cf [ ~ ]# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                                NAMES
7655cc2c9bb1        quay.io/coreos/etcd:v2.0.8   "/etcd -name etcd0 -a"   8 minutes ago       Up 8 minutes        0.0.0.0:2379-2380->2379-2380/tcp, 7001/tcp, 0.0.0.0:4001->4001/tcp   etcd
```
■slave

```
root@slave-62b68844-ab24-48b0-bf99-cbae83a5bbd0 [ ~ ]# docker ps -a
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
2b1d37b02f8c        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube proxy --m"   7 minutes ago       Up 7 minutes                            hopeful_euclid
3f107cd9bd09        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube kubelet -"   7 minutes ago       Up 7 minutes                            backstabbing_curie
```
■slave

```
root@slave-1cfb19e7-5de1-4463-854b-b8ed911faaab [ ~ ]# docker ps -a
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
3569eb49a584        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube proxy --m"   6 minutes ago       Up 6 minutes                            suspicious_almeida
3030e2bcd4f3        gcr.io/google_containers/hyperkube:v1.0.1   "/hyperkube kubelet -"   6 minutes ago       Up 6 minutes                            stoic_visvesvaraya
```

※flannelのネットワークを持っているのは、masterとslaveです。


## kubectl.exe のダウンロード

[kubernetes](https://github.com/kubernetes/kubernetes/releases/tag/v1.0.1)から[kubernetes.tar.gz](https://github.com/kubernetes/kubernetes/releases/download/v1.0.1/kubernetes.tar.gz)をダウンロードし、解凍すると、
kubernetes\platforms\windows\amd64に保存されていますので、photon.exeと同様のディレクトリにコピーします。
PATHが設定されているディレクトリなので、kubectlが使用可能なると思います。

## 起動確認

以下からダウンロードします。
[Apache Tomcat Replication Controller yml](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon-Controller-Tomcat-rc.yml)
[Apache Tomcat Service yml](https://bintray.com/artifact/download/photon-controller/public/UserWorkflow/photon-Controller-Tomcat-service.yml)

このファイルを使って起動の確認をします。

```
kubectl -s 192.168.209.35:8080 create -f photon-Controller-Tomcat-rc.yml
kubectl -s 192.168.209.35:8080 create -f photon-Controller-Tomcat-service.yml
kubectl -s 192.168.209.35:8080 get pods
```


## swarm、mesos

また試したいと思っていますが

今日は、ここまでです。