Slide 1

Slide 1 text

Kubernetesで切開く アプリケーション配信の 明るい未来 【DC-2】 ⽇本アイ・ビーエム株式会社 クラウド事業本部 ⾼良 真穂

Slide 2

Slide 2 text

このセッションについて ⽬的 Kubernetesの利⽤価値を理解し、 実務に活かせる具体的なポイントを掴む ゴール 何ができるかを知り、ご⾃⾝で動かせる様になる

Slide 3

Slide 3 text

みなさんは Dockerコンテナを 使ってますか?

Slide 4

Slide 4 text

コンテナとは • コンテナの起動は早い、軽量 • 必要なコードセットをOSレベルで独⽴にまとめ、可搬性がある • ⼀つのコンテナホスト上に複数を同居できるので、効率が良い Baremetal Server Xen Hypervisor Linux Linux Bin/libs Apps VM DomU VM Dom0 Baremetal Server Linux Bin/libs Apps Baremetal Server Linux Bin/libs Apps Docker Engine 仮想サーバー コンテナ 物理サーバー Linux Bin/libs Apps VM DomU Bin/libs Apps … …

Slide 5

Slide 5 text

賢者は歴史に学び 愚者は経験に学ぶ

Slide 6

Slide 6 text

コンテナ以前の様⼦ コンテナ⾰命以前の港湾荷役 http://military.wikia.com/wiki/Battle_of_Pusan_Perimeter_logistics ⼤勢の作業員 倉庫に⼀時保管 物流の最⼤の ボトルネック

Slide 7

Slide 7 text

https://www.jsanet.or.jp/seminar/text/seminar_177.html 物流コンテナによる⾰命 コンテナの発明者は、全⽶有数のトラッ ク運送会社のオーナーとなったマルコム ・マクリーン(Malcom P. McLean) 国際貨物輸送の分野に 海陸⼀貫輸送という⼤変⾰ 1970年代には世界の主要航路のコンテナ 化がほぼ完了した。わずか10年程度でこ れほど急激な形態の変化が起こったのは 海運史上でも他に例がない。 https://en.wikipedia.org/wiki/Malcom_McLean

Slide 8

Slide 8 text

港湾荷役のボトルネックを解消 物流コストの削減とスピードアップ コンテナ⾰命は業務改⾰ 陸海⼀貫輸送 海上輸送 陸送(トラック) 陸送(鉄道) 港湾荷役 港湾荷役 コンテナ船

Slide 9

Slide 9 text

いま、IT業界の コンテナ⾰命が 始まる

Slide 10

Slide 10 text

コンテナ以前のシステム オンプレ or クラウド 本番 HA1 QA-HA1 DEV#1 本番 HA2 QA-HA2 DEV#2 Storage Disk Array Tape Library Equipment システム管理者 スーパーバイザ 開発者 シスオペ 環境利⽤ スケジュール 環境維持 パッチ適⽤ 不具合修正 セキュリティ チューニング 負荷増対応、資源配分 監視 アプリ・ジョブ運⽤ 基盤運⽤ 監視ソフトの設定 作りこみ 環境取り合い ⼤量ドキュメントと俗⼈的な努⼒ によるシステム開発&運⽤ コンテナ以前の 港湾荷役の様な⼈⼿作業 ITIL準拠の⼿順書を作成

Slide 11

Slide 11 text

ITのコンテナも業務効率を劇的に改善 アプリ コンテナ V1.2 アプリ コンテナ V1.1 品質保証 テスト アプリ コンテナ V1.3a アプリ コンテナ V1.3b デリバリ・パイプライン 本番 サービス 開発中 開発中 デベロッパー デベロッパー テストエンジニア SRE ⾼度に最適化された 現代のコンテナ 配送システム に例えることができる https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A#/media/ File:Dole_container_is_placed_onto_a_truck.jpg

Slide 12

Slide 12 text

IT業界で働く あなたは

Slide 13

Slide 13 text

どちらを⽬指しますか? https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3% 83%8A#/media/File:Dole_container_is_placed_onto_a_truck.jpg http://military.wikia.com/wiki/Battle_of_Pusan_Perimeter_logistics

Slide 14

Slide 14 text

コンテナを活かした アプリ配信基盤となる Kubernetesとは?

Slide 15

Slide 15 text

発⾳/略称/Logo 綴り Kubernetes 発⾳ koo-ber-net-ees 略称 K8s Kubernetes 12345678 クーベネティスのロゴ

Slide 16

Slide 16 text

K8sは⼀⾔で何ができる? K8sは、コンテナのアプリ運⽤のためのOSS 1. コンテナの組み合わせ利⽤ 2. スケールアウト 3. ロールアウト&ロールバック 4. 永続ストレージ利⽤ 5. ⾃⼰修復(可⽤性) 6. クラスタの分割利⽤ 7. 監視&ログ分析

Slide 17

Slide 17 text

特徴 元はGoogleのボーグ (Borg) ⾃社サービス運営のため開発されたシステム CNCFのもとOSS k8sとして開発継続 メガクラウドはk8sを提供 オンプレもクラウドも利⽤可 抽象化によりデベロッパがリリース可能

Slide 18

Slide 18 text

抵抗は無意味だ!同化する ボーグは、新スタートレック シリーズ最強の敵 圧倒的な組織⼒で⼈類を脅かす存在 Borgを元に作られたKubernetesは、圧倒的な⼒で 旧型の情報システムを同化するかもしれない、 降伏しろ 同化する Oh No! HELP!!! We are ボーグ

Slide 19

Slide 19 text

⾼良 真穂 (たから まほ) 過去デベロッパー、⾃ら開発したプログラムで特許取得 (⽇本、⽶国) 現在はクラウドのエバンジェリスト & ソリューション開発 QiitaにK8sの記事を投稿するのが趣味みたいになっている。

Slide 20

Slide 20 text

10分で判る koo-bar-net-ees の価値

Slide 21

Slide 21 text

基盤にロックインされない スキル分散を防⽌&インフラ⼈材不⾜を救う Master Node Worker Node Public Network Container Registry Services Cloud Service Storage Service Load Balancer Firewall k8sクラスタ制御 kubectlコマンド Server k8s基盤はクラウドベンダー or オンプレミス など さまざま 共通スキル

Slide 22

Slide 22 text

全員がk8sを知る必要は無い デベロッパーはアプリ開発に集中できる アプリケーション層 コンテナ層 (Docker) オーケストレータ層 (Kubernetes) インフラ層 (クラウドVSI, オンプレ物理サーバーなど) デベロッパー SRE コンテナのテスト 完了したよ OK, 後は任せて!

Slide 23

Slide 23 text

ロードバランサ機能を内蔵 YAML適⽤だけで、ロードバランサとマイクロサービスが稼動 サービス (LB) ポッド ポッド ポッド 仮想IP DNS登録 負荷分散 コンテナ化された アプリケーションや マイクロサービス 他アプリ YAMLで定義してデプロイ ウェブブラウザ or マイクロサービスの クライアント

Slide 24

Slide 24 text

ロードバランサ機能を内蔵 •サービスと関連システムの可⽤性はk8sが提供 •ポッド停⽌の復旧もk8sが⾃動対応 マイクロサービス で構成された アプリ サービスディスカバリー 機能A 機能B 機能C

Slide 25

Slide 25 text

YAMLの定義は? 基本これだけ ポッドのマニフェスト apiVersion: apps/v1 kind: Deployment metadata: name: ms-apl-ws spec: replicas: 3 selector: matchLabels: app: ms-apl-x template: metadata: labels: app: ms-apl-x spec: containers: - name: application-x image: appl-x:1.18 ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: apl-x spec: selector: app: ms-apl-x ports: - protocol: TCP port: 80 コンテナの可⽤性を制御 コンテナのイメージ名 サービス ロードバランサー APL-Xでアクセス可能 $ kubectl apply –f manifest.yml 実⾏はこれだけ 起動数

Slide 26

Slide 26 text

k8s他機能 •ネームスペース : クラスタの仮想化分割 • テストや本番環境⽤にクラスタを分割利⽤ • アクセス範囲、コマンドスコープ、CPU&メモリ制限 •コントローラ : 可⽤性&スケール • デプロイメント・コントローラ • デーモンセット、ステートフル •サービス: 内部や外部のエンドポイント提供 • 内部負荷分散 ClusterIP • 外部負荷分散 NodePort、Ingress、LoadBalancer

Slide 27

Slide 27 text

つまり、K8sに頼ると インフラエンジニアは どんどんダメに なるかも知れません

Slide 28

Slide 28 text

どちらを⽬指しますか? https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3% 83%8A#/media/File:Dole_container_is_placed_onto_a_truck.jpg http://military.wikia.com/wiki/Battle_of_Pusan_Perimeter_logistics

Slide 29

Slide 29 text

今⽇から無料で 始めるk8s

Slide 30

Slide 30 text

minikubeとは CNCF Kubernetesプロジェクトが提供 PCで使える学習&開発環境 https://github.com/kubernetes/minikube

Slide 31

Slide 31 text

Demo #1 コンテナで開発 そして k8sでリリース

Slide 32

Slide 32 text

デモ#1の概要 1. Minikubeをスタート 2. ウェブのポッドを起動 3. サービスを起動 4. ポッド&サービス等の関係を確認 5. ポッドをスケールする 6. Dashboardを開く 7. クリーンナップ

Slide 33

Slide 33 text

デモ#1 コマンド kubectl config get-contexts kubectl config use-context minikube minikube start minikube status kubectl run web --image=maho/webserver:v1 --port 80 kubectl expose deployment/web --type=NodePort kubectl get svc,pod http://192.168.99.100:31xxxx/ NodePortの番号で置き換え kubectl scale --replicas=3 deployment/web kubectl get pod -o wide minikube dashboard kubectl delete deploy web kubectl delete svc web

Slide 34

Slide 34 text

Demo #2 複数のクラウド上のk8s を使いこなす 参考資料 IKSとオンプレK8sのkubectlの認証情報のマージ⽅法 https://qiita.com/MahoTakara/items/897e551eb57084122ae9 GKE と IKS のコマンド対⽐ (for novice) https://qiita.com/MahoTakara/items/6fbfa7b8acf1491bd950

Slide 35

Slide 35 text

デモ#2 Node.jsアプリ DockerCEでのコンテナのビルドからクラウドまで 1. Dockerコンテナをビルド 2. ローカル環境でコンテナを実⾏ 3. DockerHubへプッシュ 4. kubernetesのマニフェストを確認 5. kubeclt apply –f で minikubeへデプロイ 6. 動作を確認 7. コンテキストを切り替えて、クラウドへデプロイ 8. できたら、GCPへもデプロイ

Slide 36

Slide 36 text

デモ#2 Node.jsアプリ ローカル環境でアプリケーション開発 cd myapp npm install DEBUG=myapp:* npm start http://localhost:3000/ cat Dockerfile docker build -t myapp:0.4 . この例では、Node.js express フレームワークの アプリを作成しておく必要があります。 参考資料 Express, Framework for Node.js https://expressjs.com/ node.js のバージョン管理ツール ndenv を試した https://qiita.com/MahoTakara/items/8fdebe32e8f326afa7f8

Slide 37

Slide 37 text

デモ#2 Node.js Dockerローカル コンテナのビルド docker build -t myapp:0.7 . docker run -d -p 3000:3000 myapp:0.7 curl http://localhost:3000/;echo コンテナの登録 docker images docker login docker tag myapp:0.7 maho/myapp:0.7 docker push maho/myapp:0.7 https://hub.docker.com/

Slide 38

Slide 38 text

デモ#2 Node.js ローカルk8s K8sへのデプロイ minikube kubectl config get-contexts Kubectl config use-context minikube kubectl get node kubectl apply -f myapp.yml kubectl get svc,pod http://192.168.99.100:31080/

Slide 39

Slide 39 text

デモ#2 Node.js IBM Cloud K8S K8sへのデプロイ パブリック IKS kubectl config get-contexts Kubectl config use-context k8s-5 kubectl get node kubectl apply -f myapp.yml kubectl get svc,pod curl http://161.202.***.***:31180

Slide 40

Slide 40 text

デモ#2 Node.js GCP GKE K8sへのデプロイ パブリック GKE kubectl config get-contexts Kubectl config use-context gcp kubectl get node kubectl apply -f myapp.yml kubectl get svc,pod gcloud compute instances list gcloud compute firewall-rules create np-1 --allow tcp:31180 curl http://35.200.***.***:31180

Slide 41

Slide 41 text

デモ#2のまとめ 同じ操作でローカル・GKE・IKS を使いこなす IBM Cloud IKS Google GKE Local k8s アプリ開発者 コンテナ

Slide 42

Slide 42 text

Demo #3 ロールアウト &ロールバック

Slide 43

Slide 43 text

無停⽌ロールアウトの動作 •ポッドの最低稼働数と超過数を制御 •切り替えの速度を制御しロールアウト リリース前のコンテナ 過渡期の状態 完了状態

Slide 44

Slide 44 text

YouTubeで、ご覧ください https://www.youtube.com/watch?v=ObA1OEVdrQY

Slide 45

Slide 45 text

ご紹介 IBM のご提供する Kubernetes

Slide 46

Slide 46 text

2つのKubernetes パブリッククラウド IBM Cloud Kubernetes Service オンプレミス⽤SW製品 IBM Cloud Private

Slide 47

Slide 47 text

IKSの7⼤特徴 1. 旧 IBM Bluemix PaaS の140サービスを継承して コンテナのランタイム環境 2. ⼤規模で⾼負荷にも対応できる性能 3. セキュリティリスクが低いIBM Cloud Dedicated, ICPまたはハイブリッド構成 4. 認証制度に合格しており、他社クラウドからの移⾏も容易 5. 無料版、安価で始め易い仮想サーバー、ベアメタルサーバー(4〜28コア) 6. IBM Cloud の VMwareベアメタル、ダイレクトリンク接続でオンプレ連携 7. 今後リリース、MZRでデータセンターレベルの障害にも対応

Slide 48

Slide 48 text

オンプレミス ⼤型サーバー Kubernetesが動くメインフレーム Linux on Z and Linux ONE Unix互換サーバーでICP IBM Power Systems

Slide 49

Slide 49 text

K8sで明るい未来を supported by IBM https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%86%E3% 83%8A#/media/File:Dole_container_is_placed_onto_a_truck.jpg http://military.wikia.com/wiki/Battle_of_Pusan_Perimeter_logistics

Slide 50

Slide 50 text

利⽤はこちらから https://console.bluemix.net/registration/

Slide 51

Slide 51 text

ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独⾃の⾒解を反映したものです。それらは情報提供の⽬的のみで 提供されており、いかなる参加者に対しても法律的またはその他の指導や助⾔を意図したものではなく、またそのような結果を⽣むものでもありません。本講演資料に 含まれている情報については、完全性と正確性を期するよう努⼒しましたが、「現状のまま」提供され、明⽰または暗⽰にかかわらずいかなる保証も伴わないものとし ます。本講演資料またはその他の資料の使⽤によって、あるいはその他の関連によって、いかなる損害が⽣じた場合も、IBMは責任を負わないものとします。 本講演資 料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使⽤を 規定する適⽤ライセンス契約の条項を変更することを意図したものでもなく、またそのような結果を⽣むものでもありません。 本講演資料でIBM製品、プログラム、またはサービスに⾔及していても、IBMが営業活動を⾏っているすべての国でそれらが使⽤可能であることを暗⽰するものではあり ません。本講演資料で⾔及している製品リリース⽇付や製品機能は、市場機会またはその他の要因に基づいてIBM独⾃の決定権をもっていつでも変更できるものとし、い かなる⽅法においても将来の製品または機能が使⽤可能になると確約することを意図したものではありません。本講演資料に含まれている内容は、参加者が開始する活 動によって特定の販売、売上⾼の向上、またはその他の結果が⽣じると述べる、または暗⽰することを意図したものでも、またそのような結果を⽣むものでもありませ ん。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使⽤した測定と予測に基づいています。ユーザーが経験する実際のスループットやパ フォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、⼊出⼒構成、ストレージ構成、および処理されるワークロードなどの考慮事項を 含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使⽤したか、またそれらのお客様が達成した結果の実例として⽰されたものです。実際の 環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、Linux ONE, IBM Power Systems, IBM Cloud, IBM Cloud Privateは、 世界の多くの国で登録されたInternational Business Machines Corporationの商標です。他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 © 2017 Google LLC All rights reserved. Google および Google ロゴは Google LLC の登録商標です。 Qiitaは、Increments株式会社の商標です。 Docker は、Docker, Inc.の商標です。 Linux(R)は⽶国及びその他の国におけるLinus Torvaldsの登録商標です。 VMwareおよびVMwareの製品名は、VMware, Inc.の⽶国および各国での商標または登録商標です。 UNIXは、⽶国およびその他の国におけるオープン・グループの登録商標です。 スタートレック、STAR TREKは Paramount Pictures社の登録商標です。 Xenは、Citrix Systems, Inc.の登録商標です。 Kubernetes は、The Linux Foundation の⽶国及びその他の国における登録商標⼜は商標. です。