OSS のコンテナ
オーケストレーションツール
Kubernetes のご紹介

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

1

コンテナとは ホストOS上に論理的な区画(コンテナ)を作ってアプリケーションを動作させるために必要なプログラムなどをまとめたもの
 ホストOS上のリソースをコンテナで共有して利用
コンテナ
コンテナ
バイナリ
バイナリ
 サーバ仮想化に対して
ライブラリ
ライブラリ
オーバヘッドが少なく
コンテナランタイム
 複数のコンテナを組み合わせてOS一つのアプリケーションを作る
マイクロサービスとの相性がよい
ハードウェアCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

2

コンテナを利用しないアプリ開発の問題点
 開発環境・テスト環境・ステージング環境・本番環境など、複数の環境でインフラ・ミドルウェアの違いに依存する問題が発生しやすい開発

テスト

ステージング

本番

アプリ

アプリ

アプリ

アプリ

ミドルウェアミドルウェアミドルウェアミドルウェア

OS

OS

OS

OS

H/W

H/W

H/W

H/W

同じ環境??
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

3 サービスが増えると開発環境・テスト環境・ステージング環境・本番環境も増える・・
ＡＢＣサービス向けシステム

新サービス向け
システム

インフラの準備時間とテスト実施のための時間がかかってしまって迅速な開発・サービス提供ができなくなってしまう
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

4

コンテナを利用したアプリ開発
 コンテナランタイム上で同じイメージを動かすことで環境の違いのリスクを減らすことができる コンテナ間は独立しているので、同じホスト上でも動作させることができる
 サーバ仮想化に対してオーバヘッドが少ないため、サーバの利用効率が上昇する

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

5 コンテナの構成ファイルをGitリポジトリで管理・共有できる
 コンテナのイメージをリポジトリで管理・共有できる
 継続的インティグレーション／継続的デリバリー（CI・CD）を実施しやすく、アプリケーション開発が効率的にできる
CI/CDアプリケーションソースコードの変更がされたら即座にコンテナを作成して、テスト環境でテストして本番環境にリリース可能な状況にしておく

生産性の向上や環境管理の負荷軽減が期待できる
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

6

コンテナオーケストレーション
 コンテナを動かす際には、可用性・性能を考慮して複数のホストマシンから構成されるクラスタが必要コンテナを管理するためのクラスタプラットフォーム
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

7

2025年の崖(経済産業省より)https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/20180907_report.html

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

8

kubernetesとは Googleでの10年以上の運用経験をもとに設計されたシステムをオープンソース化(2014~)
 CNCFにより開発・メンテナンス
 ベンダーフリー・認定システム間で互換性が高い
 kubernetesを中心としたエコシステムの整備- Prometheus – fluentd

https://www.cncf.io/certification/software-conformance/

 大規模クラスタをサポート
https://kubernetes.io/docs/setup/best-practices/cluster-large/

項目

サポート対象

ノード数

5000台以下

Pod数

150,000以下

コンテナ数

300,000以下

１ノードあたりのpod数

100以下
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

9

Kubernetes リリースサイクル
 Kubernetes X.Y.Z
 X メジャーバージョン
 Y マイナーバージョン
 Z パッチバージョン
 最新 1.16.2 (11/4時点)

 マイナーバージョンのリリースサイクル 約３カ月
 ３つのマイナーバージョンをメンテナンス
一つのマイナーバージョンは約９か月間のみメンテナンスされる
https://kubernetes.io/docs/setup/release/version-skew-policy/

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

10

kubernetesの大きな特徴
 ユーザが宣言的に「あるべき状態」を定義
 Kubernetesは「あるべき状態」になるように「自律的」に働く
CHECK あるべき状態 = 実際の状態

Reconciliation
Loop
あるべき状態

実際の状態

状態が異なれば「あるべき状態」に直す
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

11あるべき状態 宣言１： Nginx を3つ動かす
１つのNginxに障害が発生して、合計2つしか動いていない
場合には新規で起動⇒ 障害の自動修復

 宣言2: Nginxの平均CPU利用率が50%になるようにNginxを自動的に増やす⇒ 水平オートスケール

 宣言3: ノードのリソースが不足したらノードを追加⇒ ノードの水平オートスケール
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

12あるべき状態 宣言１： Nginx を3つ動かす
Nginxが2つしか動いていない場合には新規で起動⇒ 可用性

Kubernetesの特徴
 宣言2: Nginxの平均CPU利用率が50%になるようにNginxを自動的に増やす「あるべき状態」になるように「自律的」に働く
 宣言3: ノードのリソースが不足したらノードを追加⇒ 水平オートスケール⇒ ノードの水平オートスケール

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

13

YAMLによる構成管理
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-masterlabels:app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend

replicas: 1
template:
metadata:labels:app: redis
role: master
tier: backend
spec:
containers:- name: master

構成をファイルで定義できる
Githubなどで管理しやすい複製数の指定

image: redis:5.0.4
resources:
requests:

cpu: 100m
memory: 100Mi

コンテナイメージの指定
H/Wリソースの設定

ports:- containerPort: 6379

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

14

kubernetes アーキテクチャ
全体像

クライアントkubectl

etcd

ノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerマスタ

kube-apiserver

kubescheduler

kubeproxy

kubecontrollermanager

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

15

kubernetes アーキテクチャ
原則

クライアントkubectl

etcd

マスタ

kube-apiserver

kubescheduler

kubecontrollermanager•

kubeノードは各コンポーネント
proxykube-apiserverを通してRuntime
kubelet
やりとりを行う
Docker• データはetcdに保存される• kube-apiserverからのみkubeノードetcdへアクセスできる
proxy• 部分的な障害がサービス
Runtimekubelet
停止にならないようなアー
Docker
キテクチャ• 他のコンポーネントに接続
kubeができなくても、各コンポー
ノード
proxy
ネントは直近の内容をもとRuntimeに動作を続ける
kubeletDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

16

kubernetes アーキテクチャ
クライアントkubectl

kubectl⇒kube-apiserver
etcdマスタkube-apiserver

kubescheduler• kubectlコマンドからkubekubeapiserverに接続を行い構成
ノード
proxyの定義• kube-apiserverではetcdRuntime
kubeletDockerに設定の永続化を行う

kubecontrollermanager

kubeproxyノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

17

kubernetes アーキテクチャ
クライアントkubectl• kube-schedulerはkubekube-scheduler
kubeノード
apiserverに接続を行って、proxy⇒kube-apiserver

etcdマスタkube-apiserver

kubescheduler

kubecontrollermanager

各ノードのリソース利用状況
Runtimekubeletをもとに、どこのノードでDockerPod(コンテナ)を動かすか決定して、kube-apiserver経kube由でetcdに情報を保存
ノード
proxy
kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

18

kubernetes アーキテクチャ
クライアントkubectl

kube-controller-manager⇒kube-apiserver
etcd

マスタ

kube-apiserver

kubescheduler

kubecontrollermanager• kube-controllerRuntime
kubeletDockermanagerはkubeapiserverに接続を行って、ノードの管理、リソース(レプkubeノード
proxy
リカ、デプロイメントなど)の管理
RuntimekubeletDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

19

kubernetes アーキテクチャ
クライアントkubectl• Kubeletはkubekubelet
kubeapiserverから自分のノード
ノード
proxy⇒kube-apiserver で動かすPodの情報を取得

etcd

マスタ

kube-apiserver

kubescheduler

kubecontrollermanager

Runtime
して、Runtime経由でPod起
kubeletDocker
動する
kubeproxyノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

20

kubernetes アーキテクチャ
クライアントkubectl• kub-proxyは、kubekube-proxykubeapiserverからネットワーク構成
ノード
proxy
⇒kube-apiserver の情報を受け取り、自ホストのRuntime
ネットワークをiptablesなどを利
kubelet用して定義する Docker
etcdマスタkube-apiserver

kubescheduler

kubecontrollermanager

kubeproxyノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

21kubernetes アーキテクチャ• 各コンポーネントがkubeノード
Reconciliation-loopをproxy回しながら自分の仕事にRuntime
kubeletDocker
専念する

クライアントkubectl

etcd

マスタ

kube-apiserver

kubescheduler

kubecontrollermanager

kubeproxyノード

kubelet

RuntimeDocker

kubeproxyノード

kubelet

RuntimeDockerCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

22

Podについて kubernetesにデプロイする「論理ホスト」
 １つ以上のコンテナ
 共有ネットワーク
 共有ボリューム 同じPod内のコンテナは同一ノードにデプロイされる
 PodはいずれかのNamespaceに属する
ＮＩＣ

Ｐｏｄ

ノード

コンテナ

https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

ボリューム
23

Namespace(名前空間)
 一つのk8sクラスター上で複数の仮想クラスターの動作をサポート
ユーザ1
ユーザ2

ステージング

単体テスト

開発・テスト環境

テナントX
テナントY

サービスＡ

サービスB

本番環境

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

24

ReplicaSetについて
 Podの上位リソース
 同じPodを指定数だけ起動して管理するリソース(コントローラが指定数動いているか確認する)

ReplicaSet
Nginx-rs

Pod
Nginx

Pod
Nginx

Pod
Nginx

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

25

Deploymentについて
 ReplicaSetの上位リソース
 バージョン管理
特定のバージョンにアップ
デート/ロールバック アップデート戦略
 Recreate
Podをすべて停止、新しいバージョンで一斉に起動 RollingUpdate
少数の Pod を順次アップ
デートDeployment
ReplicaSet
PodversionCopyright © 2019 SRA OSS, Inc. Japan All rights reserved.

Pod
version26

Serviceについて
 PodのIPアドレスは不定
 ServiceはPodへのエンドポイントを提供する
 クラスタ内部向け
 外向け
 クラスタ内外の負荷分散

Ｓｅｒｖｉｃｅ
RedisEndpoint

 Kubernetes内部でもっている
DNSを利用して名前解決

PodRedis アプリからはサービス名でアクセス
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

27

その他のリソース
 DaemonSet
 各ノードで一つだけ動くPod

 Statefulset
 状態を保持するアプリケーション
 ネットワーク識別子、永続的なストレージを利用できる

 Job/CronJob 処理が終わったら終了するPod

 PersistentVolume/PesistentVolumeClaim 永続的なボリューム ConfigMap/Secret 設定・パスワード
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

28

構成図とkubernetesのリソースリソースを組み合わせてYAMLファイルで構成定義

構成図Service

LOADBALANCER

WEBparameter

LBWEB

WEB

Deployment
WEB

Replica=3
WEB

ServiceDB

ConfigMap

DBACCESS

SecretDBuserDBpassword

StatefulSet
replica=1
DB

ConfigMap
DBparameter

PVC
10G
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

29

カスタムリソース
 リソースを自分で作ることもできる⇒ 独自のReconclilation Loopの開発
 オペレータの運用ノウハウをコードで表現できる https://operatorhub.io/で公開されている
例: Zalando社：Postgres-Operator
PostgreSQL SR構成を管理してくれるリソース
Primary-Standby(マスタ-スレーブ)の状態管理

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

30

システム管理者と開発者の役割
VMによる運用 システム管理者

VMの払い出しネットワークの定義
ホストの監視・管理
ミドルウェアの冗長化
対策

 開発者


sshなどでVMにアクセスして環境の構築

コンテナによる運用
 システム管理 kubernetesクラスタの監視・管理

 開発者
 ファイルベースで構成を定義
 Gitなどでアプリケーションと構成を管理

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

31

kubernetes 長所と短所
Pros コンテナ開発による生産性の向上
 コンテナによる環境管理の負荷軽減
 コンテナによる効率的なサーバ運用
 自動スケーリング
 障害の自動修復
 ファイルベースによる構成、バージョン管理 特定のベンダに支配されない標準技術Cons 学習コストが高い
 Kubernetesのリリースが早くて追従が大変 エコシステム(関連ソフトウェア)も進歩が速く追従が大変
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

32

kubernetesの学習 オンラインコースの活用 ブラウザでkubernetesクラスタを操作できる

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

33

認定資格制度 Certified Kubernetes Administrator (CKA)
試験 Kubernetesの管理者に必要なスキル、知識、および能力が問われる試験 ハンズオン形式の試験 試験時間3時間

 Certified Kubernetes Application Developer（CKAD）試験 Kubernetes上でアプリケーションを設計・構築・設定・展開できることを証明する資格試験
 ハンズオン形式の試験 試験時間 2時間
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

34

情報収集
 kubernetes slack https://slack.k8s.io/#jp-users #jp-events チャンネル Kubernetes Meetup Tokyo
https://k8sjp.connpass.com/
毎月開催 19:00~
200~300人規模のイベント
youtube配信あり

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

35

CNCF トレイルマップ

https://github.com/cncf/landscape/blob/master/README.md#trail-map
Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

36

CNCF landscape

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

37

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

Copyright © 2019 SRA OSS, Inc. Japan All rights reserved.

38