Check! Bluemix の Kubernetes Cluster への踏台コンテナをつくってみました！

こんばんは、 @dz_ こと大平かづみです。

Prologue - はじめに
====

先日開催した「[もくもくクラウド自習室 (自習書付き!) #1](https://play-with-cloudz.connpass.com/event/66457/)」では、参加者の得意分野が十人十色でいろんな知見が得られ、主催の私もとても勉強になりました！

なかでも、メンバーさんから「Bluemix の Kubernetes 環境は1つなら無料！」と聞いて、これは早速試しましょっと！ヽ(☆’v\`)★’v\`)ﾉ

まずは Bluemix の Kubernetes に `kubectl` でアクセスできる踏み台環境を、Docker で作ってみました。

IBM Bluemix Container Service の Kubernetes Cluster について
----
私自身、口頭で教えてもらって進めたので、ドキュメントを全然読めていません。ひきつづき、この辺のドキュメントを参考に進めようと思います。

- [Kubernetes クラスターと IBM Bluemix Container Service について | IBM Bluemix Container Service](https://console.bluemix.net/docs/containers/cs_ov.html#cs_ov)
- [Kubernetes クラスター作成 | IBM Bluemix Container Service](https://console.bluemix.net/containers-kubernetes/launch)
    - **Lite**: 2 CPU、4 GB メモリー、1 個のワーカー・ノードが付属する無料クラスター

それから、メンバーさんが試していたのはこの記事だそうです。

- [Kubernetesを使ったスケーラブルなWordPress環境を構築してみた](https://qiita.com/asasaki/items/f0746ca36d0a134e2e2d)

IBM Bluemix Container Service で Kubernetes Cluster を試してみる
====

Kubernetes Cluster を作成する
----
Bluemix にログインし、「カタログ」>「コンテナー」>「Kubernetes Cluster」を開きます。

無料のクラスタを作成するには「Lite」を選択して、進めてください。

クラスタの作成はしばらく時間がかかるので、下記に進みましょう。

Bluemix CLI + Kubectl が入ったコンテナづくり
----

作成した Kubernetes Cluster に接続するためのコンテナを作ります。

IBM Bluemix Container Service のクラスタを立ち上げた後の「アクセス」画面や、下記の資料を参考にしました。

- [Setting up the CLI and API | IBM Bluemix Container Service](https://console.bluemix.net/docs/containers/cs_cli_install.html#cs_cli_install)

### Dockerfile

まず、 `Dockerfile` を用意しましょう。

私は下記のように、Ubuntu ベースで、 Bluemix CLI と `kubectl` をインストールしたシンプルなイメージを作りました。

`8001` ポートは、 `kubectl proxy` で立ち上げる Kubernetes のダッシュボードのデフォルトポートです。ホストマシンからアクセスできるように開けました。

```Dockerfile
FROM ubuntu:16.04

RUN apt-get update -y && \
    apt-get install -y \
        curl \
        sudo

ENV BLCLI_INSTALLER blcli_installer

RUN curl -fsSL -o ${BLCLI_INSTALLER} https://clis.ng.bluemix.net/install/linux && \
    sh ./${BLCLI_INSTALLER} && \
    rm ./${BLCLI_INSTALLER}

RUN bx plugin install container-service -r Bluemix

RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && \
    chmod +x ./kubectl && \
    sudo mv ./kubectl /usr/local/bin/kubectl

EXPOSE 8001
```

ちなみに、 `sudo`  は Bluemix CLI のインストールスクリプト内でつかうのでインストールしました。が、コンテナにはあまり入れたくないですよね～。あくまで、お試し環境でお使いください。

気になる方は、オフライン・インストールとして、自前で `tar.gz` を展開・配置する方法もあるようです。

- [オフライン・インストール | Bluemix CLI 入門](https://console.bluemix.net/docs/cli/reference/bluemix_cli/index.html#install_bluemix_cli)

作ったコンテナで IBM Bluemix Container Service に接続する
----

`Dockerfile` ができたら、そのディレクトリで以降の作業をします。

```bash
# イメージをビルドする
docker build -t bl_kubectl .

# 8001 ポートを接続して、コンテナを起動し、bash にはいる
docker run -it -p 8001:8001 --rm=true bl_kubectl /bin/bash
```

`bl_kubectl` コンテナの中で、 Bluemix にログインし、Container Service プラグインを初期化します。

```bash
# Bluemix にログインする
bx login -a https://api.ng.bluemix.net

# bx コマンドの Container Service プラグインの初期化を行う
bx cs init
bx cs cluster-config <your-cluster-name>
```

この時点で、 `KUBECONFIG` を `export` するよう促されるので、従ってください。

例: 
`export KUBECONFIG=<path-to-config-file>/kube-config-hou02-xxx.yml`

そして、 `kubectl proxy` でダッシュボードを起動します。このとき、 `--address` に `0.0.0.0` を指定します。 これを指定しないと、デフォルトの  `127.0.0.1` で動作してコンテナの外から接続できません。

```bash
kubectl proxy --address='0.0.0.0' &
```

エラーがなければ、ホストマシンのブラウザで `127.0.0.1:8001/ui` にアクセスしてみましょう～

よし、Kubernetes のダッシュボードにアクセスできました！ヾ(･∀･)ﾉ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3812/9e5e6dc5-0a59-532e-818c-05210cf8864b.png)

Epilogue - おわりに
====

余談ですが、最近ではネットワーク系のコマンドは一新されてるらしく、 `netstat` の代わりに `ss` コマンドを使うそうで！

CentOS では こんな感じでそれぞれ置き換わってるみたいです。
- [Mobile Study: CentOS6, CentOS7 システムコマンド対応表](http://mobiles-han.blogspot.jp/2016/09/centos6-centos7.html)

Ubuntu も `ifconfig` がなくて `ip address show` に代わってました！

さいごに、上記を進めるにあたり、もくもくクラウド自習室に来てくれたみなさんにいろいろ教えてもらいました。ギブ&テイク、すてきですね！ ヽ(☆’v\`)★’v\`)ﾉ