Slide 1

Slide 1 text

プライベートクラウドにおける Kubernetes デプロイパターン OTSUKA, Motohiro / Yuanying Z Lab Corporation Tech-on Meet Up #02

Slide 2

Slide 2 text

この資料の取り扱いについては、 以下の URL を参照してください。 https://個人の見解.jp

Slide 3

Slide 3 text

Agenda 1. 私 2. Kubernetes 3. Kubernetes アーキテクチャ 4. Kubernetes デプロイパターン 5. まとめ

Slide 4

Slide 4 text

Who am I ? ● OTSUKA, Motohiro / Yuanying ○ Z Lab Corporation ○ 言語 ■ Ruby (2007 - ) ■ Python (2014 - ) ■ Go (2017 - ) ○ 趣味 ■ ロードバイク (2009 - ) ■ トライアスロン (2010 - )

Slide 5

Slide 5 text

Currently I’m interested in...

Slide 6

Slide 6 text

Kubernetes

Slide 7

Slide 7 text

What is Kubernetes?

Slide 8

Slide 8 text

Server Server Server Server App App App App App App App App コンテナ (App+Env) を管理、配布。 (どちらかというと Ansible, Chef, Puppet が競合ソフトウェア?)

Slide 9

Slide 9 text

Kubernetes アーキテクチャ

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

apiserver

Slide 12

Slide 12 text

apiserver Pod name: hoge

Slide 13

Slide 13 text

apiserver etcd Pod name: hoge

Slide 14

Slide 14 text

apiserver etcd Pod name: hoge Pod name: hoge Pod name: hoge Pod name: hoge

Slide 15

Slide 15 text

apiserver scheduler etcd Pod name: hoge

Slide 16

Slide 16 text

apiserver etcd scheduler Pod name: hoge node: 01 Pod name: hoge Pod name: hoge Pod name: hoge node: 01

Slide 17

Slide 17 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet Pod name: hoge node: 01

Slide 18

Slide 18 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet Pod name: hoge node: 01

Slide 19

Slide 19 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet

Slide 20

Slide 20 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name: fuga replica: 2

Slide 21

Slide 21 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name: fuga replica: 2 controller manager

Slide 22

Slide 22 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name: fuga replica: 2 controller manager Pod name: hoge Pod name: hoge

Slide 23

Slide 23 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name: fuga replica: 2 controller manager Pod name: hoge node: 03 Pod name: hoge node: 04

Slide 24

Slide 24 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet ReplicaSet name: fuga replica: 2 controller manager Pod name: hoge node: 03 Pod name: hoge node: 04

Slide 25

Slide 25 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet controller manager cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin

Slide 26

Slide 26 text

apiserver etcd scheduler kubelet kubelet kubelet kubelet kubelet controller manager cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy

Slide 27

Slide 27 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector

Slide 28

Slide 28 text

どこからどこまでが Kubernetes なのか?

Slide 29

Slide 29 text

Kubernetes? https://github.com/kubernetes/community/blob/master/contributors/design-proposals/cluster-lifecycle/self-hosted-kubernetes.md

Slide 30

Slide 30 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector

Slide 31

Slide 31 text

通信要件

Slide 32

Slide 32 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector ● all containers can communicate with all other containers without NAT ● all nodes can communicate with all containers (and vice-versa) without NAT ● the IP that a container sees itself as is the same IP that others see it as 1. Cluster Networking

Slide 33

Slide 33 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 2. API Server (REST)

Slide 34

Slide 34 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 3. etcd (gRPC)

Slide 35

Slide 35 text

apiserver controller manager scheduler etcd kubelet kubelet kubelet kubelet kubelet cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy dashboard dns metrics-server ingress-controller node-probrem-detector 4. apiserver -> kubelet (REST) ● apiserver から各 kubelet の REST の endpoint に到達可能でなければならない!

Slide 36

Slide 36 text

これらのコンポーネントをどう配置していくのか??

Slide 37

Slide 37 text

Kubernetes デプロイパターン

Slide 38

Slide 38 text

1. トラディショナルスタイル

Slide 39

Slide 39 text

master apiserver scheduler cm master apiserver scheduler cm node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin etcd etcd etcd etcd etcd etcd サーバには etcd/master などのロール が割り当てられる。 各コンポーネントはパッケージマネー ジャにてインストールされ、 init によっ て管理。 chef/ansible/puppet などの ツールにて各コンポーネント をデプロイ。

Slide 40

Slide 40 text

master apiserver scheduler cm master apiserver scheduler cm etcd etcd master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin etcd と master を同居させてサーバ台 数削減。

Slide 41

Slide 41 text

その他のアドオンどうするの?

Slide 42

Slide 42 text

master apiserver scheduler cm master apiserver scheduler cm etcd etcd master apiserver scheduler cm etcd addons metrics-s ingress-c dns dashboad addons metrics-s ingress-c dns dashboad node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin

Slide 43

Slide 43 text

2. コンテナ化

Slide 44

Slide 44 text

master apiserver scheduler cm master apiserver scheduler cm etcd etcd master apiserver scheduler cm etcd addons metrics-s ingress-c dns dashboad addons metrics-s ingress-c dns dashboad node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin 単に systemd の unit ファイル中の Exec を docker run にしただけ。

Slide 45

Slide 45 text

master apiserver scheduler cm master apiserver scheduler cm etcd etcd master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c

Slide 46

Slide 46 text

master apiserver scheduler cm master apiserver scheduler cm etcd etcd master apiserver scheduler cm etcd node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c addon が Kubernetes の管理下になることで、 k8s エコシステム上での管理が可能に。 ● Prometheus での監視を一元化。 ● ログ収集を一元化。 ● オートヒーリングやロードバランシングなど k8s の機能を利用可能。

Slide 47

Slide 47 text

Static Pods Node kubelet kube-apiserver Pod Manifest Pod Manifest IPC Network PID Hostname cgroup cgroup Nginx Confd manifest directory Kubelet が Pod のマニフェストを読み込む場所 1. kube-apiserver 2. ローカルのマニフェストディレクトリ

Slide 48

Slide 48 text

node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin

Slide 49

Slide 49 text

node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin Static Pod kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin kube-proxy cni-plugin Kubernetes API で各コンポーネントの状態が把握可能。 ただし、ローリングアップデートなどは不可能、デプロイ自体 は k8s 外で行うことになる。

Slide 50

Slide 50 text

公式: 「Static Pods なんて使ってんじゃねーよ!」 https://kubernetes.io/docs/tasks/administer-cluster/static-pod/

Slide 51

Slide 51 text

3. Kubernetes 化

Slide 52

Slide 52 text

node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod Static Pod Static Pod DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin

Slide 53

Slide 53 text

apiserver や controller manager, scheduler は? http://www.theblaze.com/blog/2013/01/24/finally-the-answer-sort-of-for-what-came-first-the-chicken-or-the-egg/

Slide 54

Slide 54 text

node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod etcd scheduler cm apiserver Static Pod Static Pod Static Pod DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin 必須 addons を k8s 上で動かし、コアコンポーネントを Static Pod で動かすのが現在のスタンダード。

Slide 55

Slide 55 text

それでも全てを Kubernetes の管理下におきたい。

Slide 56

Slide 56 text

4. Self-hosted Kubernetes

Slide 57

Slide 57 text

node kubelet node kubelet node kubelet node kubelet node kubelet node kubelet Deployment dashboad dashboad Deployment dns dns Deployment metrics-s metrics-s Deployment ingress-c ingress-c DS kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy kube-proxy DS cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin cni-plugin Deployment etcd etcd etcd DS apiserver apiserver apiserver Deployment scheduler scheduler Deployment cm cm いくつかのデプロイツールでサポート。

Slide 58

Slide 58 text

なぜ全てを Kubernetes の管理下におきたいのか。

Slide 59

Slide 59 text

Self-hosted Kubernetes 化によるメリット 1. Small dependencies 2. Deployment consistency 3. Introspection 4. Cluster Upgrades 5. Easier Highly-Available Configurations

Slide 60

Slide 60 text

Self-hosted Kubernetes 化によるメリット ● Kubernetes の control plane を Kubernetes によって管理させることで、その他のデ プロイツールへの依存を排除し、インフラを含めた全てのアプリケーションの管理を Kubernetes へと一元化。 ○ Kubernetes 上のアプリケーション管理のノウハウをそのままインフラである Kubernetes の管理に適 用可能。 ■ HPA によるオートスケール ■ オートヒーリング ■ ロードバランシグ ■ ローリングアップデート ● アプリケーションをクラウドネイティブにするだけでなく、そのインフラもクラウドネイ ティブに。

Slide 61

Slide 61 text

Kubernetes もコンテナオーケストレーションのための、 アプリケーションである! Kubernetes で管理させよう!

Slide 62

Slide 62 text

まとめ

Slide 63

Slide 63 text

まとめ ● アプリケーションはクラウドネイティブなアーキテクチャに。 ○ Kubernetes 上で動かそう。 ● Kubernetes のデプロイは? ○ トラディショナルに VM/ サーバ 上にペットのように可愛がる? ○ パッケージマネージャでインストールして依存関係地獄に陥らないようにコンテナ化? ○ 簡単に Kubernetes 上に乗せられるコンポーネントは Kubernetes で管理? ○ 全てを Kubernetes で管理?

Slide 64

Slide 64 text

One more thing...

Slide 65

Slide 65 text

オンプレミスであっても、 そもそも Kubernetes を使いたいだけであって、 管理なんてしたくないよ…。

Slide 66

Slide 66 text

Kubernetes as a Service

Slide 67

Slide 67 text

Thanks! We are hiring?