Kubernetesで切り開くアプリ配信の明るい未来

 Kubernetesで切り開くアプリ配信の明るい未来

B8d0f591da3869f3bb9d5473853be2a2?s=128

Maho Takara

June 11, 2018
Tweet

Transcript

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

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

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

  4. コンテナとは • コンテナの起動は早い、軽量 • 必要なコードセットを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 … …
  5. 賢者は歴史に学び 愚者は経験に学ぶ

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

  7. https://www.jsanet.or.jp/seminar/text/seminar_177.html 物流コンテナによる⾰命 コンテナの発明者は、全⽶有数のトラッ ク運送会社のオーナーとなったマルコム ・マクリーン(Malcom P. McLean) 国際貨物輸送の分野に 海陸⼀貫輸送という⼤変⾰ 1970年代には世界の主要航路のコンテナ

    化がほぼ完了した。わずか10年程度でこ れほど急激な形態の変化が起こったのは 海運史上でも他に例がない。 https://en.wikipedia.org/wiki/Malcom_McLean
  8. 港湾荷役のボトルネックを解消 物流コストの削減とスピードアップ コンテナ⾰命は業務改⾰ 陸海⼀貫輸送 海上輸送 陸送(トラック) 陸送(鉄道) 港湾荷役 港湾荷役 コンテナ船

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

  10. コンテナ以前のシステム オンプレ or クラウド 本番 HA1 QA-HA1 DEV#1 本番 HA2

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

  13. どちらを⽬指しますか? 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

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

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

  16. K8sは⼀⾔で何ができる? K8sは、コンテナのアプリ運⽤のためのOSS 1. コンテナの組み合わせ利⽤ 2. スケールアウト 3. ロールアウト&ロールバック 4. 永続ストレージ利⽤

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

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

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

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

  21. 基盤にロックインされない スキル分散を防⽌&インフラ⼈材不⾜を救う Master Node Worker Node Public Network Container Registry

    Services Cloud Service Storage Service Load Balancer Firewall k8sクラスタ制御 kubectlコマンド Server k8s基盤はクラウドベンダー or オンプレミス など さまざま 共通スキル
  22. 全員がk8sを知る必要は無い デベロッパーはアプリ開発に集中できる アプリケーション層 コンテナ層 (Docker) オーケストレータ層 (Kubernetes) インフラ層 (クラウドVSI, オンプレ物理サーバーなど)

    デベロッパー SRE コンテナのテスト 完了したよ OK, 後は任せて!
  23. ロードバランサ機能を内蔵 YAML適⽤だけで、ロードバランサとマイクロサービスが稼動 サービス (LB) ポッド ポッド ポッド 仮想IP DNS登録 負荷分散

    コンテナ化された アプリケーションや マイクロサービス 他アプリ YAMLで定義してデプロイ ウェブブラウザ or マイクロサービスの クライアント
  24. ロードバランサ機能を内蔵 •サービスと関連システムの可⽤性はk8sが提供 •ポッド停⽌の復旧もk8sが⾃動対応 マイクロサービス で構成された アプリ サービスディスカバリー 機能A 機能B 機能C

  25. 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 実⾏はこれだけ 起動数
  26. k8s他機能 •ネームスペース : クラスタの仮想化分割 • テストや本番環境⽤にクラスタを分割利⽤ • アクセス範囲、コマンドスコープ、CPU&メモリ制限 •コントローラ :

    可⽤性&スケール • デプロイメント・コントローラ • デーモンセット、ステートフル •サービス: 内部や外部のエンドポイント提供 • 内部負荷分散 ClusterIP • 外部負荷分散 NodePort、Ingress、LoadBalancer
  27. つまり、K8sに頼ると インフラエンジニアは どんどんダメに なるかも知れません

  28. どちらを⽬指しますか? 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

  29. 今⽇から無料で 始めるk8s

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

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

  32. デモ#1の概要 1. Minikubeをスタート 2. ウェブのポッドを起動 3. サービスを起動 4. ポッド&サービス等の関係を確認 5.

    ポッドをスケールする 6. Dashboardを開く 7. クリーンナップ
  33. デモ#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
  34. Demo #2 複数のクラウド上のk8s を使いこなす 参考資料 IKSとオンプレK8sのkubectlの認証情報のマージ⽅法 https://qiita.com/MahoTakara/items/897e551eb57084122ae9 GKE と IKS

    のコマンド対⽐ (for novice) https://qiita.com/MahoTakara/items/6fbfa7b8acf1491bd950
  35. デモ#2 Node.jsアプリ DockerCEでのコンテナのビルドからクラウドまで 1. Dockerコンテナをビルド 2. ローカル環境でコンテナを実⾏ 3. DockerHubへプッシュ 4.

    kubernetesのマニフェストを確認 5. kubeclt apply –f で minikubeへデプロイ 6. 動作を確認 7. コンテキストを切り替えて、クラウドへデプロイ 8. できたら、GCPへもデプロイ
  36. デモ#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
  37. デモ#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/
  38. デモ#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/
  39. デモ#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
  40. デモ#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
  41. デモ#2のまとめ 同じ操作でローカル・GKE・IKS を使いこなす IBM Cloud IKS Google GKE Local k8s

    アプリ開発者 コンテナ
  42. Demo #3 ロールアウト &ロールバック

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

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

  45. ご紹介 IBM のご提供する Kubernetes

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

  47. IKSの7⼤特徴 1. 旧 IBM Bluemix PaaS の140サービスを継承して コンテナのランタイム環境 2. ⼤規模で⾼負荷にも対応できる性能

    3. セキュリティリスクが低いIBM Cloud Dedicated, ICPまたはハイブリッド構成 4. 認証制度に合格しており、他社クラウドからの移⾏も容易 5. 無料版、安価で始め易い仮想サーバー、ベアメタルサーバー(4〜28コア) 6. IBM Cloud の VMwareベアメタル、ダイレクトリンク接続でオンプレ連携 7. 今後リリース、MZRでデータセンターレベルの障害にも対応
  48. オンプレミス ⼤型サーバー Kubernetesが動くメインフレーム Linux on Z and Linux ONE Unix互換サーバーでICP

    IBM Power Systems
  49. 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

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

  51. ワークショップ、セッション、および資料は、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 の⽶国及びその他の国における登録商標⼜は商標. です。