46
Kubernets on Bluemix + DevOps でコンテナ CI やってみた Pumpkin Heads Co.,Ltd. Shoichiro Sakaigawa BMXUG つきじ #1

Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Embed Size (px)

Citation preview

Page 1: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernets on Bluemix + DevOpsでコンテナCIやってみたPumpkin Heads Co.,Ltd. Shoichiro Sakaigawa

BMXUG つきじ#1

Page 2: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

自己紹介境川 章一郎

インフラ系SE

時々開発します(Java/PHP/Python)

最近はnode-red / kubernets+bluemix / OpenShift Origin界隈で学習しています。

Qiitaに忘れた頃に寄稿します。

Page 3: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Docker使ったことあるかたどのくらいいますか?

Page 4: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernetes on Bluemix 知っている方はどのくらいいますか?

Page 5: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

今日話すことKubernetes Bluemixの基礎知識

Kubernetesのすごいところ

Bluemix on Kubernetesのすごいところ

Bluemix DevOps

デモ

Page 6: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernets on Bluemix

©BMXUG Illustration by 竹花ノート

Page 7: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernetesってどんなもの?簡素にまとめると

Docker実行環境のクラスタ化

耐障害性

コンテナの冗長化

複数の要素の集合体

Master Node

クラスタ全体の管理基盤

Worker Node

実際のコンテナが動作する場所

出典: Kubernetes Building High-Availability Clusters https://kubernetes.io/docs/admin/high-availability/

Page 8: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Bluemix on Kubernets のすごいところマネージドである。

Kubernetes MasterはBluemixが管理してくれる

Kubernetes Nodeをクラスタとして提供してくれる

利用者端末からkubernetesクラスタへはOpenVPNでつなげる。

コンテナのセキュリティ診断

Bluemix PaaSとの連携 (Watson/CloudFoundry)

Page 9: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Bluemix on Kubernetesこんなときは?

DBにデータを保存したい-> PaaSのDBサービスを利用する  Cloundantなど多くはCloudFoundoryベース

ファイルを保存したい-> IBM Cloud Object Storage(ICOS)に保存する-> NFS永続ボリュームを作成・契約し保存する

PaaSと接続したいService Bindingを利用する

Page 10: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Bluemix DevOps ©BMXUG Illustration by 竹花ノート

Page 11: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Bluemix DevOps使ったことある方どのくらいますか?

Page 12: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

今日のデモsecure-kube-toolchain サンプルをベースにDevOps CI部分を登録する

http://bit.ly/tsukiji-toolchain 今回のカスタマイズ版

http://bit.ly/2xPUZE0

オリジナルの”tsukiji-container”をtoolchainでビルドする

http://bit.ly/tsukiji-container

“tsukiji-container”のビルドが完了したらPaaS連携を行って画像認識を行う

Page 13: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

今日のデモ 資料URLsecure-kube-toolchain サンプルをベース

http://bit.ly/tsukiji-toolchain 今回のカスタマイズ版(fork)

http://bit.ly/2xPUZE0 IBM 公式版

オリジナルの”tsukiji-container”をtoolchainでビルドする

http://bit.ly/tsukiji-container

Page 14: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

役割分担(toolchain)

secure-kube-toolchain Bluemix DevOpsの CIフローを定義する ここでgitレポジトリ 指定・ビルド・ 開発環境を定義して dockerコンテナの 実行まで管理

Page 15: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

役割分担(tsukiji-container)

tsukiji-container dockerコンテナと kubernetesへの デプロイ指示を ファイルのまとまり として提供docker container

Dockerfile

kubernetes deploy.yaml

Application Source Code

Page 16: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

ToolChain作成に必要なものAPIキー

名前空間(namespace)

kubernetsクラスタ

bxコマンド+プラグイン

$ bx plugin install container-service -r Bluemix

$ bx plugin install conainer-registry -r Bluemix

kubectlコマンド

Page 17: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

デモンストレーション

Page 18: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

secure-kube-toolchainからCreate toolchainを実行する

Page 19: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

ツールチェーン名を適宜指定する

Page 20: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

containerのソースレポジトリを指定

githubのレポジトリを指定する。レポジトリ名はbluemixプライベートレポジトリ名になります。

Page 21: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

namespace

api-key

kubernetes cluster

ネームスペースと、APIキー、クラスタ名を指定。アプリ名は適宜自由に設定可能。

Page 22: Kubernets on Bluemix + DevOpsでコンテナCIやってみた
Page 23: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Issuesの画面サンプル

Page 24: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

gitの画面サンプル

Page 25: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

IDEの画面サンプル

Page 26: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

PIPELINEの画面サンプル ビルド成功すると全てグリーンに

Page 27: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

DEPLOYの画面サンプル ログの最下部までスクロール

Page 28: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

DEPLOYの画面サンプル デプロイ結果のURLをクリックすると

Page 29: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

実行結果が 表示されます

Page 30: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

補足資料:

Page 31: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernetes on Bluemixへの接続bluemixへのログイン

$ bx login

$ bx target —cf

kubernetesクラスタへの接続

$ bx cs init

$ bx cs cluster-config {ClusterName}

返却された変数をexportする

Page 32: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Kubernetes on Bluemixへの接続kubernetes GUIへの接続

$ ./kubectl proxyStarting to serve on 127.0.0.1:8001

ブラウザで接続

Page 33: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

kubernets 管理画面サンプル

Page 34: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

APIキーの入手下準備

$ bx iam api-key-create {Key Name}

Page 35: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Bluemix PaaS Watson Visual Recognitionに接続する

Page 36: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

PaaS連携

Kubernetes on BluemixとPaaSとのつながりは設定が必要です。(サービスのバインディング)

APIをcurlなどで叩くことも可能ですが、API-KEYを埋め込んだりと煩雑になるため、サービスバインディングを使うとJSONで自動連携可能です。

Page 37: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

サービスバインディング例) Watson Visual Recognitionサービス

サービス名に「スペース」が含まれているとうまく設置できなかったので注意必要。

$ bx cs cluster-service-bind {kube cluster} default {serviceName}

Page 38: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

サービスバインディング後の結果サンプル

Page 39: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

deployment.ymlに追記 env: - name: WATSON_VR valueFrom: secretKeyRef: name: binding-visualrecognition-15 key: binding

このあたりに追記

Page 40: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

画像をwatson visual recognition で解析すると・・・

Page 41: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Tips

Page 42: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

TipsBluemix Container Registoryの容量問題

標準はFreeプラン。 Storage 500MBまで Pull 5GB/月まで

Standardプランは無制限 Storage 500MBまで Pull 5GB/月まで

大きめのimageをビルドする時にはStandardへアップグレード推奨。こまめに不要なイメージをbxコマンドで削除することも 有用。

Page 43: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Tipsdocker-registryのimage削除が上手くいかない

DevOps ToolChainでBuildしたimageは権限が足りないエラーで”bx cr image-rm {imageID}”が失敗する

乱暴だがnamespaceごと削除することで削除が可能

$ bx cr namespace-rm {registryNameSpace}

$ bx cr namespace-add {registryNameSpace}

削除直後は同じ名前が使えないエラーがでるが、数秒で再作成可能

Page 44: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Tips

Security Validateがwaiting imagesで止まる

docker-registryのnamespaceが正しくない

単純に時間がかかっている場合もある

再実行で治る場合もある

Page 45: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

Tips

Security Validateがwaiting imagesで止まる

docker-registryのnamespaceが正しくない

単純に時間がかかっている場合もある

再実行で治る場合もある

Page 46: Kubernets on Bluemix + DevOpsでコンテナCIやってみた

ありがとうございました