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

More Related Content

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