SlideShare una empresa de Scribd logo
1 de 81
#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ってなんですか
こういうことがしたい
大きなリソースのプール
こういうことがしたい
動け!
こういうことがしたい
コンテナ化されたアプリ
はい!
こういうことがしたい
コンテナ化されたアプリ
はい!
こういうことがしたい
利用者からのリクエスト
わー!
こういうことがしたい
がんばれ!
こういうことがしたい
はい!
こういうことがしたい
アップグレード!
こういうことがしたい
はい!
勝手にローリングアップデート
こういうことがしたい
こういうことがしたい
こういうことがしたい
わー!
コンテナが落ちたら自動で新たに立ち上げる
こういうことができる
• リソースの抽象化
• どこにデプロイするか意識しな
くてよい
• いいように分散して配置してく
れる
• 外部アクセスのマネージ
• アプリケーションの公開
• ルーティング/ロードバランシン
グ
• スケーリング
• 手動/自動
• 障害時のコンテナの再立上げ
• 複数コンテナをまとめて制御
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
• 複数のファンクションの連結を手続き的記述で実現
• なにがいいの?
テストしやすい
デバッグしやすい
読んで理解しやすい
エラー処理で死なない
たぶん…。
ハンズオン (2)
アプリケーションを公開してみよう
次回予告
次回コンテンツ 案(1)
• 「Kubernetes Network Deep Dive!」
• コンテンツ
• 今回取り上げられなかった、k8sネットワーク周りを深掘り
• サービス・メッシュでk8s上にインテリジェントなネットワークを
次回コンテンツ 案(2)
• 「Kubernetes in プロダクション!」
• コンテンツ
• 実運用を想定したk8sの使い方を学びます。例えば…。
 ロードバランサーの構成方法
 管理ノードの冗長化構成はどう作る?
 永続化層はどうすれば?
 コンテナのアップデート
 オートスケーリング
お知らせ
• アンケートにご協力ください
http://bit.ly/cndjp1-survey
• Slackチャネルにもぜひご参加ください
http://bit.ly/cndjp-slack
お疲れ様でした!
#cndjp1

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Infrakit Docker_Tokyo_meetup
Infrakit Docker_Tokyo_meetupInfrakit Docker_Tokyo_meetup
Infrakit Docker_Tokyo_meetup
 
Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)Kubernetesにまつわるエトセトラ(主に苦労話)
Kubernetesにまつわるエトセトラ(主に苦労話)
 
Kubernetes introduction
Kubernetes introductionKubernetes introduction
Kubernetes introduction
 
KubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したいKubernetesでGPUクラスタを管理したい
KubernetesでGPUクラスタを管理したい
 
はじめてのCF buildpack
はじめてのCF buildpackはじめてのCF buildpack
はじめてのCF buildpack
 
Kubernetes超入門 with java
Kubernetes超入門 with javaKubernetes超入門 with java
Kubernetes超入門 with java
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
Reading NATS
Reading NATSReading NATS
Reading NATS
 
普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見普通のRailsアプリをdockerで本番運用する知見
普通のRailsアプリをdockerで本番運用する知見
 
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみるCloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
Cloud Native をやっていくにはどう学んでいくかをみんなで考えてみる
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしよう
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
 
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 

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

Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
YASUKAZU NAGATOMI
 

Similar a Kubernetes ときどき Serverless -- cndjp第1回勉強会 (20)

Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみたKubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
Kubernetes Meetup Tokyo #8 Self-hosted Kubernetes を調べてみた
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
 
Azure で Kubernetes を使う実践的なテクニック
Azure で Kubernetes を使う実践的なテクニックAzure で Kubernetes を使う実践的なテクニック
Azure で Kubernetes を使う実践的なテクニック
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
K8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundryK8s meetup containerized_cloud_foundry
K8s meetup containerized_cloud_foundry
 
Infra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, NetworkInfra: Kubernetes and GKE, Network
Infra: Kubernetes and GKE, Network
 
Introduction of Kubernetes & Rancher
Introduction of Kubernetes & RancherIntroduction of Kubernetes & Rancher
Introduction of Kubernetes & Rancher
 
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
Kubernetes ControllerをScale-Outさせる方法 / Kubernetes Meetup Tokyo #55
 
k3s のすすめ
k3s のすすめk3s のすすめ
k3s のすすめ
 
CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallenge
 
ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発ざっくり始めるCloud Native開発
ざっくり始めるCloud Native開発
 
Dockerだけではないコンテナのはなし
DockerだけではないコンテナのはなしDockerだけではないコンテナのはなし
Dockerだけではないコンテナのはなし
 
20171112 OSS on Azure another story and more
20171112 OSS on Azure another story and more20171112 OSS on Azure another story and more
20171112 OSS on Azure another story and more
 
Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版Kubernetes雑にまとめてみた 2020年8月版
Kubernetes雑にまとめてみた 2020年8月版
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
 
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
[OracleCodeTokyo2019] Kubernetesで実現する運用自動化の新しいアプローチとは
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 

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