Slide 1

Slide 1 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 1/66 Kubernetes⼊⾨

Slide 2

Slide 2 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 2/66 Kyohei Mizumoto(@kyohmizu) C# Software Engineer Interests Docker/Kubernetes Go Security whoami

Slide 3

Slide 3 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 3/66 対象者 Kubernetesやったことない、知らない Kubernetesに興味がある Kubernetesの概要を知りたい

Slide 4

Slide 4 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 4/66 ⽬次 Kubernetesとは Kubernetesの機能 アーキテクチャ Kubernetesリソース マニフェスト例

Slide 5

Slide 5 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 5/66 Kubernetesとは

Slide 6

Slide 6 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 6/66 コンテナオーケストレーションツール オープンソース Cloud Native Computing Foundation (CNCF)がホスト Kubernetes︖

Slide 7

Slide 7 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 7/66 コンテナ︖ 仮想化技術の⼀種 プロセスを1つの環境として切り分けたもの 軽量かつ移植、複製が容易 Dockerがデファクトスタンダード

Slide 8

Slide 8 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 8/66 オーケストレーション︖ 配置、設定、管理の⾃動化 Webアプリ 内部プログラム データベース ネットワーク Kubernetesは全てをリソースとして管理

Slide 9

Slide 9 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 9/66 Kubernetesの利⽤ ローカル Minikube Docker for Mac Kubernetes構築ツール kubeadm Rancher

Slide 10

Slide 10 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 10/66 Kubernetesの利⽤ マネージドサービス Google Kubernetes Engine(GKE) Azure Container Service(AKS) Elastic Container Service for Kubernetes(EKS)

Slide 11

Slide 11 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 11/66 Kubernetesの機能

Slide 12

Slide 12 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 12/66 Kubernetesの機能 仕様、設定管理 リソース作成、配置 リソース拡張 通信 ジョブ管理 ログ管理 冗⻑性 認証・認可

Slide 13

Slide 13 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 13/66 仕様・設定管理 コードベースの仕様 yaml形式のマニフェストファイル Infrastructure as Code

Slide 14

Slide 14 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 14/66 リソース作成・配置 設定に従って必要なリソースを作成、配置 バージョン管理 ローリングアップデート ロールバック

Slide 15

Slide 15 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 15/66 リソース拡張 リソースの不⾜時に⾃動拡張 オートスケーリング

Slide 16

Slide 16 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 16/66 通信 外部との通信 プロキシ 内部の通信 オーバーレイネットワーク 内部DNS

Slide 17

Slide 17 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 17/66 ジョブ管理 スケジューリング 1回のみ 繰り返し

Slide 18

Slide 18 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 18/66 ログ管理 各リソースのログを集約 外部ツールと連携 監視 アラート

Slide 19

Slide 19 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 19/66 冗⻑性 死活監視 セルフヒーリング ロードバランシング

Slide 20

Slide 20 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 20/66 認証・認可 アカウント管理 権限の分離 RBAC

Slide 21

Slide 21 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 21/66 アーキテクチャ

Slide 22

Slide 22 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 22/66

Slide 23

Slide 23 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 23/66 Cluster(クラスタ) Kubernetes実⾏環境の基盤 1つ(以上)のmaster 複数のnode

Slide 24

Slide 24 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 24/66 Master(マスター) クラスタ全体の管理ユニット etcd API Server Scheduler Controller Manager

Slide 25

Slide 25 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 25/66 Node(ノード) コンテナが動作する環境、マシンリソース Pod Kubelet Kube-proxy cAdvisor

Slide 26

Slide 26 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 26/66 etcd 永続的で軽量な分散Key-Valueストア クラスタの設定や状態を保存

Slide 27

Slide 27 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 27/66 API Server Kubernetes APIのサーバー Kubernetesに対する内外のインターフェースを提供す る

Slide 28

Slide 28 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 28/66 Scheduler 新規Podを最適なノードに配置 リソースの供給を需要に合わせる

Slide 29

Slide 29 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 29/66 Controller Manager クラスタの状態を維持 レプリカ数 ジョブ管理

Slide 30

Slide 30 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 30/66 Pod 1つ以上のコンテナを内包する単位 Pod内はlocalhostでアクセス可能

Slide 31

Slide 31 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 31/66 Kubelet ノード内の管理 Podの状態を監視、異常があれば再デプロイ ノード状態をマスターに送信

Slide 32

Slide 32 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 32/66 Kube-proxy プロキシ、ロードバランサーの役割 cAdvisor リソースの使⽤量を監視、収集

Slide 33

Slide 33 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 33/66 Kubernetesリソース

Slide 34

Slide 34 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 34/66 リソースの分類 Workloadsリソース Discovery&LBリソース Config&Storageリソース Clusterリソース Metadataリソース

Slide 35

Slide 35 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 35/66 Workloadsリソース

Slide 36

Slide 36 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 36/66 Workloadsリソース Pod ReplicaSet Deployment DaemonSet StatefulSet Job CronJob

Slide 37

Slide 37 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 37/66 ReplicaSet Podの管理、複製 Pod数を設定どおりに維持 セルフヒーリング

Slide 38

Slide 38 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 38/66 Deployment ReplicaSetの履歴、バージョン管理 アップデート ロールバック 削除

Slide 39

Slide 39 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 39/66 DaemonSet 各ノードに1つずつPodを配置 e.g. ノードの管理、情報収集

Slide 40

Slide 40 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 40/66 Job 1度のみ実⾏ CronJob Jobのスケジューリング

Slide 41

Slide 41 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 41/66 Discovery&LBリソース

Slide 42

Slide 42 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 42/66 Discovery&LBリソース Service ClusterIP NodePort LoadBalancer ExternalIP ExternalName Headless Ingress

Slide 43

Slide 43 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 43/66 Service コンテナと外部の通信 クラスタ内 クラスタと外部 IPアドレス、ポートによるアクセス

Slide 44

Slide 44 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 44/66 Ingress クラスタと外部の通信 URLによるアクセス L7ロードバランシング

Slide 45

Slide 45 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 45/66 Config&Storageリソース

Slide 46

Slide 46 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 46/66 Config&Storageリソース Secret ConfigMap PersistentVolumeClaim

Slide 47

Slide 47 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 47/66 Secret 機密情報を定義 パスワード、トークン、Keyなど kubesec で暗号化

Slide 48

Slide 48 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 48/66 ConfigMap Key-Valueでデータを保持 設定情報とコンテナを分離

Slide 49

Slide 49 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 49/66 Clusterリソース

Slide 50

Slide 50 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 50/66 Clusterリソース Namespace ServiceAccount Role/ClusterRole RoleBinding/ClusterRoleBinding Volume PersistentVolume Node

Slide 51

Slide 51 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 51/66 Namespace リソースの分割 e.g. 開発者⽤、管理者⽤ アクセス制御 仮想クラスタ

Slide 52

Slide 52 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 52/66 StatefulSet データの永続化 Podの管理 それぞれのPodに個別ID 置き換え不可

Slide 53

Slide 53 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 53/66 Volume ホスト上の領域をマッピング ファイルの保存 コンテナ間のデータ共有

Slide 54

Slide 54 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 54/66 PersistentVolume 永続化領域 利⽤には PersistentVolumeClaim(PVC) が必要

Slide 55

Slide 55 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 55/66 Metadataリソース

Slide 56

Slide 56 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 56/66 Metadataリソース CustomResourceDefinition LimitRange HorizontalPodAutoscaler

Slide 57

Slide 57 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 57/66 マニフェスト例

Slide 58

Slide 58 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 58/66 Pod apiVersion: v1 kind: Pod metadata: name: sample-pod spec: containers: - name: nginx-container image: nginx:1.12

Slide 59

Slide 59 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 59/66 ReplicaSet apiVersion: apps/v1 kind: ReplicaSet metadata: name: sample-rs spec: replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.12 ports: - containerPort: 80

Slide 60

Slide 60 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 60/66 Deployment apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment spec: replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.12 ports: - containerPort: 80

Slide 61

Slide 61 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 61/66 Job apiVersion: batch/v1 kind: Job metadata: name: sample-job spec: completions: 1 parallelism: 1 backoffLimit: 10 template: spec: containers: - name: sleep-container image: centos:6 command: ["sleep"] args: ["60"] restartPolicy: Never

Slide 62

Slide 62 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 62/66 Secret apiVersion: v1 kind: Pod metadata: name: sample-secret-single-env spec: containers: - name: secret-container image: nginx:1.12 env: - name: DB_USERNAME valueFrom: secretKeyRef: name: sample-db-auth key: username

Slide 63

Slide 63 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 63/66 書籍紹介

Slide 64

Slide 64 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 64/66 書籍紹介

Slide 65

Slide 65 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 65/66 参考サイト 公式サイト https://kubernetes.io 『Kubernetes完全ガイド』の付録マニフェスト https://github.com/MasayaAoyama/kubernetes-perfect-guide 今こそ始めよう︕ Kubernetes⼊⾨ https://thinkit.co.jp/series/7342

Slide 66

Slide 66 text

2019/4/19 Kubernetes⼊⾨ 127.0.0.1:5500/#65 66/66 Thank you!