Bluemixで自前のdocker imageが動かせたらいいのに。デモ環境とかみんなに配って使ってもらえるし。
こちらにガイド作成されているのですが、どうもBluemixがサービス構成変更してしまったようで・・
http://qiita.com/m_mizutani/items/2926a63a766dcf64776c
IBM Container RegistryとIBM Container Serviceを組み合わせることが必要になったようです。
Container Serviceを見ると、いきなり「Kubernetes clusters入門」なんてとこからスタートされて、ちょっとハードル高く感じてしまいますね。シングルノードで動かしたいだけなのだけど・・というわけで以下メモ。
作業するにあたり、以下のものは揃っているものとします。
- Bluemixアカウント(IBM ID)
- Bluemix CLI
- Dockerエンジン(起動しておいてください)
- Bluemixで動かしたいDockerイメージ
環境
- macOS Sierra 10.12.5
- Docker Version 17.03.1-ce-mac12 (17661)
- Bluemix CLI version 0.5.4+ae22935-2017-05-18T06:24:28+00:00
イメージ稼働までのステップ
まずはイメージがBluemix上で稼働して、ログインできることを目指します。
- CLIの準備
- IBM Container Registryにdockerイメージ追加
- IBM Container ServiceでLite Kubernetes Cluster作成
- dockerイメージを実行
IBM Container Registryとは
Container Serviceからdocker image管理のサービスが切り出されたようですね。
サービス説明を見てみると、Dockerイメージ保管と共有のためのサービスとのこと。
IBM® Bluemix® Container Registry provides a multi-tenant private image registry that you can use to safely store and share your Docker images with users in your Bluemix account.
If you used the container registry in IBM Bluemix Container Service before 15 June 2017, you must consider the information in Moving to IBM Bluemix Container Registry.
IBM Container Serviceとは
これまた公式ドキュメントによると、以下のようなサービスとのこと。(著者訳)
IBM® Bluemix® Container Serviceとは、DockerとKubernetes を組み合わせることで、強力なツールと、直感的なユーザーエクスピリエンス、分離環境と組み込まれたセキュリティを、そして個々のホストに分散して配置されたアプリケーションクラスタに対してKubenetes APIを通じたデプロイ・運用・スケーリング、監視の自動化を提供します」
Kubernetes推しですが、今のところはdockerだけ使いたい・・
なんて思ったものの、サービス見て見ると、Lite Kubernete Clusterだと1ノードでした。
(ちょっと手順は増える気がするけど)やりたいことはできそうです。
CLIの準備
プラグイン導入
コンテナサービス用にCLIのプラグインを導入します。
ドキュメント を参考にやってみましょう。
まずはContainerを触るためのプラグイン。
$ bx plugin install container-service -r Bluemix
Looking up 'container-service' from repository 'Bluemix'...
Attempting to download the binary file...
21299472 bytes downloaded
Installing binary...
OK
Plug-in 'container-service 0.1.259' was successfully installed into /Users/hiroshi/.bluemix/plugins/container-service.
container-registryプラグインも導入します。
$ bx plugin install container-registry -r Bluemix
Looking up 'container-registry' from repository 'Bluemix'...
Attempting to download the binary file...
11786288 bytes downloaded
Installing binary...
OK
Plug-in 'container-registry 0.1.166' was successfully installed into /Users/hiroshi/.bluemix/plugins/container-registry.
ちゃんとインストールされたか確認。
$ bx plugin list
Listing installed plug-ins...
Plugin Name Version
container-registry 0.1.166
container-service 0.1.259
Kubenets CLIのインストール
後ほどContainer Serviceでクラスタ作るときに必要なので、CLI導入します
OS X
https://storage.googleapis.com/kubernetes-release/release/v1.5.6/bin/darwin/amd64/kubectl
Linux
http://storage.googleapis.com/kubernetes-release/release/v1.5.6/bin/linux/amd64/kubectl
Windows
http://storage.googleapis.com/kubernetes-release/release/v1.5.6/bin/windows/amd64/kubectl.exe
落としてきたファイルを /usr/local/binへ移動。
$ mv /users/hiroshi/Downloads/kubectl /usr/local/bin/kubectl
念のためちゃんとパス通ってるよねと。
$ echo $PATH
/usr/local/apache-maven-3.0.5/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
実行権限忘れずに付けます。
$ chmod +x /usr/local/bin/kubectl
IBM Container Registry にイメージを追加する
こちらから手順をピックアップして簡単に。
Bluemix CLIログイン
$ bx login -a api.ng.bluemix.net [-sso]
US-South以外を使用している場合は、api.ng.blumix.net の部分を変更してください。
- api.au-syd.bluemix.net
- api.eu-gb.bluemix.net
アカウント、パスワード等聞かれるので入力します。
認証連携されてる場合は、-ssoを忘れずに。
Container Registryへのログイン
$ bx cr login
Logging in to 'registry.ng.bluemix.net'...
Logged in to 'registry.ng.bluemix.net'.
OK
Namespaceの設定
Dockerイメージを登録する先としてNamespaceを決めます(hirokitaの部分をそれぞれ変えてください)
Regionごとにユニークである必要があるとのこと。
$ bx cr namespace-add hirokita
Adding namespace 'hirokita'...
Successfully added namespace 'hirokita'
OK
dockerイメージのpush
tag設定するため、pushしたいイメージのIMAGE IDを探します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
irtest latest 72b70d9a8360 8 minutes ago 2.55 GB
Bluemixのリポジトリに合わせてtag設定し、
$ docker tag <IMAGE ID> registry.ng.bluemix.com/<namespace>/<image_repo>:<tag>
例
$ docker tag 72b70d9a8360 registry.ng.bluemix.com/hirokita/irtest:latest
イメージをpushします。
$ docker push registry.ng.bluemix.net/hirokita/irtest
The push refers to a repository [registry.ng.bluemix.net/hirokita/irtest]
7cffb2d94fff: Pushed
latest: digest: sha256:53aeb262ea8363d2a309dd206b3d5414d45d656a1a61ac3034de9827bae855b8 size: 529
イメージが追加されたことを確認。
$ bx cr image-list
Listing images...
REPOSITORY NAMESPACE TAG DIGEST CREATED SIZE VULNERABILITY STATUS
registry.ng.bluemix.net/hirokita/irtest hirokita latest 53aeb262ea83 5 hours ago 605 MB OK
Container実行、その前に。
Container Serviceプラグインへのログイン
$ bx cs init
Using default API endpoint: https://us-south.containers.bluemix.net
OK
Lite Kubernetes Cluster作成
リンク先 にあるような、シングルインスタンスのクラスタを作成します。
$ bx cs cluster-create --name first_cluster
Creating cluster...
OK
コマンドはすぐ返ってきますが、デプロイにはちょっと時間がかかります。(ドキュメントによると最大15分くらいかかるかも)
ワーカーノードのデプロイが完了したかチェックします。
(NGの例)
$ bx cs workers first_cluster
Listing cluster workers...
OK
ID Public IP Private IP Machine Type State Status
kube-hou02-pafea0786bae5246c3b718e47384af8300-w1 - - free provision_pending Waiting for master to be ready
(OKの例: Stateがdeployed
になっている)
$ bx cs workers first_cluster
Listing cluster workers...
OK
ID Public IP Private IP Machine Type State Status
kube-hou02-pafea0786bae5246c3b718e47384af8300-w1 169.48.131.37 10.177.161.132 free deployed Deploy Automation Successful
環境変数を取得します。今後このクラスターを操作する際には必ずこのコマンドを実行して設定を取得する必要あり。
$ bx cs cluster-config first_cluster
Downloading cluster config for first_cluster
OK
The configuration for first_cluster was downloaded successfully. Export environment variables to start using Kubernetes.
export KUBECONFIG=/Users/<username>/.bluemix/plugins/container-service/clusters/first_cluster/kube-config-hou02-first_cluster.yml
最後の一行、コピー&ペーストして実行します
$ export KUBECONFIG=/Users/<username>/.bluemix/plugins/container-service/clusters/first_cluster/kube-config-hou02-first_cluster.yml
Kubernete CLIコマンドを使って、Server Version
が正しく取得できることを確認します。
$ kubectl version --short
Client Version: v1.5.6
Server Version: v1.5.6-4+abe34653415733
Deploymentを作成します。
$ kubectl run irtest-deployment --image=registry.ng.bluemix.net/hirokita/irtest:latest
deployment "irtest-deployment" created
この図 のように、1つのPodから構成されるDeploymentを作成したことになります。