kubernetes ときどき serverless -- cndjp第1回勉強会

81
#cndjp1

Upload: hiroshi-hayakawa

Post on 21-Jan-2018

886 views

Category:

Technology


3 download

TRANSCRIPT

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

#cndjp1

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

ごあいさつ

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

自己紹介

• 早川 博(はやかわ ひろし)

• 日本オラクル所属• Pre-Sales Engineer / Tech Evangelist (new!)

• Java SE/EE, Microservices/DevOps

@hhiroshell

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

この勉強会について

•cndjp - Cloud Native Developers JP

• Cloud NativeなOSSスタックを対象とした勉強会シリーズ

• オープンソース中心

• 楽しく学ぶ、深く学ぶ

CNCFが出しているCloud Native Landscapeに載っているソフトウェア(→次ページ)

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

cndjp #1-#3

cndjp #4~

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

Kubernetes ときどき Serverless#cndjp1

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

前半戦Kubernetes基礎

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

前半戦のメニュー

1. Kubernetesってなんですか

2. Kubernetesの全体像を理解する

3. Kubernetesクラスター大解剖

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

1. Kubernetesってなんですか

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

こういうことがしたい

大きなリソースのプール

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

こういうことがしたい

動け!

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

こういうことがしたい

コンテナ化されたアプリ

はい!

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

こういうことがしたい

コンテナ化されたアプリ

はい!

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

こういうことがしたい

利用者からのリクエスト

わー!

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

こういうことがしたい

がんばれ!

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

こういうことがしたい

はい!

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

こういうことがしたい

アップグレード!

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

こういうことがしたい

はい!

勝手にローリングアップデート

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

こういうことがしたい

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

こういうことがしたい

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

こういうことがしたい

わー!

コンテナが落ちたら自動で新たに立ち上げる

Page 22: Kubernetes ときどき Serverless -- cndjp第1回勉強会
Page 23: Kubernetes ときどき Serverless -- cndjp第1回勉強会

こういうことができる

• リソースの抽象化• どこにデプロイするか意識しな

くてよい

• いいように分散して配置してくれる

• 外部アクセスのマネージ• アプリケーションの公開

• ルーティング/ロードバランシング

• スケーリング• 手動/自動

• 障害時のコンテナの再立上げ

• 複数コンテナをまとめて制御

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

2. Kubernetesの全体像を理解する

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

Kubernetesの全体像

k8sクラスター

>_

kubectl (CLI)

マシンとネットワーク

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

kubectl

• Kubernetesクラスターの管理操作を行うためのコマンドラインインターフェース

• Kubernetesクラスターと戯れるときの最も基本的な手段

• コマンドをKubernetesのREST API呼び出しに変換している

• (REST APIを直接呼び出すことも可能です)

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

kubectl

• 複数のクラスターもいける

>_

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

Kubernetesクラスター

• クラスター本体です(あたりまえ)

• 次章で詳しく解説

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

3. Kubernetesクラスター大解剖

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

Kubernetesの全体像

k8sクラスター

>_

kubectl (CLI)

マシンとネットワーク

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

Kubernetesクラスターの構成

k8sクラスター

k8s Objects

・k8sの機能の構成要素- Node, Pod, Service…

k8s Control Plane

・k8s Objectsを実現する実装- マシン上で稼働するプロセス群

- k8sの要件に沿って構成されたネットワーク

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

Kubernetesクラスターの構成

k8sクラスター

Kubernetes Control Plane

・k8s Objectsを実現する実装- マシン上で稼働するプロセス群

- k8sの要件に沿って構成されたネットワーク

k8s Objects

・k8sの機能の構成要素- Node, Pod, Service…

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

Kubernetes Objects

• Node

• Pod

• Service

• Label/Label Selector

• Deployment

• ReplicaSet

• DaemonSet

…他にもありますが、まずはこの辺から。

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

Node

• クラスターに属するマシンを表すオブジェクト

• クラスターの管理を担当するマスターノードと、アプリケーションを稼働させるメンバーノードがある

メンバーノード

マスターノード

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

Pod

• Node内で稼働するコンテナのセット

• 生成/スケールアウト/破棄等のライフサイクルの単位

• 内包する複数のコンテナは、必ず同じノード上で稼働

• 1つのPodに1つのクラスタ内IPが割り当てられる

ポッド

コンテナ

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

Service

• PodへのTCP/UDPアクセスの制御を行うオブジェクト

• Podへのルーティング、ロードバランシングの役割を持つ

• クラスター外部への公開、クラスター内の通信など、用途に応じて複数のタイプから選択可能

サービス

クラスター外からのリクエスト

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

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

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

Label/Label Selector

• Serviceがルーティングの対象を識別するためにも利用される

サービス

partition = customerA

クラスター外からのリクエスト

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

Label/Label Selector

• Serviceがルーティングの対象を識別するためにも利用される

サービス

partition = customerA

クラスター外からのリクエスト

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

Deployment

• Podのライフサイクル(生成/更新/破棄)を制御するオブジェクト

• Podを起動したり、スケールさせたりするときに、対応するDeploymentに対して操作を行う

デプロイメント

D

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

DaemonSet

• 全てのメンバーノードで共通のPodを稼働させる仕組み

• ノードが追加されると自動で所定のPodが起動

• ノード共通の機能を乗せたいときに利用• ログ収集(fluentd, logstach)• ノードの監視用のエージェ

ント(Prometheus, collectd)

DaemonSet

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

Kubernetes Objects

・k8sの機能の構成要素- Node, Pod, Service…

Kubernetesクラスターの構成

k8sクラスター

k8s Control Plane

・k8s Objectsを実現する実装- マシン上で稼働するプロセス群

- k8sの要件に沿って構成されたネットワーク

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

Kubernetes Control Plane

• マシン上で稼働するプロセス群

• k8sの要件に沿って構成されたネットワーク• e.g. コンテナ同士の通信がNATなしで疎通すること

• マスターノード• kube-apiserver

• etcd

• kube-controller-manager

• kube-scheduler

• メンバーノード• kubelet

• kube-proxy

• Docker

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

Control Planeで稼働するプロセス群(主要なもの)

REST API呼び出し

API Server

kube-proxy

cotrollers

kube-controller-managerkubelet

マスターノードメンバーノード

Docker

メンバーノードへの指示

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

メンバーノードで稼働するプロセス

• kubelet• メンバーノードとしての基本

機能を実現する

• Podの生成/更新/破棄などのコントロール

• 各種ステータスのレポート

• kube-proxy• ネットワーク周りのルールを

制御

• Docker• いわずもがなのコンテナ本体

kube-proxy

kubelet

Docker

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

マスターノードで稼働するプロセス

• 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

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

More Advanced…

• Control Planeの構成要素をきっちり把握するには、カスタムクラスターのインストールマニュアルを読むのがおすすめ

• Creating a Custom Cluster from Scratch• https://kubernetes.io/docs/getting-started-guides/scratch/

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

ハンズオン (1)ローカルPCにKubernetesクラスターを構築してみよう

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

後半戦Kubernetes実践 ときどき Serverless

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

後半戦のメニュー

1. kubectlをもう少し

2. アプリケーションを公開するには

3. Kubernetes meets Serverless

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

kubectlをもう少し

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

kubectlの設定情報

• kubectlの設定情報の表示

• 設定情報の実態は ~/.kube/config

• 設定の追加/上書き(の一例)

> kubectl config view

> kubectl config set-cluster [OPTIONS]

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

k8sオブジェクトの情報を取得する(1)

• Human Readableな形式で取得するとき -> get, describe

• オブジェクトの一覧

> kubectl get [オブジェクトの種類]

• オブジェクトの詳細情報

> kubectl describe [オブジェクトの種類] [オブジェクトの名前]

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

k8sオブジェクトの情報を取得する(2)

• Machine Friendlyな形式で取得するとき -> getと-oオプション

• オブジェクトの詳細情報> kubectl get [オブジェクトの種類] [オブジェクトの名前] –o json

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

k8sオブジェクトを操作する(1)

• コマンド方式• オブジェクトに反映したい状態を、コマンドとそのオプションで指定

• オブジェクトの作成の例:

• 構成ファイルを指定してオブジェクトを操作する方式• 命令的/宣言的

• オブジェクトに反映したい状態を、構成ファイルで指定• .yaml または .json

• ソースコード管理との親和性が良い

> kubectl run nginx --image nginx

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

構成ファイルによるオブジェクトの操作

• 命令的方式• コマンド(create, delete, replace…)と構成ファイルを指定• 指定した内容にオブジェクトの状態が変わる

• オブジェクトを作成する例:

• 宣言的方式• 適切なコマンド(操作)をkubectlが自動で検出• オブジェクトの状態を上書き。構成ファイルに明記しなかった部分は既存の

状態が維持される

• オブジェクトを作成する例:

> kubectl create –f nginx.yaml

> kubectl apply –f configs/

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

アプリケーションを公開するには

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

コンテナのデプロイ

• コンテナレジストリから取得するのが基本

• プライベートのレジストリを使うことも可能

k8sクラスター

>_

kubectl (CLI)

コンテナレジストリ

> kubectl run …

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

公開方法のバリエーション

• APIサーバー経由でのアクセス

• ServiceのNodePortタイプ

• ServiceのLoadBarancerタイプ

• Ingress (beta)

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

APIサーバー経由でのアクセス

• kubectlをproxyとして稼働させて、認証なしのAPIエンドポイントへの経路を構成

• 所定のAPIエンドポイントにリクエストを投げるとコンテナに届く

• お試し用。k8sクラスター

kubectl

> kubectl proxy …

>_

APIサーバー

リクエスト

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

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

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

ServiceのLoadBalancerタイプ

• GCP, AWS, Azure上のロードバランサーを自動構成

• クラスター内にはNodePortまたはClusterIPタイプのServiceを構成

クラスター外からのリクエスト

LB

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

Ingress

• API Server上にLoadBalancerを構成して、クラスター内にリクエストをルーティング

• ロードバランシング、SSL/TLS終端等の機能を提供

• Kubernetes 1.1から利用できるが、まだBeta…

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

ハンズオン (2)アプリケーションを公開してみよう

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

その前に…

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

Kubernetes meets Serverless

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

Fn Project

• http://fnproject.io/

→サーバーレス・アプリケーションを作るためのフレームワーク

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

Open & Easy

• Open• Open Source (Apache 2.0)

• マルチ言語サポート• JS, Java, Ruby, Python, Go

• どこでも動く• ラップトップ、サーバー、クラウド

• Easy• 全ての操作はシンプルなCLI

• 考え抜かれた開発者エクスペリエンス

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

構成

• Fn Server上にFunctionがのるDinD(Docker in Docker)構成

• トリガーがキックされる度に対応するFunctionのコンテナを立ち上げる

• コンテナ群の管理はCLIが隠蔽

Function 1

Function

Function 2

Function

Fn Serverfn-app/hello-node

fn-app/hello-java

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

Fn Flow

• 複数のファンクションの連結を手続き的記述で実現

Flowは現在Javaのみ対応。随時対応言語を増やしていくとのこと

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

Fn Flow

• 並列・非同期処理

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

Fn Flow

• エラーハンドリング

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

Fn Flow

• 複数のファンクションの連結を手続き的記述で実現

• なにがいいの?テストしやすい

デバッグしやすい

読んで理解しやすい

エラー処理で死なない

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

たぶん…。

Page 75: Kubernetes ときどき Serverless -- cndjp第1回勉強会
Page 76: Kubernetes ときどき Serverless -- cndjp第1回勉強会

ハンズオン (2)アプリケーションを公開してみよう

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

次回予告

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

次回コンテンツ 案(1)

• 「Kubernetes Network Deep Dive!」

• コンテンツ• 今回取り上げられなかった、k8sネットワーク周りを深掘り

• サービス・メッシュでk8s上にインテリジェントなネットワークを

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

次回コンテンツ 案(2)

• 「Kubernetes in プロダクション!」

• コンテンツ• 実運用を想定したk8sの使い方を学びます。例えば…。

ロードバランサーの構成方法

管理ノードの冗長化構成はどう作る?

永続化層はどうすれば?

コンテナのアップデート

オートスケーリング

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

お知らせ

• アンケートにご協力ください

http://bit.ly/cndjp1-survey

• Slackチャネルにもぜひご参加ください

http://bit.ly/cndjp-slack

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

お疲れ様でした!#cndjp1