• 検索結果がありません。

Yahoo! JAPANにおけるOpenStack on Kubernetes導入までの道のり

N/A
N/A
Protected

Academic year: 2021

シェア "Yahoo! JAPANにおけるOpenStack on Kubernetes導入までの道のり"

Copied!
68
0
0

読み込み中.... (全文を見る)

全文

(1)

Dec 7, 2017

ヤフー株式会社 システム統括本部 サイトオペレーション本部

Yahoo! JAPANにおける

OpenStack on Kubernetes導入までの道のり

(2)

Who are we?

北田 駿也(Shunya Kitada)

2013年からヤフーのOpenStackチームに所属

OpenStackと社内システムの開発

OpenStackのデプロイシステムの開発

木下 裕太(Yuta Kinoshita)

• 2015年からヤフーのOpenStackチームに所属

(3)

アジェンダ

Yahoo! JAPANのプライベートクラウド

変化と課題

OpenStack on Kubernetesによる解決

Kubernetesによってもたらされるメリット

OpenStack on Kubernetes

構成、監視

まとめ

(4)

アンケート

OpenStack知ってる人?

使ったことある人?

開発で使ってる人?

(5)

アンケート

Kubernetes知ってる人?

使ったことある人?

開発で使ってる人?

(6)

Yahoo! JAPANの

(7)

Yahoo! JAPANのプライベートクラウド

• クラウド基盤 :

OpenStack

• 稼働時期 : 2011(In House)~

2013(OpenStack)〜

• クラスタ数 :

60以上

• OpenStackバージョン : Grizzly〜Mitaka

• HV数 :

7,000以上

• VM数 :

100,000以上

(8)

サービスドメイン on OpenStack

EC系

決済/金融系

メディア系

会員系

広告系

社内プラットフォーム系

etc...

(9)

インスタンス利用目的の変化と課題

2013

2014

2015

2016

既存のベアメタルを

VMへ置き換えたい

クラウドネイティブな

アーキテクチャを採

用したい

システム毎の要件に

マッチするクラスタが

欲しい

PaaSの基盤として使

いたい

本番環境のリリース

クラスタ増設

個別要件にマッチした

クラスタの構築

プラットフォーム毎の要件に

対応したクラスタの構築

ユーザの要望

クラウドチームの対応

(10)

インスタンス利用目的の変化と課題

2013

2014

2015

2016

既存のベアメタルを

VMへ置き換えたい

クラウドネイティブな

アーキテクチャを採

用したい

システム毎の要件に

マッチするクラスタが

欲しい

PaaSの基盤として使

いたい

本番環境のリリース

クラスタ増設

個別要件にマッチした

プラットフォーム毎の要件に

ユーザの要望

クラウドチームの対応

(11)

クラスタ数の増加によって

OpenStack

Cluster

OpenStack

Cluster

OpenStack

Cluster

OpenStack

Cluster

OpenStack

Cluster

OpenStack

Cluster

OpenStackクラスタの障害を自動で復旧させたい

クラスタの構築・更新を完全に自動化したい

障害対応

新規構築

検証等

運用者

(12)

障害アラートと問い合わせ

障害アラート件数の推移

問い合わせ件数の推移

H

L

(13)

プラットフォームの基盤となったことで

OpenStackAPIのアクセス数が激増

プラットフォームがシステムの健全性を確認する

高い頻度のインスタンスの作成と削除

OpenStackAPIの障害の深刻化

APIがダウンしている場合にプラットフォームが期待

した動作ができない可能性

場合によってはプラットフォーム上のAppに影響があ

る可能性

従来用途クラスタ

プラットフォーム基盤のクラスタ

APIのアクセス数

今まで以上に安定したOpenStackの提供

OpenStackのワークフローレベルでの健全性を担保

(14)

現在の課題

クラスタ数増加による障害の増加

障害の自動復旧が必要

クラスタの構築・更新を自動化する必要がある

OpenStackの障害範囲がプラットフォームまで拡大する

今まで以上に正常な動作が求められる

ワークフローレベルでの正常性担保が必要

(15)
(16)

課題に対する解決策

• 障害の自動復旧

• OpenStackクラスタの構築・更新を自動化

• ワークフローレベルの正常性担保

(17)

課題に対する解決策

• 障害の自動復旧

• OpenStackクラスタの構築・更新を自動化

• ワークフローレベルの正常性担保

人によるオーケストレーションではなく、

システムによるオーケストレーションが必要

(18)

課題に対する解決策

• 障害の自動復旧

• OpenStackクラスタの構築・更新を自動化

• ワークフローレベルの正常性担保

人によるオーケストレーションではなく、

システムによるオーケストレーションが必要

(19)

Kubernetes

コンテナのオーケストレーションツール

• コンテナのデプロイ、スケジューリング

• ヘルスチェック

• オートヒール、オートスケール

• ロードバランシング

マイクロサービスの管理に適する

(20)

Kubernetesの用語

Pod

Pod

nova.example.com

Ingress

nova-api-service

Configmap

Deployment

nova-api-deployment

Service

(21)

Kubernetesの用語

Pod

複数のコンテナをまとめたもの

nova-api

nova.conf

Pod

Pod

nova.example.com

Ingress

nova-api-service

Configmap

nova.conf

Deployment

nova-api-deployment

Service

(22)

Kubernetesの用語

Deployment

Rolling Updateを可能にする

ReplicaSetを管理し、Podの数を

一定に保とうとする。

Pod

Pod

nova.example.com

Ingress

nova-api-service

Configmap

Deployment

nova-api-deployment

Service

(23)

Kubernetesの用語

Service

Podをグルーピングしたものに

対してのアクセス方法を定義する

nova-api

nova.conf

Pod

Pod

nova.example.com

Ingress

nova-api-service

Configmap

nova.conf

Deployment

nova-api-deployment

Service

(24)

Kubernetesの用語

Ingress

L7ルーティングを柔軟に

設定できる

Pod

Pod

nova.example.com

Ingress

nova-api-service

Configmap

Deployment

nova-api-deployment

Service

(25)

Kubernetesの用語

Configmap

Configmap

configなどの設定情報を

Kubernetesクラスタ内で共有できる

nova-api

nova.conf

Pod

Pod

nova.example.com

Ingress

nova-api-service

nova.conf

Deployment

nova-api-deployment

Service

(26)

障害復旧を自動化

!

自動復旧

!

(27)

コンテナ毎の正常性担保

Liveness probe

HTTP/GET

Kubernetes nodes

Kubernetes nodes

削除

Timeout

再作成

自動復旧

(28)

定義書によるデプロイ

Image → Pike

Replicas → 2

Routing

Mount...etc

NovaのversionはPikeで

nova-api

nova.conf

Pod

Pod

Service

nova.example.com

Ingress

nova-api-service

Manifest

APIを叩いてdeploy

(29)

Helm

Kubernetesのパッケージマネージャ

• DeploymentやServiceのManifestを

Chartという形でパッケージング

• テンプレートエンジンを持つ(Valuesと

いう設定値を上書き可能)

• Chartでデプロイを管理可能(バージョ

ニング機能)

(30)

Helm

Pod

Service

Ingress

Configmap

Deployment

Pod

Chart

Values

Manifestの

テンプレート

テンプレートへ

埋め込む値

helm install

helm upgrade

helm downgrade

(31)

OpenStack on Kubernetes

OpenStackをKubernetes上で動かせば…

• 障害の自動復旧

• 個々のコンポーネントの正常性監視

• デプロイの簡略化

(32)

OpenStack on Kubernetes

OpenStackをKubernetes上で動かせば…

• 障害の自動復旧

• 個々のコンポーネントの正常性監視

• デプロイの簡略化

• しかし、Kubernetesのみではできないこともある

• ワークフローの正常性監視

• デプロイの完全自動化

(33)

OpenStack on Kubernetes

OpenStackをKubernetes上で動かせば…

• 障害の自動復旧

• 個々のコンポーネントの正常性監視

• デプロイの簡略化

• しかし、Kubernetesのみではできないこともある

• ワークフローの正常性監視

• デプロイの完全自動化

Kubernetesの機能をうまく利用することで実現ができそう

(34)

OpenStack on

Kubernetes

(35)

OpenStack on Kubernetes

• 構成・デプロイ

• 監視

(36)

OpenStack on

Kubernetes

(37)

構成の方針

ステートレスなサービスはKubernetes上へ

各API: Keystone, Glance, Nova, …

準ステートレスなサービスもKubernetes上へ

(データが消えてもいいもの)

RabbitMQ, Memcache

ステートフルなサービスはコンテナ化しない

DB, Glance Backend(Swift)

Libvirt

(38)

Kubernetes Nodes

OpenStack Controller

OpenStack Compute Nodes

仮想マシン (qemu process)

keystone

ステートフル

neutron

cinder

RabbitMQ

ingress-controller

neutron-agent

nova-compute

horizon

glance

nova

libvirtd

(39)

デプロイの方針

人の手でのデプロイは最初のみ

その後のデプロイは自動

Gitでソース管理、クラスタ構成を一元管理

(40)

デプロイに必要なもの

nova-api

nova.conf

Pod

Contianer

Configmap

Deployment

Pod

nova-api

Service

nova.example.com

Ingress

(41)

デプロイに必要なもの

nova-api

nova.conf

Pod

Contianer

Configmap

Deployment

Pod

nova-api

Service

nova.example.com

Ingress

(42)

デプロイに必要なもの

nova-api

nova.conf

Pod

Contianer

Configmap

Deployment

Pod

nova-api

Service

nova.example.com

Ingress

(43)

デプロイに必要なもの

nova-api

nova.conf

Pod

Contianer

Configmap

Deployment

Pod

nova-api

Service

nova.example.com

Ingress

(44)

OpenStack Deploy Manager

以下の機能を実現するために内製した

HelmによるOpenStackの自動デプロイ

HelmによるOpenStackのコンフィグ等の自動アップデート

Deploy Manager自身もHelmで管理される

Kubernetes上で動作する

(45)

初回構築時のフロー

Values

クラスタ固有の値

OpenStack chart

(46)

初回構築時のフロー

deploy-manager

values.yaml

Values

bootstrap-keystone.sh

bootstrap-nova.sh

Pod

Helmを利用してdeploy-managerをKubernetes上に展

(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

(48)

初回構築時のフロー

OpenStackクラスタが完成

nova-api

Pod

keystone

Pod

deploy-manager

values.yaml

Pod

(49)

アップデートのフロー

nova-api

nova.conf

Pod

Values

クラスタ固有の値

nova.confを

変えたい!

deploy-manager

values.yaml

Pod

(50)

アップデートのフロー

新しい設定値をGHEへPush

nova-api

Pod

NEW

deploy-manager

values.yaml

Pod

(51)

アップデートのフロー

Jenkinsがdeploy-managerを

helm upgradeする

nova-api

nova.conf

Pod

Values

クラスタ固有の値

NEW

deploy-manager

values.yaml

deploy-manager

values.yaml

NEW

Pod

Pod

(52)

アップデートのフロー

deploy-managerがbootstrap

スクリプトが再実行して、

configのアップデートがあった

OpenStackコンポーネントは

Rolling Updateする

nova-api

Pod

Pod

nova-api

nova.conf

openstack

deploy-manager

values.yaml

openstack

deploy-manager

values.yaml

NEW

bootstrap-nova.sh

Pod

Pod

Upgrade

(53)

コントローラ以外のデプロイ

OpenStack(コントローラ) on Kubernetesはできた!

それ以外は、どうやってデプロイする?

• Kubernetesのデプロイ

(54)

コントローラ以外のデプロイ

OpenStack(コントローラ) on Kubernetesはできた!

それ以外は、どうやってデプロイする?

• Kubernetesのデプロイ

• OpenStackコンピュートのデプロイ

Chef

Chef

(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コンピュート

(56)

OpenStack on

Kubernetes

(57)

監視の方針

OpenStackコントローラ(on Kubernetes)の監視

運用者はKubernetesが健全に動いていれば、

その上のOpenStackも内部的には健全であると判断する

外部監視(Rally)

シナリオ実行してワークフロー、SLAを監視

物理サーバ(Kubernetes, OpenStackコンピュート)の監視

プロセス監視、メトリクス監視、 ログ監視

(58)

OpenStackコントローラの監視

運用者はKubernetesが健全に動いていれば、

OpenStackが内部的には健全であると判断する

(59)

Kubernetesの機能による監視

Liveness probe

失敗したら再起動

Readiness probe

(60)

Liveness probe

Liveness probe

リクエストが失敗したら再起動

keystone

Pod

keystone

Pod

HTTP GET /v3

→ 200

HTTP GET /v3

keystone

Pod

keystone

Pod

HTTP GET /v3

→ 200

HTTP GET /v3

(61)

Readiness probe

Readiness probe

準備できるまでサービスインしない

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

成功したらサービスイン

(62)

Kubernetesの機能による監視

Kubernetesが動いているから

OpenStackも大丈夫?

Pod

nova

Pod

neutron

Pod

rabbitmq

Pod

(63)

外部監視

livenessprobe/readinessprobe

OpenStackのサービスが正しく

動作してるか監視したい!

(外部監視・ワークフロー監視)

外部監視システム

(Rally)

インスタンス作成

keystone

Pod

nova

Pod

neutron

Pod

rabbitmq

Pod

(64)

物理サーバの監視

監視方法

Kubernetes

OpenStackコンピュート

プロセス監視

• sensu

kubelet, docker, kube-api,

kube-proxy, …

nova-compute,

neutron-agent, libvirt, …

メトリクス監視

• sensu

• telegraf, influxdb, kapacitor

(試験導入中

)

CPU, Mem, Disk, …

CPU, Mem, Disk, …

(65)

Kubernetes Nodes

OpenStack Controller

OpenStack Compute Nodes

sensu-client

telegraf

Influxdb

kapacitor

外部監視

システム

splunk

sensu-client

telegraf

splunk

外部監視

メトリクス

監視

Kubernetesにより監視

nova-compute

neutron-agent

keytstone

neutron

horizon

glance

libvirtd

(66)

OpenStack on

Kubernetes

(67)

まとめ

クラスタ数増加による障害の増加

障害の自動復旧が必要

クラスタの構築・更新を自動化する必要がある

OpenStackの障害の影響が深刻化

ワークフローレベルでの正常性担保が必要

(68)

まとめ

クラスタ数増加による障害の増加

障害の自動復旧が必要

クラスタの構築・更新を自動化する必要がある

OpenStackの障害の影響が深刻化

ワークフローレベルでの正常性担保が必要

Kubernetesによる自動復旧

Deploy Managerによる自動デプロイ

参照

関連したドキュメント

The results presented in this section illustrate the behaviour of the proposed estimators in finite samples, when the original estimator is the Hill estimator, b γ n (k) ≡ γ b n H

Abstract: In this paper, sine, cosine, hyperbolic sine and hyperbolic cosine trav- elling wave solutions for a class of linear partial difference equations modeling

The class of estimators introduced is dependent on some control or tuning parameters and has the advantage of providing estimators with stable sample paths, as functions of the number

クチャになった.各NFは複数のNF  ServiceのAPI を提供しNFの処理を行う.UDM(Unified  Data  Management) *11 を例にとれば,UDMがNF  Service

サーバー API 複雑化 iOS&Android 間で複雑な API

従来から iOS(iPhone など)はアプリケーションでの電話 API(Application Program

つまり、p 型の語が p 型の語を修飾するという関係になっている。しかし、p 型の語同士の Merge

Conditions for transmitter specifications unless otherwise specified with the antenna network from AX−SFUS Application Note: Sigfox Compliant Reference Design and at 902.2 MHz?.