Slide 1

Slide 1 text

GMOインターネット株式会社 次世代システム研究室 李 大範 (イ デボム) Kubernetes入門 ContainerからKubernetesまで

Slide 2

Slide 2 text

Kubernetes?

Slide 3

Slide 3 text

Kubernetes is Container Orchestration System

Slide 4

Slide 4 text

Kubernetes is Container Orchestration System

Slide 5

Slide 5 text

Kubernetes is Container Orchestration System

Slide 6

Slide 6 text

Kubernetes is Container Orchestration System

Slide 7

Slide 7 text

どこでも 同じ環境のように動く 軽量のアプリケーション実行環境 環境情報を「dockerfile」で記載しておくことによって どこでも同じような環境が作れる

Slide 8

Slide 8 text

どこでも 同じ環境のように動く

Slide 9

Slide 9 text

同じ環境のように動く 軽量のアプリケーション実行環境 running a modern Linux kernel (3.2+ generally or 2.6.32+ for RHEL 6.5+, Fedora, & related) どこでも(Linux Kernel)

Slide 10

Slide 10 text

Kubernetes is Container Orchestration System

Slide 11

Slide 11 text

Kubernetes is Container Orchestration System

Slide 12

Slide 12 text

Kubernetes is Container Orchestration System VM Container

Slide 13

Slide 13 text

Kubernetes is Container Orchestration System HostのKernelを利用する

Slide 14

Slide 14 text

Kubernetes is Container Orchestration System VMより軽く起動・停止が早い

Slide 15

Slide 15 text

Dockerを利用するメリット1 私の環境では動いてましたが… →dockerfileを共有することで 同じ環境が提供できる!

Slide 16

Slide 16 text

複数のVMを立ち上げに時間かかった →dockerを利用することによって起 動・停止早い(HostOSのkernelを利用) Dockerを利用するメリット2

Slide 17

Slide 17 text

Kubernetes is Container Orchestration System

Slide 18

Slide 18 text

Kubernetes is Container Orchestration System Automated container deployment Automated container scaling Container management

Slide 19

Slide 19 text

Kubernetes is Container Orchestration System

Slide 20

Slide 20 text

19 Container Orchestrator Market Share 2017/3/26~2018/3/26 Google TrendからContainer OrchestratorのMarket Shareを 見るとDocker swarmやApache Mesosは平面化されて、 Kubernetesが一番注目されている。

Slide 21

Slide 21 text

Container Orchestrator Market Share

Slide 22

Slide 22 text

21 ・ギリシャ語が語源で意味は操舵手 ・k8s (ubernete->8) called k-eight-s ・Originally designed by Google ( Borg->Omega->Kubernetes ) ・OSS (Apache License 2.0) ・CNCFからプロジェクトを運用 (特定の企業に依存しない) About Kubernetes 船の操舵手 (ソウダシュ) *CNCF(Cloud Native Computing Foundation) https://commons.wikimedia.org/wiki/File:RIGBY(1842)_Baltic_letters,_p1.054_HELMSMAN.jpg

Slide 23

Slide 23 text

22 About Kubernetes ・多数のクラウドプロバイダを対応 (業界のスタンダードに)

Slide 24

Slide 24 text

Kubernetesは 何を解決するための システムなのか

Slide 25

Slide 25 text

24 Dockerでできる ・ Containerの生成 ・ Containerの削除 ・ Volumeの生成 ・ Volumeの削除

Slide 26

Slide 26 text

25 ・ Containerの生成 ・ Containerの削除 ・ Volumeの生成 ・ Volumeの削除 Dockerコンテナの ライフサイクルは Docker自身で管理する

Slide 27

Slide 27 text

26 Dockerでできない ・複数のNodeに対してのデプロイ ・スケーリング ・Containerのアップデート ・Container障害時の復旧 ・Containerの負荷分散

Slide 28

Slide 28 text

27 ・ Containerの生成 ・ Containerの削除 ・ Volumeの生成 ・ Volumeの削除 Dockerだけだと開発環境で の運用は問題ない。 だが本番のサービスを運用 するにはものたりない。

Slide 29

Slide 29 text

28 https://blogs.vmware.com/cloudnative/2018/01/23/containers-kubernetes-benefits/

Slide 30

Slide 30 text

Dockerを 本番で安定・安全に 運用するには Docker+α が必要。

Slide 31

Slide 31 text

30 Infra (Public/Private Cloud, etc…) Operation System Operation System Operation System Container Runtime Container Runtime Container Runtime Container Orchestration (Containerized App Management, Deployment, Scheduling) Containerized App Containerized App Containerized App Containerized App Containerized App

Slide 32

Slide 32 text

Container Orchestration System Kubernetes

Slide 33

Slide 33 text

Kubernetesは どのようにコンテナを 管理するのか

Slide 34

Slide 34 text

33 Kubernetes Basic Concepts Node (物理マシン、仮想マシン) Kubernetes Cluster Pod Pod Pod コン テナ コン テナ コン テナ コン テナ コン テナ コン テナ Kubernetesではひとつまたは複数のコンテナを 「Pod」との単位で管理している Node (VM)

Slide 35

Slide 35 text

34 Kubernetes Cluster Node Node Node (s) Master CLI API UI API Server etcd cluster Scheduler Controller Manager kubelet Kube-proxy pod pod pod pod container container container container container container container container Internet

Slide 36

Slide 36 text

Kubernetesは どのようにコンテナを 管理するのか

Slide 37

Slide 37 text

36 Kubernetes Component - Master API Server etcd cluster Scheduler Controller Manager Masterは 各Nodeに対してデプロイ、 アップデート、スケーリングなど の指示を出す役割 API Server ・コンテナクラスタのすべての操作を コントロールする ・RESTful API ・利用するにはkubernetes dashboardを 利用したUIでのアクセスやkubectlコマンドを 利用したCLIでのアクセスがある

Slide 38

Slide 38 text

37 Kubernetes Component - Master API Server etcd cluster Scheduler Controller Manager Masterは 各Nodeに対してデプロイ、 アップデート、スケーリングなど の指示を出す役割 Scheduler ・アプリケーションの配置を行う。 ・podをどのnodeに配置するかを決める。

Slide 39

Slide 39 text

38 Kubernetes Component - Master API Server etcd cluster Scheduler Controller Manager Masterは 各Nodeに対してデプロイ、 アップデート、スケーリングなど の指示を出す役割 Controller Manager ・バックグラウンドでクラスタのコントローラ を管理 ・APIサーバを利用しクラスタ状態を監視。 ・クラスタを望ましい状態にする ・Replication Controller, Endpoint Controller…

Slide 40

Slide 40 text

39 Kubernetes Component - Master API Server etcd cluster Scheduler Controller Manager Masterは 各Nodeに対してデプロイ、 アップデート、スケーリングなど の指示を出す役割 etcd Cluster ・k8sのクラスタ情報を保存する ・secret, pod state, volume address

Slide 41

Slide 41 text

40 Kubernetes Component – (worker)Node Node Node kubelet Kube-proxy pod pod pod pod container container container container container container container container (Worker)Node は podが動作する環境 kubelet ・node agentの役割。 ・マスタとの通信でnodeに指示を出す ・k8sで作られたコンテナのみ管理 ・HTTP endpoint ・HTTP server https://kubernetes.io/docs/reference/generated/kubelet/

Slide 42

Slide 42 text

41 Kubernetes Component – (worker)Node Node Node kubelet Kube-proxy pod pod pod pod container MySQL container container app Php-fpm Nginx container (Worker)Node は podが動作する環境 pod ・containerのグループ ・k8sのミニマムなデプロイ単位 ・Podの中のコンテナはStroageや namespaces、portを共有

Slide 43

Slide 43 text

42 Kubernetes Component – (worker)Node Node Node kubelet Kube-proxy pod pod pod pod container container container container container container container container (Worker)Node は podが動作する環境 kube-proxy ・Kubernetes network proxy ・各Nodeに動作する ・特定なPortを開けてPod外からの アクセスができるようにする https://kubernetes.io/docs/reference/generated/kube-proxy/

Slide 44

Slide 44 text

デモします!

Slide 45

Slide 45 text

44 デモでのポイント ・負荷に柔軟なシステムを作りたい →Horizontal Pod Scaling検証 ・障害に強いシステムを作りたい →Self-healing検証

Slide 46

Slide 46 text

45 デモでのポイント ・スケーリング(Scaling) →負荷状況によってシステム または運用側がPodを増やす ・自動回復(Self-healing) →Podが急に停止した場合でも 正常な状態に戻す

Slide 47

Slide 47 text

46 デモ環境(ローカル) ・minikube ・kubernetes on Docker ・…

Slide 48

Slide 48 text

47 環境設定(Mac)

Slide 49

Slide 49 text

48 デモ環境(kubernetes on Docker) Docker 18.03.0-ce --- k8s v1.9.2

Slide 50

Slide 50 text

49 デモ環境(kubernetes on Docker) ・クラスタ起動確認 $ kubectl cluster-info

Slide 51

Slide 51 text

50 Horizontal Pod Scaling シナリオ 1. PHP+Apacheの組み合わせでアプリケ ーションを二つ立ち上がっていてロードバ ランシングされている 2. 負荷急に上がりすぎ現状の構成で負荷 分散ができなくなった

Slide 52

Slide 52 text

demo

Slide 53

Slide 53 text

52 シナリオ 1. サービスが何らかの理由で停止された (今回は手動でpodを削除) 2.それから自動的に回復されるのを確認 Self-healing

Slide 54

Slide 54 text

demo

Slide 55

Slide 55 text

54 ■Summary ▪ Kubernetesはスタンダード(かも) ▪ Kubernetesは本番でコンテナされているアプリケーショ ンを管理してくれる ▪ Googleからスタートしたプロジェクトで今はOSSとして CNCFが管理している。(今は卒業生) ▪ Kubernetesはひとつのmasterと複数の(Worker)Node でクラスタ構成になっている ▪ 今ではローカル環境でも簡単にKubernetesが利用できる( minikube, kubernetes on dockerなど )

Slide 56

Slide 56 text

ありがとうございました。