OCHaCafe これからはじめる!Kubernetes基礎

6675c7b71b99f464ee9f504c6435e941?s=47 cotoc
July 17, 2019

OCHaCafe これからはじめる!Kubernetes基礎

こんにちは。Oracle Cloud Hangout Cafe、略してOCHa Cafe(おちゃかふぇ)です!

Oracle Cloud Hangout Cafeは、クラウドネイティブ時代の開発者を対象に巷で話題のオープン・スタンダードなテクノロジーをテーマに取り上げ、 短時間でガッツリ学んでお持ち帰りいただくテクニカルな勉強会シリーズです。

知識習得やスキル向上の場として是非ご活用ください!

https://ochacafe.connpass.com/

Season2のテーマは以下を予定しています。(全6回を予定)
今回は【これからはじめる!Kubernetes基礎】をお送りします。

# テーマ キーワード
1 これからはじめる!Kubernetes基礎 Kubernetes
2 一体何モノなの?GraalVM 入門 GraalVM
3 Serverless/Fnで始める快適Developer Life FaaS/Fn Project
4 Cloud Native×Streaming はじめの一歩 Spark/Streaming
5 Cloud Native時代のモダンJavaの世界 MicroProfile/Helidon
6 変幻自在♪ 広がるKubernetesのエコシステム Kubernetse/Service Broker
※発表順序・テーマは変更する可能性があります。
テーマ毎にOracle Cloudを使ったデモやアーキテクチャをご紹介します。

6675c7b71b99f464ee9f504c6435e941?s=128

cotoc

July 17, 2019
Tweet

Transcript

  1. 1.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | これからはじめる!Kubernetes基礎 日本オラクル株式会社 クラウド事業戦略統括 クラウドソリューション推進本部 ソリューションエンジニア 茂 こと Oracle Cloud Hangout Café Season2 #1
  2. 2.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesが何者かを知り 仕組みをざっくり理解すること 今日の目標 2
  3. 3.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 自己紹介 3 • 茂 こと (しげる こと) • 日本オラクルのソリューションエンジニア – 入社後数年Oracle DB、Exadataを担当 – 昨年からCloud Nativeソリューションの色々を担当 • CloudNative Days Tokyo 2019:7/23 コミュニティセッション 【CNCFサンドボックスプロダクト15本ノック!】 登壇します。宜しくおねがいします。 @cotoc88 撮影:JapanコンテナDays実行委員会 https://cloudnativedays.jp/cndt2019/
  4. 4.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 8/6,7 Modern Cloud Day Tokyo 4 宜しくおねがいします…
  5. 5.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 本日の内容 • Introduction • Docker/コンテナ仮想化とは • Kubernetesとは • Kubernetesの主要なリソース • Kubernetesを実現するプロセス群 5
  6. 6.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Introduction システムに求められるニーズと開発手法のトレンド 6
  7. 7.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 企業システムに求められるニーズ • ビジネスにもとめられる進化のスピードと品質 – サービスの早期リリース – 市場の動向/反応を早期フィードバックして対応 – サービス停止による機会損失をなくす • 企業システムは変化するビジネス要件に短い時間で対応(リリース) できることが求められるようになり、それに伴い開発アプローチも変化 7 社内業務の効率化から新ビジネスの創造へ
  8. 8.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | リリース ITインフラ アプリケーション 月次 週次 日次/時間毎 複数サーバ VM(仮想マシン) 開発アプローチ シンプルな開発モデル ウォーターフォール DevOps Agile、CI/CD コンテナ .Net Java クラサバから Webアプリへ マイクロサービス A B C 三層アーキテクチャ DB APP 2008 2019 ~2000 システム開発アプローチの変遷 8
  9. 9.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 高頻度リリースを実現するための開発トレンド 9 アーキテクチャと開発手法の両面から高頻度リリースの取り組みが行われている 実行環境 • マイクロサービス・アーキテクチャ – 疎結合な複数サービスを組み合わせる事で、 俊敏にアプリケーションを構築する設計思想 – 変更の影響範囲をサービス単位に留められ るため、高頻度のリリースに適する • 継続的インテグレーション/デリバリー – ソースコードの変更を契機にビルドからテスト までを自動化 – テストされたアプリを環境毎に自動でデプロイ – 自動化に高頻度リリースを実現する アップデート ビルド コミット 自動化された 一連のテスト リリースプロセスの 反復 環境が分離されているので システム全断が起きにくい
  10. 10.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Cloud Nativeなアプリケーションであるとは? 10 ビジネスに求められる「スピード」と「柔軟性・拡張性」を実現する設計思想 クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミッ クな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 この アプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミューダブルインフラストラクチャ、および 宣言型APIがあります。 これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動 化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことがで きます。 (略) コンテナ、コンテナ・オーケストレーターはあくまで実現手段の1つ https://github.com/cncf/toc/blob/master/DEFINITION.md CNCF Cloud Native Definition v1.0
  11. 11.
  12. 12.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Docker/コンテナ仮想化とは • Docker – 2013年に登場したコンテナ型仮想化技術 – コンテナのランタイムに加え、コンテナイメージの作成・配布のエコシステムを提供 • コンテナ型仮想化の特徴 – コンテナの容量が非常に小さい(数MB~)。動作が軽い → 手軽に使いたいソフトウェアのコンテナを入手して、どんな環境でもすぐに 動かすことができる 軽量・高速な仮想マシン + それを作成・配布するエコシステム
  13. 13.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | コンテナ型仮想化 • 特徴 – 軽容量/高速 • カーネル部分をホストOSと共有するため軽量 • ゲストOSが無い分起動が早い • オーバヘッドが少なくパフォーマンスが高い – 実行環境の隔離 • アプリ間の影響が最小限 – 可搬性 • 環境毎の差異をコンテナが吸収 • 13 コンテナ型仮想化という技術で実現される仮想マシンの一種 H/W ホストOS Bin/Lib アプリA Bin/Lib アプリB Bin/Lib アプリC Bin/Lib アプリD コンテナ管理基盤
  14. 14.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | ハイパーバイザー型 コンテナ型 仮想化の実現方式 仮想マシン(VM)は、OSの完全なコピー(ゲストOS)を保持する VM毎に、OSをインストールする必要がある カーネル部分をホストOSと共有するため、 VM毎に、OSをインストールする必要は無い 性能 ゲストOSの起動を伴う上、HWエミュレートのオーバーヘッド有り ホストOSから見るとアプリケーションのプロセス起動のみ HWエミュレートによるオーバーヘッドはほぼ無い ゲストイメージ サイズ 仮想マシンにゲストOSを含むためマシンイメージが大きく、 ストレージの容量が大きい (数十GB~) ゲストOSのイメージを所持する必要がなく、 ストレージの容量が小さい (数MB~) OSの種類 複数のゲストOSを選択可能 (Linux,Windows,その他) ホストOSに依存、異なるOSのシステムは動かせない ホストOS ハイパーバイザー Bin/Lib アプリA Bin/Lib ゲストOS ゲストOS H/W アプリB アプリC ハイパーバイザー型 軽 量 高 速 コンテナ型 H/W ホストOS Bin/Lib アプリA Bin/Lib アプリB Bin/Lib アプリC Bin/Lib アプリD コンテナ管理基盤 仮想化実現方式の違い ハイパーバイザー型 vs コンテナ型 14
  15. 15.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Dockerがもたらしたもの • 優れた開発者エクスペリエンス – 手軽に使いたいソフトウェアのコンテナを入手して、どんな環境でもすぐに動かすことができる • Immutable Infrastructure – 可搬性、再利用性:アプリケーションの実行環境をコンテナとしてパッケージ化 – 同等の環境を、簡単に構築することができる 手作業での テスト コンテナ レジストリ 自動受け入れ テスト 自動 キャパシティ テスト リリース コミットステージ ソースコード リポジトリ コンテナとして実行環境をパッケージし、各環境で使い回す コミット
  16. 16.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • ローカル開発環境 – アプリケーション開発者の ローカル開発環境で、開発 に必要なソフトウェアを立ち 上げる – e.g. • アプリケーションが参照する テストデータ入りのDB • テスト環境 – 複数のテスト環境を、短期 間で自動構築 – テストフェーズ毎に同等の 環境を作ることでテストの品 質を向上を向上 • CI/CDツール – アプリケーションのビルド等 で必要なライブラリを、コン テナにパッケージングして おき、その環境内でビルド – 確実に同一環境内でアプリ ケーションが作成されること を保証する Dockerの主なユースケース 軽量・高速な仮想マシン + それを作成・配布するエコシステム
  17. 17.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetes コンテナ・オーケストレーター 17
  18. 18.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | コンテナの運用で明らかになった課題 18 様々な運用・管理のオペレーションを大量のコンテナに対して行う必要がある 障害対応 ネット ワーク 監視 サービス ディスカバリ スケー リング アップ デート データ 永続化
  19. 19.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | コンテナ・オーケストレーター • 複数コンテナのデプロイ、スケーリング等を自動管理するプラットフォーム •Kubernetes がデファクトスタンダード 大量のコンテナを管理・運用にコンテナ・オーケストレーターの利用が有効 ✓ スケジューリング 分散配置 ✓ 手動/自動でスケーリング ✓ 複数コンテナをまとめて制御 ✓ 障害時のコンテナ自動復旧 ✓ ネットワークアクセスの管理 ✓ コンテナの監視 etc… 19
  20. 20.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • デプロイの管理 – 適切なコンテナの配置 • 自動復旧 – コンテナの障害時にはコン テナの数を一定に保つ 20 • スケーリング – コンテナの数を手動、また は自動で増やす・減らす Kubernetesが行うことの例 >_ >_ replicas: 3
  21. 21.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 主要コンテナ・オーケストレーターの人気度 • 2017の1年間でKubernetesが大きく躍進した一方、他のオーケストレー ターに伸びがなかった 2017年にKubernetesが他のオーケストレーターを大きく引き離した Googleトレンドでの主要コンテナ・オーケストレーターの人気度 2017 21
  22. 22.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesは他のオーケストレーターと何が違うのか • 様々なOSSと組み合わせることにより、柔軟に機能拡張可能 ① 柔軟に機能拡張することが可能。様々な用途に適用できる • コンテナ運用をさらに効率化・高度化 – 詳細なメトリック監視と可視化: • Prometheus + Grafana – コンテナのログの転送収集: • Fluentd / Fluent Bit – ネットワークトラフィックの制御: • Istio + Envoy • Kubernetesの適用領域の拡大 – 機械学習プラットフォーム: • Kubeflow – 分散ストレージ • Rook – 分散型データベース • Vitess • CNCFのバックアップにより多数OSSプロジェクトが活発に活動するようになり、 Kubernetesを中心にしたOSSのエコシステムが成立 22
  23. 23.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesは他のオーケストレーターと何が違うのか • Kubernetesクラスタの構築方法に様々な選択肢がある • 要件に応じた最適な環境を手に入れることができる ② Kubernetesの利用を始める上で幅広い選択肢がある 自由なカスタマイズ、エッジな要件への対応 構築・運用管理の省力化 フルスクラッチ インストール Kubernetes構築ツールを利用 したインストール マネージドKubernetesサービス ・Oracle Container Engine for Kubernetes ・Google Kubernetes Engine ・Azure Kubernetes Service ・Amazon Elastic Container Service for Kubernetes ・Kubeadm ・Rancher ・Terraformインストーラ for OCI ・Kubespray ・Kops 23
  24. 24.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesの宣言的なオペレーション • Kubernetesクラスタ上で動作させるリソースをマニフェストで定義 • マニフェストはYAML(Yet Another Markup Language)形式で記述する ✓ 利便性:シンプルな記述方式 ✓ メンテナンス: YAMLファイルをソース管理することで変更を追跡可能 ✓ 柔軟性: コマンドラインより複雑な構造を作成可能 24 マニフェストで「あるべきリソースの状態」を宣言 apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.15 1 2 3 4 5 6 7 8 9 10 Kubernetesクラスタ上にはマニフェストの 定義に従いオブジェクトが生成される
  25. 25.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetes利用環境の全体像 • 大きく分けて、Kubernetesクラスタ、kubectl、コンテナレジストリで構成 Kubernetesクラスタ >_ kubectl(コマンドラインツール) ノードとネットワーク コンテナ レジストリ 25
  26. 26.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesの主要なリソース • Pod – 複数のコンテナを束ね管理する • ReplicaSet – Pod数(レプリカ数)を維持、管理する • Deployment – Rolling UpdateのためにReplicaSetを管理する • Service – Podに対するクラスタ内外のアクセスルーティング を制御する ReplicaSet Deployment Service Pod コンテナ User 26
  27. 27.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesの操作 • Kubernetesの操作は kubectl コマンドラインツールを使用 • kubectlはAPI Server(後述)が提供するREST APIの操作を行う 27 ReplicaSet Deployment Service Pod コンテナ >_ Kubectl (コマンドラインツール) etcd API Server Admin マニフェストの定義(あるべき 状態)が保存される
  28. 28.
  29. 29.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 再掲:Kubernetesの主要なリソース • Pod – 複数のコンテナを束ね管理する • ReplicaSet – Pod数(レプリカ数)を維持、管理する • Deployment – Rolling UpdateのためにReplicaSetを管理する • Service – Podに対するクラスタ内外のアクセスルーティング を制御する ReplicaSet Deployment Service Pod コンテナ User 29
  30. 30.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Pod • コンテナの生成/破棄等の最小単位 – 1つのPodに複数のコンテナを定義できる(例:サイドカー・パターン) – 定義された複数のコンテナは必ず同一のノードにデプロイされる – Pod内の複数のコンテナはクラスタ内のネットワークで通用するIPが 1つのPodに1つ割り当てられる 複数のコンテナを束ね管理する単位 ノード2 ノード3 ノード1 Pod コンテナ Pod内のコンテナは 共通のライフサイクルとなる apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.15 1 2 3 4 5 6 7 8 30
  31. 31.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Podのデザインパターン • サイドカー・パターン – 1つのPodの中に主となるメインコンテナと、補助するサイドカーコンテナを配置する • Pod内のコンテナは同一のIPアドレスを共有するため、ローカルホストでアクセス可能 • Podにボリュームをアタッチすることでコンテナ間のデータ共有も可能 – 利用例:Webサーバーコンテナとログの転送用のコンテナ 31 Main Side Car Pod 127.0.0.1 Vol Write Read コンテナを分離するメリット ✓ 個々の処理に必要なリソースを柔軟に選択 ✓ 開発の分離 ✓ 組み合わせが柔軟 ✓ 再利用可能 ✓ 独立してUpgarade可能
  32. 32.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Podのヘルスチェック(コンテナの監視) • Liveness Probe:コンテナ(プロセス)が起動しているかどうか確認 – 失敗を検知した場合はPodを自動的に再起動 • Readiness Probe:アプリケーションのリクエストを受け入れられるか確認 – 例えばロードや重いリクエストの処理中で別のリクエストが返せない場合を想定 – 失敗を検知した場合はルーティングの対象から外されて、成功するまで該当のPod にリクエストが来なくなる 32 ヘルスチェックの方法 成功の判断 任意のコマンドを実行 ステータスコード0で成功 特定のポート/パスにHTTPリクエストを行う HTTPステータスコードが200以上400未 満で成功 特定のポートにTCPチェックを行う ポートがオープンしていたら成功 決まった間隔でヘルスチェックを行う
  33. 33.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | ReplicaSet • 指定したPod数を維持するリソース – ReplicaSetに管理されているPodの特定にはラベル(後述)を用いる Pod数(レプリカ数)を維持、管理する ReplicaSet apiVersion: apps/v1 kind: ReplicaSet metadata: app: nginx ## ラベル spec: replicas: 3 ## Pod数 template: ## Pod テンプレート metadata: labels: app: nginx ## ラベル spec: containers: - name: nginx-container image: nginx:1.15 ports: - コンテナPort: 80 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 spec.replicas: 3 PodはReplicaSetの定義内の Pod テンプレートをもとに作成される Pod テンプレート app:nginx Podが死んだ場合でも 個数が3になるように管理する app:nginx app:nginx app:nginx Label 33
  34. 34.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Label/Label Selector • リソースにラベルをつけ、識別、グループ分けをし管理する仕組み • Label – リソースに定義する Key-Valueのペアセット – 任意のラベルを定義可能 • Label Selector – Labelの値からリソース検索やフィルタリング可能 – リソース同士の関連付け 34 app:nginx app:nginx app:nginx env:stage env:prod env:dev
  35. 35.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Deployment • RollingUpdateするためにReplicaSetを管理するリソース – アプリケーションの更新を行う場合新しいコンテナイメージをPodテンプレートに指定 するだけでRollingUpdate可能 apiVersion: apps/v1 kind: Deploymet metadata: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx-container image: nginx:1.16 ##コンテナバージョン指定 ports: - コンテナPort: 80 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ReplicaSet spec.replicas: 3 Deployment ReplicaSet spec.replicas: 3 nginx:1.15 nginx:1.15 nginx:1.15 nginx:1.16 nginx:1.16 nginx:1.16 旧ReplicaSetのPodは順次削除される 新しいReplicaSetが作られ Podも順次作成される アプリを更新 35
  36. 36.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Service ClusterIP – クラスタ内からのリクエストのみを受け入れる 方式 ロ ー ド バ ラ ン サ Loadbalancer – 専用のロードバランサをプロビジョニングし、 クラスタ外からのリクエストを受け入れる方式 36 • Podに対するクラスタ内外からのリクエストをルーティング • 複数のタイプから用途によって選択 インフラが対応している必要がある
  37. 37.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 追加で抑えておきたいリソース • ConfigMap – コンテナの設定情報をkey-valueの形式で保持するリソース • Secret – 機密情報を保持するリソース • Namespace – クラスターを区画に分けて 管理するための論理領域 37 ReplicaSet Deployment Service User Namepsace Secret/ConfigMap
  38. 38.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | ConfigMap • コンテナに設定情報を渡すために使うリソース • ConfingMapに記述した設定情報を、2通りの方法で渡すことができる – コンテナの環境変数として渡す – 設定情報が記述されたファイルをコンテナにマウントさせたように見せる 38 apiVersion: v1 kind: ConfigMap metadata: name: mycnf namespace: mysql data: my.cnf: | [mysqld] log_error=/var/lib/mysql/error_test.log default_authentication_plugin=mysql_native_password [mysql] prompt="innodb>" 1 2 3 4 5 6 7 8 9 10 11 12 Vol Config Map Key/Value形式で記述 ・Manifestから作成 ・ファイルを指定して作成 (--from-file) Manifestの例
  39. 39.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Secret • 機密度の高いデータを保持する際に使うリソース • ConfigMapと違い、コンテナでSecretのデータを読み取ると必ずメモリ内の みに保持されて不要になったら削除される(tmpfsが使用されている) • 値はBASE64エンコードしてクラスターに格納する 39 Manifestの例 apiVersion: v1 kind: Secret metadata: name: mysql-root-user-secret namespace: mysql data: password: XXXXXXX 1 2 3 4 5 6 7 Vol Secret Key/Value形式で記述 ・Manifestから作成 ・kubectlから直接作成 ・ファイルから作成 ・envfileから作成
  40. 40.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Namespace • クラスターを区画に分けて管理するための論理領域 • 使い方 – 商用、検証、開発環境で1つのクラスタの中で分ける – 開発チーム単位で分ける – あるプロダクト単位で分ける 40 Namepsace: hhiroshell Namepsace: cotoc
  41. 41.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesを実現するプロセス群 41
  42. 42.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetes利用環境の全体像 • 大きく分けて、Kubernetesクラスタ、kubectl、コンテナレジストリで構成 Kubernetesクラスタ >_ kubectl(コマンドラインツール) ノードとネットワーク コンテナ レジストリ 42
  43. 43.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesクラスタを実現するプロセス群 >_ kubectl API Server Scheduler kubelet コンテナ runtime Controller Manager ※主要なプロセスを記載 kube-proxy Masterノード Workerノード etcd Kubernetesクラスタ 43
  44. 44.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesクラスタを実現するプロセス群 >_ kubectl API Server Scheduler kubelet コンテナ runtime Controller Manager ※主要なプロセスを記載 kube-proxy 44
  45. 45.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Masterノードのコンポーネント • API Server – Kubernetesの操作、コンポーネントがやり取りするための受け口 etcdを参照、更新、削除等を行うAPIサーバ • Controller Manager – 各リソースのコントローラーを起動制御するマネージャー – コントローラーがクラスタ上のリソースが定義された状態を保つように動作 • Scheduler – Podをどのノードに割り当てるかを決定する • etcd – Kubernetesクラスタの構成情報を保持する分散KVS 45
  46. 46.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | API Server と etcd • API Server – API Server以外のコンポーネントは直接etcdを参照せず、APIサーバーを通してリソー スにアクセスする – kubectlコマンドも、APIサーバーへのアクセスを通して操作を行う – リソース情報のCRUD(Create/Read/Update/Delete)処理を行う – 認証、認可、アクセス制御の仕組みを提供 • etcd – リソースの構成情報はすべてetcdに保存される – 高信頼分散KVS 46 Kubernetesの操作、コンポーネントがやり取りするための受け口 >_ kubectl API Server Scheduler kubelet Controller Manager kube- proxy
  47. 47.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Controller Manager 47 ControllerはReconciliation Loop(突き合わせループ)により宣言した状態を維持する • Controller Managerは各リソースのコ ントローラーを起動し管理するマネー ジャー • Controllerはマニフェストにより定義さ れた状態を保つように動作するコン ポーネント – Deployment, ReplicaSetなどリソース毎に 専用のControllerが存在 Observe Analyze Act オブジェクトの現在の 状態を確認する オブジェクトの現在の状態と 期待する状態を比較する 状態を一致させるために 必要な処理を行う
  48. 48.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Scheduler • 新しく作られたPod(NodeNameの指定がないPod)をどのWorkerノードで 動作させるか、ノードのリソース使用状況(CPU、メモリ)やラベルから判断 48 新しく作られたPodのノードへの割り当てを行うスケジューラー NEW Pod Scheduler NodeName: ノード2 ノード1 ノード2 ノード3 kubelet/docker NEW‼ NodeName:_ kubelet/docker kubelet/docker
  49. 49.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesクラスタを実現するプロセス群 >_ kubectl API Server Scheduler kubelet Container runtime Controller Manager ※主要なプロセスを記載 kube-proxy 49
  50. 50.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Workerノードのコンポーネント • Container runtime – コンテナのランタイム Docker など • kubelet – Workerノード上に配置されるエージェント – Podの起動停止やPodの状態をAPI Serverに送り、更新する役割を持つ • kube-proxy – コンテナとの接続を保証するためにノードのNWを管理する – Serviceの設定を元にPodへのアクセスをルーティングする 50
  51. 51.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | kubelet • 各ノードで動作するエージェントで、Podの起動・管理を行う – APIサーバーと通信して、自分のノード上で実行されるべきPodを発見 – Podの起動停止 – マシン上で実行されるコンテナのヘルスチェックと異常時には再起動を担当 – コンテナの状態をAPI Serverに送る 51 kubelet Container runtime Workerノード
  52. 52.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | kube-proxy • コンテナとの接続を保証するためにノードのNWを管理する • Serviceの設定を元にPodへのアクセスをルーティングする 52 API Server kube-proxy kube-proxy
  53. 53.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Kubernetesクラスタを実現するプロセス群 >_ kubectl API Server Scheduler kubelet コンテナ runtime Controller Manager ※主要なプロセスを記載 kube-proxy 53
  54. 54.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Podを作るまでの流れ 54 参考:Heptio.com Create Pod Flow https://blog.heptio.com/core-kubernetes-jazz-improv-over-orchestration-a7903ea92ca
  55. 55.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | マネージドKubernetesを利用する場合 このパートで書いたことの殆どは意識しなくてよい…! >_ kubectl API Server Scheduler kubelet コンテナ runtime Controller Manager ※主要なプロセスを記載 kube-proxy Managed Service Kubernetes 55
  56. 56.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | OKEでKubernetesクラスタを作る Demo① 56
  57. 57.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Oracle Container Engine for Kubernetes • カスタマイズなしのピュアなKubernetes実装 • Certified Kubernetes Program適合[^1] • GUI / コマンドラインツールによるクラスタの プロビジョニング、アップグレード • OCIのストレージ、ロードバランサーとの統合[^2] マネージドKubernetesサービス [^1]: Kubernetesクラスタの動作の一貫性とアプリの可搬性を保証する目的で、CNCF が策定した認定プログラム [^2]: StorageClass と ServiceのLoadBalancerタイプが使用可能 i 57
  58. 58.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | Oracleが提供するKubernetesのアーキテクチャ • ハイパフォーマンスな次世代IaaS上にKubernetesクラスタを構築 • Availability Domainを横断してクラスタを構成し、高可用性を実現 OracleのIaaSの能力を生かすKubernetesクラスタ構成 Kubernetes クラスタ Availability Domain 1 Availability Domain 2 Availability Domain 3 58
  59. 59.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | エンタープライズグレードのパフォーマンス • ミッションクリティカルなクラスタを運用するのに最適な基盤 – 高速SSDを搭載したベアメタル(非仮想)サーバー – 3つのAvailability Domains (AD) でリージョンを構成。AD間、AD内のホスト間を、低レ イテンシー、広帯域のN/Wで接続 高性能次世代IaaSがもたらすハイパフォーマンス 59 https://www.accenture.com/t20171003T083750Z__w__/us- en/_acnmedia/PDF-62/Accenture-Enterprise-Workloads-Meet-Cloud.pdf OCI Other AD1 AD2 AD3 AD間: 1Tb/s, < 500µs AD内: 25Gb/s, < 100µs 第3者機関によるN/W性能検証結果
  60. 60.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 【参考】パフォーマンスに適用されるSLA Availability, Management, and Performance SLAs – Includes FastConnect availability SLA – Includes compute, storage, database management SLAs – Includes local storage, network block storage, and network performance SLAs パフォーマンスを含む広範なSLAを、他社に先駆けて提供 60
  61. 61.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | アプリを動かしてみよう Demo② 61
  62. 62.

    Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | • Kubernetes完全ガイド (impress top gear) – 青山 真也さん • Kubernetes実践ガイド クラウドネイティブア プリケーションを支える技術 (impress top gear) – 北山 晋吾さん、早川 博さん • cndjp: 一晩でKubernetesを覚えて帰ろう。ワ ンナイトBootCamp! -- cndjp#10 – yosshi_さん • Cloud Native関連コミュニティの皆様 • ブロガーの皆様 62 Special Thank!!
  63. 63.