Successfully reported this slideshow.
Your SlideShare is downloading. ×

Kubernetes ときどき Serverless -- cndjp第1回勉強会

Kubernetes ときどき Serverless -- cndjp第1回勉強会

Download to read offline

2017/11/22 開催したcndjp第1回勉強会の資料です。
Kubernetesの基礎的な内容と、FaaSフレームワークのFn Projectの紹介。

2017/11/22 開催したcndjp第1回勉強会の資料です。
Kubernetesの基礎的な内容と、FaaSフレームワークのFn Projectの紹介。

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Kubernetes ときどき Serverless -- cndjp第1回勉強会

  1. 1. #cndjp1
  2. 2. ごあいさつ
  3. 3. 自己紹介 • 早川 博(はやかわ ひろし) • 日本オラクル所属 • Pre-Sales Engineer / Tech Evangelist (new!) • Java SE/EE, Microservices/DevOps @hhiroshell
  4. 4. この勉強会について • cndjp - Cloud Native Developers JP • Cloud NativeなOSSスタックを対象とした勉強会シリーズ • オープンソース中心 • 楽しく学ぶ、深く学ぶ CNCFが出しているCloud Native Landscapeに載っている ソフトウェア(→次ページ)
  5. 5. cndjp #1-#3 cndjp #4~
  6. 6. Kubernetes ときどき Serverless #cndjp1
  7. 7. 前半戦 Kubernetes基礎
  8. 8. 前半戦のメニュー 1. Kubernetesってなんですか 2. Kubernetesの全体像を理解する 3. Kubernetesクラスター大解剖
  9. 9. 1. Kubernetesってなんですか
  10. 10. こういうことがしたい 大きなリソースのプール
  11. 11. こういうことがしたい 動け!
  12. 12. こういうことがしたい コンテナ化されたアプリ はい!
  13. 13. こういうことがしたい コンテナ化されたアプリ はい!
  14. 14. こういうことがしたい 利用者からのリクエスト わー!
  15. 15. こういうことがしたい がんばれ!
  16. 16. こういうことがしたい はい!
  17. 17. こういうことがしたい アップグレード!
  18. 18. こういうことがしたい はい! 勝手にローリングアップデート
  19. 19. こういうことがしたい
  20. 20. こういうことがしたい
  21. 21. こういうことがしたい わー! コンテナが落ちたら自動で新たに立ち上げる
  22. 22. こういうことができる • リソースの抽象化 • どこにデプロイするか意識しな くてよい • いいように分散して配置してく れる • 外部アクセスのマネージ • アプリケーションの公開 • ルーティング/ロードバランシン グ • スケーリング • 手動/自動 • 障害時のコンテナの再立上げ • 複数コンテナをまとめて制御
  23. 23. 2. Kubernetesの全体像を理解する
  24. 24. Kubernetesの全体像 k8sクラスター >_ kubectl (CLI) マシンとネットワーク
  25. 25. kubectl • Kubernetesクラスターの管理操作を行うためのコマンドライン インターフェース • Kubernetesクラスターと戯れるときの最も基本的な手段 • コマンドをKubernetesのREST API呼び出しに変換している • (REST APIを直接呼び出すことも可能です)
  26. 26. kubectl • 複数のクラスターもいける >_
  27. 27. Kubernetesクラスター • クラスター本体です(あたりまえ) • 次章で詳しく解説
  28. 28. 3. Kubernetesクラスター大解剖
  29. 29. Kubernetesの全体像 k8sクラスター >_ kubectl (CLI) マシンとネットワーク
  30. 30. Kubernetesクラスターの構成 k8sクラスター k8s Objects ・k8sの機能の構成要素 - Node, Pod, Service… k8s Control Plane ・k8s Objectsを実現する実装 - マシン上で稼働する プロセス群 - k8sの要件に沿って構成 されたネットワーク
  31. 31. Kubernetesクラスターの構成 k8sクラスター Kubernetes Control Plane ・k8s Objectsを実現する実装 - マシン上で稼働する プロセス群 - k8sの要件に沿って構成 されたネットワーク k8s Objects ・k8sの機能の構成要素 - Node, Pod, Service…
  32. 32. Kubernetes Objects • Node • Pod • Service • Label/Label Selector • Deployment • ReplicaSet • DaemonSet …他にもありますが、まずはこの辺から。
  33. 33. Node • クラスターに属するマシン を表すオブジェクト • クラスターの管理を担当す るマスターノードと、アプ リケーションを稼働させる メンバーノードがある メンバーノード マスターノード
  34. 34. Pod • Node内で稼働するコンテ ナのセット • 生成/スケールアウト/破棄 等のライフサイクルの単位 • 内包する複数のコンテナは、 必ず同じノード上で稼働 • 1つのPodに1つのクラスタ 内IPが割り当てられる ポッド コンテナ
  35. 35. Service • PodへのTCP/UDPアクセ スの制御を行うオブジェク ト • Podへのルーティング、 ロードバランシングの役割 を持つ • クラスター外部への公開、 クラスター内の通信など、 用途に応じて複数のタイプ から選択可能 サービス クラスター外から のリクエスト
  36. 36. Label/Label Selector • k8sオブジェクトを管理し易 いようにグルーピングする仕 組み • Label: • k8sオブジェクトにアタッチで きるkey/valueペアのセット • Label Selector: • Labelの設定値の条件を指定す る情報。条件に該当するものを グループとして識別する "labels": { "tier" : "frontend", "partition" : "customerA" } "labels": { "tier" : “backend", "partition" : "customerA" } "labels": { "tier" : "frontend", "partition" : "customerB" } Label Label partition = customerA Label Selector
  37. 37. Label/Label Selector • Serviceがルーティングの対象を識別するためにも利用される サービス partition = customerA クラスター外から のリクエスト
  38. 38. Label/Label Selector • Serviceがルーティングの対象を識別するためにも利用される サービス partition = customerA クラスター外から のリクエスト
  39. 39. Deployment • Podのライフサイクル(生 成/更新/破棄)を制御する オブジェクト • Podを起動したり、スケー ルさせたりするときに、対 応するDeploymentに対し て操作を行う デプロイメント D
  40. 40. DaemonSet • 全てのメンバーノードで共 通のPodを稼働させる仕組 み • ノードが追加されると自動 で所定のPodが起動 • ノード共通の機能を乗せた いときに利用 • ログ収集(fluentd, logstach) • ノードの監視用のエージェ ント(Prometheus, collectd) DaemonSet
  41. 41. Kubernetes Objects ・k8sの機能の構成要素 - Node, Pod, Service… Kubernetesクラスターの構成 k8sクラスター k8s Control Plane ・k8s Objectsを実現する実装 - マシン上で稼働する プロセス群 - k8sの要件に沿って構成 されたネットワーク
  42. 42. Kubernetes Control Plane • マシン上で稼働するプロセス群 • k8sの要件に沿って構成されたネットワーク • e.g. コンテナ同士の通信がNATなしで疎通すること • マスターノード • kube-apiserver • etcd • kube-controller-manager • kube-scheduler … • メンバーノード • kubelet • kube-proxy • Docker …
  43. 43. Control Planeで稼働するプロセス群(主要なもの) REST API呼び出し API Server kube-proxy cotrollers kube-controller-manager kubelet マスターノードメンバーノード Docker メンバーノード への指示
  44. 44. メンバーノードで稼働するプロセス • kubelet • メンバーノードとしての基本 機能を実現する • Podの生成/更新/破棄などのコ ントロール • 各種ステータスのレポート • kube-proxy • ネットワーク周りのルールを 制御 • Docker • いわずもがなのコンテナ本体 kube-proxy kubelet Docker
  45. 45. マスターノードで稼働するプロセス • kube-apiserver • Kubernetesクラスターのフロント エンド。APIを提供 • kube-controller-manager • クラスターの制御を行う各種 controllerを動作させる • controllers • Node Controller • Replication Controller • Endpoints Controller • Service Account & Token Controllers API Server cotrollers kube-controller-manager
  46. 46. More Advanced… • Control Planeの構成要素をきっちり把握するには、カスタムク ラスターのインストールマニュアルを読むのがおすすめ • Creating a Custom Cluster from Scratch • https://kubernetes.io/docs/getting-started-guides/scratch/
  47. 47. ハンズオン (1) ローカルPCにKubernetesクラスターを構築してみよう
  48. 48. 後半戦 Kubernetes実践 ときどき Serverless
  49. 49. 後半戦のメニュー 1. kubectlをもう少し 2. アプリケーションを公開するには 3. Kubernetes meets Serverless
  50. 50. kubectlをもう少し
  51. 51. kubectlの設定情報 • kubectlの設定情報の表示 • 設定情報の実態は ~/.kube/config • 設定の追加/上書き(の一例) > kubectl config view > kubectl config set-cluster [OPTIONS]
  52. 52. k8sオブジェクトの情報を取得する(1) • Human Readableな形式で取得するとき -> get, describe • オブジェクトの一覧 > kubectl get [オブジェクトの種類] • オブジェクトの詳細情報 > kubectl describe [オブジェクトの種類] [オブジェクトの名前]
  53. 53. k8sオブジェクトの情報を取得する(2) • Machine Friendlyな形式で取得するとき -> getと-oオプション • オブジェクトの詳細情報 > kubectl get [オブジェクトの種類] [オブジェクトの名前] –o json
  54. 54. k8sオブジェクトを操作する(1) • コマンド方式 • オブジェクトに反映したい状態を、コマンドとそのオプションで指定 • オブジェクトの作成の例: • 構成ファイルを指定してオブジェクトを操作する方式 • 命令的/宣言的 • オブジェクトに反映したい状態を、構成ファイルで指定 • .yaml または .json • ソースコード管理との親和性が良い > kubectl run nginx --image nginx
  55. 55. 構成ファイルによるオブジェクトの操作 • 命令的方式 • コマンド(create, delete, replace…)と構成ファイルを指定 • 指定した内容にオブジェクトの状態が変わる • オブジェクトを作成する例: • 宣言的方式 • 適切なコマンド(操作)をkubectlが自動で検出 • オブジェクトの状態を上書き。構成ファイルに明記しなかった部分は既存の 状態が維持される • オブジェクトを作成する例: > kubectl create –f nginx.yaml > kubectl apply –f configs/
  56. 56. アプリケーションを公開する には
  57. 57. コンテナのデプロイ • コンテナレジストリから取得するのが基本 • プライベートのレジストリを使うことも可能 k8sクラスター >_ kubectl (CLI) コンテナ レジストリ > kubectl run …
  58. 58. 公開方法のバリエーション • APIサーバー経由でのアクセス • ServiceのNodePortタイプ • ServiceのLoadBarancerタイプ • Ingress (beta)
  59. 59. APIサーバー経由でのアクセス • kubectlをproxyとして稼働させて、認証なしのAPIエンドポイ ントへの経路を構成 • 所定のAPIエンドポイントにリクエストを投げるとコンテナに 届く • お試し用。 k8sクラスター kubectl > kubectl proxy … >_ APIサーバー リクエスト
  60. 60. ServiceのNodePortタイプ • 対象のPodにルーティングされる口を、各Node上に構成する • ポート番号は、各ノードで共通 クラスター外から のリクエスト 172.17.8.104 172.17.8.103 172.17.8.102 172.17.8.104:30159 172.17.8.102:30159 172.17.8.103:30159
  61. 61. ServiceのLoadBalancerタイプ • GCP, AWS, Azure上のロードバランサーを自動構成 • クラスター内にはNodePortまたは ClusterIPタイプのServiceを構成 クラスター外から のリクエスト LB
  62. 62. Ingress • API Server上にLoadBalancerを構成して、クラスター内にリク エストをルーティング • ロードバランシング、SSL/TLS終端等の機能を提供 • Kubernetes 1.1から利用できるが、まだBeta…
  63. 63. ハンズオン (2) アプリケーションを公開してみよう
  64. 64. その前に…
  65. 65. Kubernetes meets Serverless
  66. 66. Fn Project • http://fnproject.io/ →サーバーレス・アプリケーションを作るためのフレームワーク
  67. 67. Open & Easy • Open • Open Source (Apache 2.0) • マルチ言語サポート • JS, Java, Ruby, Python, Go • どこでも動く • ラップトップ、サーバー、クラウド • Easy • 全ての操作はシンプルなCLI • 考え抜かれた開発者エクスペリエンス
  68. 68. 構成 • Fn Server上にFunctionが のるDinD(Docker in Docker)構成 • トリガーがキックされる度 に対応するFunctionのコン テナを立ち上げる • コンテナ群の管理はCLI が隠蔽 Function 1 Functio n Function 2 Functio n Fn Serverfn-app/hello-node fn-app/hello-java
  69. 69. Fn Flow • 複数のファンクションの連結を手続き的記述で実現 Flowは現在Javaのみ対応。随時対応言語を増やして いくとのこと
  70. 70. Fn Flow • 並列・非同期処理
  71. 71. Fn Flow • エラーハンドリング
  72. 72. Fn Flow • 複数のファンクションの連結を手続き的記述で実現 • なにがいいの? テストしやすい デバッグしやすい 読んで理解しやすい エラー処理で死なない
  73. 73. たぶん…。
  74. 74. ハンズオン (2) アプリケーションを公開してみよう
  75. 75. 次回予告
  76. 76. 次回コンテンツ 案(1) • 「Kubernetes Network Deep Dive!」 • コンテンツ • 今回取り上げられなかった、k8sネットワーク周りを深掘り • サービス・メッシュでk8s上にインテリジェントなネットワークを
  77. 77. 次回コンテンツ 案(2) • 「Kubernetes in プロダクション!」 • コンテンツ • 実運用を想定したk8sの使い方を学びます。例えば…。  ロードバランサーの構成方法  管理ノードの冗長化構成はどう作る?  永続化層はどうすれば?  コンテナのアップデート  オートスケーリング
  78. 78. お知らせ • アンケートにご協力ください http://bit.ly/cndjp1-survey • Slackチャネルにもぜひご参加ください http://bit.ly/cndjp-slack
  79. 79. お疲れ様でした! #cndjp1

×