Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Dec 7, 2017
1
ヤフー株式会社 システム統括本部 サイトオペレーション本部
北田駿也 木下裕太
Yahoo! JAPANにおける
OpenStack on Kubernetes導入までの道のり
続
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Who are we?北田 駿也(Shunya Kitada)
• 2013年からヤフーのOpenStackチームに所属
• OpenStackと社内システムの開発
• OpenStackのデプロイシステムの開発
2
木下 裕太(Yuta Kinoshita)
• 2015年からヤフーのOpenStackチームに所属
• OpenStackの運用に従事
• Kubernetesの技術調査や構築
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アジェンダ
• Yahoo! JAPANのプライベートクラウド
• 変化と課題
• OpenStack on Kubernetesによる解決
• Kubernetesによってもたらされるメリット
• OpenStack on Kubernetes
• 構成、監視
• まとめ
3
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アンケート
OpenStack知ってる人?
使ったことある人?
開発で使ってる人?
プロダクションで使ってる人?
4
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アンケート
Kubernetes知ってる人?
使ったことある人?
開発で使ってる人?
プロダクションで使ってる人?
5
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANの
プライベートクラウド
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Yahoo! JAPANのプライベートクラウド
• クラウド基盤 : OpenStack
• 稼働時期 : 2011(In House)~
2013(OpenStack)〜
• クラスタ数 : 60以上
• OpenStackバージョン : Grizzly〜Mitaka
• HV数 : 7,000以上
• VM数 : 100,000以上
7
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
サービスドメイン on OpenStack
• EC系
• 決済/金融系
• メディア系
• 会員系
• 広告系
• 社内プラットフォーム系
• etc...
8
ミッションクリティカルなシステム多数これら多くのサービスでプライベートクラウドを利用
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
インスタンス利用目的の変化と課題
9
2013 2014 2015 2016
既存のベアメタルをVMへ置き換えたい
クラウドネイティブなアーキテクチャを採
用したい
システム毎の要件にマッチするクラスタが
欲しい
PaaSの基盤として使いたい
本番環境のリリース クラスタ増設 個別要件にマッチしたクラスタの構築
プラットフォーム毎の要件に対応したクラスタの構築
ユーザの要望
クラウドチームの対応
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
インスタンス利用目的の変化と課題
10
2013 2014 2015 2016
既存のベアメタルをVMへ置き換えたい
クラウドネイティブなアーキテクチャを採
用したい
システム毎の要件にマッチするクラスタが
欲しい
PaaSの基盤として使いたい
本番環境のリリース クラスタ増設 個別要件にマッチしたクラスタの構築
プラットフォーム毎の要件に対応したクラスタの構築
ユーザの要望
クラウドチームの対応
クラスタ数の増加OpenStack APIの障害範囲が拡大
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
クラスタ数の増加によって
11
OpenStackCluster
OpenStackCluster
OpenStackCluster
OpenStackCluster
OpenStackCluster
OpenStackCluster
OpenStackクラスタの障害を自動で復旧させたいクラスタの構築・更新を完全に自動化したい
障害対応新規構築
検証等
運用者
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
障害アラートと問い合わせ
12
障害アラート件数の推移 問い合わせ件数の推移
H
L
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
プラットフォームの基盤となったことで
• OpenStackAPIのアクセス数が激増• プラットフォームがシステムの健全性を確認する
• 高い頻度のインスタンスの作成と削除
• OpenStackAPIの障害の深刻化• APIがダウンしている場合にプラットフォームが期待
した動作ができない可能性
• 場合によってはプラットフォーム上のAppに影響がある可能性
13
従来用途クラスタ
プラットフォーム基盤のクラスタ
APIのアクセス数
今まで以上に安定したOpenStackの提供OpenStackのワークフローレベルでの健全性を担保
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
現在の課題
• クラスタ数増加による障害の増加
• 障害の自動復旧が必要
• クラスタの構築・更新を自動化する必要がある
• OpenStackの障害範囲がプラットフォームまで拡大する
• 今まで以上に正常な動作が求められる
• ワークフローレベルでの正常性担保が必要
• インスタンスが立つか?
• ボリュームがアタッチできるか?
14
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
課題に対する解決策
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
課題に対する解決策
• 障害の自動復旧
• OpenStackクラスタの構築・更新を自動化
• ワークフローレベルの正常性担保
16
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
課題に対する解決策
• 障害の自動復旧
• OpenStackクラスタの構築・更新を自動化
• ワークフローレベルの正常性担保
17
人によるオーケストレーションではなく、システムによるオーケストレーションが必要
?
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
課題に対する解決策
• 障害の自動復旧
• OpenStackクラスタの構築・更新を自動化
• ワークフローレベルの正常性担保
18
人によるオーケストレーションではなく、システムによるオーケストレーションが必要
?
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetes
19
コンテナのオーケストレーションツール
• コンテナのデプロイ、スケジューリング• ヘルスチェック• オートヒール、オートスケール• ロードバランシング
マイクロサービスの管理に適する
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
20
nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
Configmap
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
21
Pod複数のコンテナをまとめたもの
nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
Configmap
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
22
DeploymentRolling Updateを可能にするReplicaSetを管理し、Podの数を一定に保とうとする。
nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
Configmap
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
23
ServicePodをグルーピングしたものに対してのアクセス方法を定義する nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
Configmap
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
24
IngressL7ルーティングを柔軟に設定できる
nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
Configmap
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの用語
25
Configmap
Configmapconfigなどの設定情報をKubernetesクラスタ内で共有できる
nova-api
nova.conf
Pod Pod
nova.example.com
Ingress
nova-api-service
nova.conf
Deployment
nova-api-deployment
マウント
Service
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
障害復旧を自動化
26
!
自動復旧
Kubernetes nodes
!
Kubernetes nodes
自動復旧
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
コンテナ毎の正常性担保
27
Liveness probe
HTTP/GET
Kubernetes nodesKubernetes nodes
削除Timeout
再作成
自動復旧
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
定義書によるデプロイ
28
Image → Pike
Replicas → 2
Routing
Mount...etc
NovaのversionはPikeでNova APIのPodは2つでnova.confをマウントして外からはこのドメインでアクセスさせて
nova-api
nova.conf
Pod Pod
Service
nova.example.com
Ingress
nova-api-service
Manifest
APIを叩いてdeploy
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Helm
29
Kubernetesのパッケージマネージャ
• DeploymentやServiceのManifestをChartという形でパッケージング
• テンプレートエンジンを持つ(Valuesという設定値を上書き可能)
• Chartでデプロイを管理可能(バージョニング機能)
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Helm
30
Pod
Service
Ingress
Configmap
Deployment
Pod
ChartValues
Manifestのテンプレート
テンプレートへ埋め込む値
アプリケーションをconfig等も含めた形で管理versioningによる、upgrade/downgradeも可能に
helm install
helm upgrade
helm downgrade
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on Kubernetes
• OpenStackをKubernetes上で動かせば…
• 障害の自動復旧
• 個々のコンポーネントの正常性監視
• デプロイの簡略化
31
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on Kubernetes
• OpenStackをKubernetes上で動かせば…
• 障害の自動復旧
• 個々のコンポーネントの正常性監視
• デプロイの簡略化
• しかし、Kubernetesのみではできないこともある
• ワークフローの正常性監視
• デプロイの完全自動化
32
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on Kubernetes
• OpenStackをKubernetes上で動かせば…
• 障害の自動復旧
• 個々のコンポーネントの正常性監視
• デプロイの簡略化
• しかし、Kubernetesのみではできないこともある
• ワークフローの正常性監視
• デプロイの完全自動化
33
Kubernetesの機能をうまく利用することで実現ができそう
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on
Kubernetes
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on Kubernetes
• 構成・デプロイ
• 監視
35
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on
Kubernetes
構成
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
構成の方針
• ステートレスなサービスはKubernetes上へ
• 各API: Keystone, Glance, Nova, …
• 準ステートレスなサービスもKubernetes上へ
• (データが消えてもいいもの)
• RabbitMQ, Memcache
• ステートフルなサービスはコンテナ化しない
• DB, Glance Backend(Swift)
• Libvirt
37
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.38
Kubernetes NodesOpenStack Controller
OpenStack Compute Nodes
仮想マシン (qemu process)
MySQL Swift
keystone
ステートレス
ステートフル
neutron
cinder
RabbitMQ
ingress-controller
neutron-agent
nova-compute
horizon
glance
nova
libvirtd
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
デプロイの方針
• 人の手でのデプロイは最初のみ
• その後のデプロイは自動
• Gitでソース管理、クラスタ構成を一元管理
• 最新の変更を常に、クラスタへ自動反映する
39
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
デプロイに必要なもの
40
nova-api
nova.conf
PodContianer
Configmap
Deployment
Pod
nova-api
Service
nova.example.com
Ingress
Docker Image
Docker Registry
helm install
Dockerfile Chart Values
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
デプロイに必要なもの
41
nova-api
nova.conf
PodContianer
Configmap
Deployment
Pod
nova-api
Service
nova.example.com
Ingress
Docker Image
Docker Registry
helm install
Dockerfile Chart Values
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
デプロイに必要なもの
42
nova-api
nova.conf
PodContianer
Configmap
Deployment
Pod
nova-api
Service
nova.example.com
Ingress
Docker Image
Docker Registry
helm install
Dockerfile Chart Values
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
デプロイに必要なもの
43
nova-api
nova.conf
PodContianer
Configmap
Deployment
Pod
nova-api
Service
nova.example.com
Ingress
Docker Image
Docker Registry
helm install
Dockerfile Chart Values
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack Deploy Manager
• 以下の機能を実現するために内製した
• HelmによるOpenStackの自動デプロイ
• HelmによるOpenStackのコンフィグ等の自動アップデート
• Deploy Manager自身もHelmで管理される
• Kubernetes上で動作する
44
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
初回構築時のフロー
45
Valuesクラスタ固有の値
OpenStack chart
構築時に準備するもの
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
初回構築時のフロー
46
deploy-manager
values.yaml
Valuesクラスタ固有の値
OpenStack chart
bootstrap-keystone.sh
bootstrap-nova.sh
PodHelmを利用してdeploy-managerをKubernetes上に展開
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
初回構築時のフロー
47
自動でdeploy-managerがKubernetes上にOpenStackを展開する
nova-api
nova.conf
Pod
keystone
keytone.conf
Pod
deploy-manager
values.yaml
bootstrap-keystone.sh
bootstrap-nova.sh
helm install
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
初回構築時のフロー
48
OpenStackクラスタが完成
nova-api
nova.conf
Pod
keystone
keytone.conf
Pod
deploy-manager
values.yaml
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アップデートのフロー
49
nova-api
nova.conf
Pod
Values
クラスタ固有の値
nova.confを変えたい!
deploy-manager
values.yaml
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アップデートのフロー
50
新しい設定値をGHEへPush
nova-api
nova.conf
Pod
Values
クラスタ固有の値
NEW
deploy-manager
values.yaml
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アップデートのフロー
51
Jenkinsがdeploy-managerをhelm upgradeする
nova-api
nova.conf
Pod
Values
クラスタ固有の値
NEW
deploy-manager
values.yaml
deploy-manager
values.yaml NEW
Pod Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
アップデートのフロー
52
deploy-managerがbootstrapスクリプトが再実行して、configのアップデートがあったOpenStackコンポーネントはRolling Updateする
nova-api
nova.conf
Pod Pod
nova-api
nova.conf
Rolling Update
openstack
deploy-manager
values.yaml
openstack
deploy-manager
values.yaml
NEW
NEW
bootstrap-nova.sh
Pod Pod
Upgrade
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
コントローラ以外のデプロイ
OpenStack(コントローラ) on Kubernetesはできた!
それ以外は、どうやってデプロイする?
• Kubernetesのデプロイ
• OpenStackコンピュートのデプロイ
53
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
コントローラ以外のデプロイ
OpenStack(コントローラ) on Kubernetesはできた!
それ以外は、どうやってデプロイする?
• Kubernetesのデプロイ
• OpenStackコンピュートのデプロイ
54
Chef
Chef
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
コントローラ以外のデプロイ
55
kubelet
chef-client
chef-server
kubelet
chef-client
neutron-agent
chef-client
nova-compute
libvirt
neutron-agent
chef-client
nova-compute
libvirt
neutron-agent
chef-client
nova-compute
libvirt
自動更新 Cookbook, Role
Kubernetes OpenStackコンピュート
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on
Kubernetes
監視
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
監視の方針
OpenStackコントローラ(on Kubernetes)の監視
運用者はKubernetesが健全に動いていれば、
その上のOpenStackも内部的には健全であると判断する
外部監視(Rally)
シナリオ実行してワークフロー、SLAを監視
物理サーバ(Kubernetes, OpenStackコンピュート)の監視
プロセス監視、メトリクス監視、 ログ監視
57
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStackコントローラの監視
運用者はKubernetesが健全に動いていれば、
OpenStackが内部的には健全であると判断する
58
Kubernetesの機能でOpenStackの各コンポーネントが、すべて正常に稼働していることを保証する
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの機能による監視
• Liveness probe
• 失敗したら再起動
• Readiness probe
• 準備できるまでサービスインしない
59
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Liveness probe
• Liveness probe
• リクエストが失敗したら再起動
60
keystone
Pod
keystone
Pod
HTTP GET /v3
→ 200
HTTP GET /v3
→ 500keystone
Pod
keystone
Pod
HTTP GET /v3
→ 200
HTTP GET /v3
→ 200
失敗したら再起動
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Readiness probe
• Readiness probe
• 準備できるまでサービスインしない
61
keystone
Pod
keystone
Pod
keystone
Service
HTTP GET /v3
→ 200
HTTP GET /v3
→ 500
keystone
Pod
keystone
Pod
keystone
Service
HTTP GET /v3
→ 200
HTTP GET /v3
→ 200
成功したらサービスイン
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
Kubernetesの機能による監視
Kubernetesが動いているからOpenStackも大丈夫?
keystone
Pod
livenessprobe/readinessprobe
nova
Pod
neutron
Pod
rabbitmq
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
外部監視
livenessprobe/readinessprobe
OpenStackのサービスが正しく動作してるか監視したい!
(外部監視・ワークフロー監視)
外部監視システム(Rally)
インスタンス作成
keystone
Pod
nova
Pod
neutron
Pod
rabbitmq
Pod
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
物理サーバの監視監視方法 Kubernetes OpenStackコンピュート
プロセス監視• sensu
kubelet, docker, kube-api,
kube-proxy, …
nova-compute, neutron-
agent, libvirt, …
メトリクス監視• sensu
• telegraf, influxdb, kapacitor
(試験導入中)
CPU, Mem, Disk, … CPU, Mem, Disk, …
ログ監視• splunk
etcd timeout, kube-dns
cannot connect, …
NIC Link Down, MEMORY
CONTROLLER, …
64
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.65
Kubernetes NodesOpenStack Controller
OpenStack Compute Nodes
sensu-client telegraf
Influxdbkapacitor
sensu
外部監視システム
splunk
splunk
sensu-client telegraf
splunk
外部監視
メトリクス監視
汎用監視 ログ監視
Kubernetesにより監視
nova-compute
neutron-agent
keytstone neutron
horizonglance
libvirtd
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
OpenStack on
Kubernetes
まとめ
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
まとめ
• クラスタ数増加による障害の増加
• 障害の自動復旧が必要
• クラスタの構築・更新を自動化する必要がある
• OpenStackの障害の影響が深刻化
• ワークフローレベルでの正常性担保が必要
67
Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
まとめ
• クラスタ数増加による障害の増加
• 障害の自動復旧が必要
• クラスタの構築・更新を自動化する必要がある
• OpenStackの障害の影響が深刻化
• ワークフローレベルでの正常性担保が必要
68
Kubernetesによる自動復旧
Deploy Managerによる自動デプロイ
外部監視システムによる監視