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