Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for Maho Takara

Maho Takara

June 11, 2018
Tweet

More Decks by Maho Takara

Other Decks in Technology

Transcript

  1. コンテナとは • コンテナの起動は早い、軽量 • 必要なコードセットを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 … …
  2. コンテナ以前のシステム オンプレ or クラウド 本番 HA1 QA-HA1 DEV#1 本番 HA2

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

    Services Cloud Service Storage Service Load Balancer Firewall k8sクラスタ制御 kubectlコマンド Server k8s基盤はクラウドベンダー or オンプレミス など さまざま 共通スキル
  5. ロードバランサ機能を内蔵 YAML適⽤だけで、ロードバランサとマイクロサービスが稼動 サービス (LB) ポッド ポッド ポッド 仮想IP DNS登録 負荷分散

    コンテナ化された アプリケーションや マイクロサービス 他アプリ YAMLで定義してデプロイ ウェブブラウザ or マイクロサービスの クライアント
  6. 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 実⾏はこれだけ 起動数
  7. k8s他機能 •ネームスペース : クラスタの仮想化分割 • テストや本番環境⽤にクラスタを分割利⽤ • アクセス範囲、コマンドスコープ、CPU&メモリ制限 •コントローラ :

    可⽤性&スケール • デプロイメント・コントローラ • デーモンセット、ステートフル •サービス: 内部や外部のエンドポイント提供 • 内部負荷分散 ClusterIP • 外部負荷分散 NodePort、Ingress、LoadBalancer
  8. デモ#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
  9. デモ#2 Node.jsアプリ DockerCEでのコンテナのビルドからクラウドまで 1. Dockerコンテナをビルド 2. ローカル環境でコンテナを実⾏ 3. DockerHubへプッシュ 4.

    kubernetesのマニフェストを確認 5. kubeclt apply –f で minikubeへデプロイ 6. 動作を確認 7. コンテキストを切り替えて、クラウドへデプロイ 8. できたら、GCPへもデプロイ
  10. デモ#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
  11. デモ#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/
  12. デモ#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/
  13. デモ#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
  14. デモ#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
  15. IKSの7⼤特徴 1. 旧 IBM Bluemix PaaS の140サービスを継承して コンテナのランタイム環境 2. ⼤規模で⾼負荷にも対応できる性能

    3. セキュリティリスクが低いIBM Cloud Dedicated, ICPまたはハイブリッド構成 4. 認証制度に合格しており、他社クラウドからの移⾏も容易 5. 無料版、安価で始め易い仮想サーバー、ベアメタルサーバー(4〜28コア) 6. IBM Cloud の VMwareベアメタル、ダイレクトリンク接続でオンプレ連携 7. 今後リリース、MZRでデータセンターレベルの障害にも対応
  16. ワークショップ、セッション、および資料は、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 の⽶国及びその他の国における登録商標⼜は商標. です。