Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FJCS for OSS OpenStackパブリッククラウドの品質確保の取り組み

FJCS for OSS OpenStackパブリッククラウドの品質確保の取り組み

日本OpenStackユーザー会 第43回勉強会(https://openstack-jp.connpass.com/event/144972/)での発表資料です

Noboru Iwamatsu

September 09, 2019
Tweet

More Decks by Noboru Iwamatsu

Other Decks in Technology

Transcript

  1. FUJITSU Cloud Service for OSS: OpenStack パブリッククラウドの品質確保の取り組み 2019/9/9 日本OpenStackユーザ会第43回勉強会 0

    富士通株式会社 クラウドサービス事業本部)ファウンデーションサービス事業部)技術戦略部 岩松 昇、松木 辰真 Copyright 2019 FUJITSU LIMITED
  2. 自己紹介 ◼ 岩松 昇 (いわまつ のぼる) [email protected] ◼ FUJITSU Cloud

    Service for OSSのOpenStack基盤の設計・開発責任者 ◼ 富士通研究所入社、OS・仮想化・クラウドの研究に従事した後、2016年より現所属で クラウド基盤開発の指揮を執る。 ◼ オープンソースとは開発者として10数年の関わり • OpenStack, Xen, Linux, QEMU, cobbler, MidoNetなどにコントリビュート ◼ 最近の発表 • OpenStack Days Tokyo 2019 「FUJITSU Cloud Service for OSSにおけるOpenStack ユーザーストーリーズ」 • OpenStack Days Tokyo 2018 「FUJITSU Cloud Service for OSSを支えるコンテナとCI/CD技術」 • Ansible Night Tokyo 2017.12 「OpenStackをAnsibleで操る!」 • OpenStack Summit Sydney 2018 「Lift-and-Shift Enterprise Workloads to K5 Bare Metal Service」 Copyright 2019 FUJITSU LIMITED 1
  3. アウトライン ◼ FUJITSU Cloud Service for OSS とは ◼ OpenStack準拠のパブリッククラウド!

    ◼ 品質確保のための基盤設計 ◼ 「すぐに直せる」ための基盤設計 ◼ FJCS for OSSにおけるOpenStack CI/CD ◼ 全ログのリアルタイム分析 ◼ OpenStack 機能・性能テストに関する取り組み ◼ FJCS for OSSにおけるTempest活用 ◼ Rallyによる性能測定とスケーラビリティ試験 Copyright 2019 FUJITSU LIMITED 2
  4. 富士通のクラウドサービスラインアップ Copyright 2019 FUJITSU LIMITED OSSベースのクラウドサービス FUJITSU Cloud Service for

    OSS VMware社の製品群ベースのクラウドサービス FUJITSU Cloud Service for VMware •ベアメタルサーバ+ESXi •VCF(VMware Cloud Foundation) •LCP(Local Cloud Platform) •NIFCLOUD Microsoft社のAzureを活用したクラウドサービス FUJITSU Cloud Service for Microsoft Azure Amazon社のAWSを活用したクラウドサービス FUJITSU Cloud Service for AWS :自社クラウド (当社がクラウド基盤を構築/運用) :パートナークラウド (パートナークラウドに当社サービスを付加して再販) 4
  5. 自社クラウドは標準技術により提供 FUJITSU Cloud Service for OSS KVM OpenStack ◆オープンソースによるクラウド FUJITSU

    Cloud Service for VMware VMware Cloud Foundation ESXi ◆VMwareをベースとするクラウド オープンソースをベースとする エンタープライズITソリューション 業界標準の仮想化技術により 既存資産のクラウド移行を支援 ベンダーロックインのない標準技術でクラウドを継続的に提供 Copyright 2019 FUJITSU LIMITED 5
  6. FUJITSU Cloud Service for OSS とは ◼ 2015年9月提供開始 ◼ 旧称:

    FUJITSU Cloud Service K5 ◼ OpenStackベース(+独自拡張)のIaaS ◼ 2018年6月に基盤刷新&名称変更 ◼ OpenStackを最新化、そのまま利用 「OpenStack準拠」のパブリッククラウド Copyright 2019 FUJITSU LIMITED http://jp.fujitsu.com/solutions/cloud/k5/ オープンソースをベースとする国産クラウド 6
  7. FUJITSU Cloud Service for OSS: オープンソースとベンダー協業により自社クラウドを提供 ◼ RedHat社との協業によりOpenStack基盤を刷新 ◼ RHOSPによりサービスを提供、

    2019年10月にRHOSP13(Queens)へ更新予定 ◼ RHEL AUS* 提供によりシステムの長期運用を サポート *Advanced Mission Critical Update Support ビジネスパートナーの最新・最高技術を高度にインテグレーション Copyright 2019 FUJITSU LIMITED 7
  8. FUJITSU Cloud Service for OSS: OpenStack準拠のサービス群 Copyright 2019 FUJITSU LIMITED

    仮想マシンとベアメタル 仮想ネットワーク • FWaaS • OctaviaによるLBaaS 認証・証明書管理 オブジェクトストレージ • SwiftとS3互換、DR対応 オーケストレーション • FWaaS/LBaaS対応 https://www.openstack.org/project-mascots/ 仮想マシン・ベアメタル • Ironicによるベアメタル • GPGPUインスタンス対応 ブロックストレージ ・イメージ • All Flash Storage • データ持ち込みサービス 8
  9. FUJITSU Cloud Service for OSS: クラウド基盤の設計方針 Copyright 2019 FUJITSU LIMITED

    ◼ ブラックボックスの集合体の安定運用が課題 ◼ クラウド基盤は要件・問題を事前把握できない クラウド基盤 Open Stack Multi-vendor Hardware Hypervisor お客様システム VM … VM お客様システム VM VM お客様のワークロードを事前定義できない ブラックボックス部品、バグ・未成熟箇所あり 増設やバージョンアップで特性が動的に変わる ◼ 問題を即時検出し「すぐ直せる」ことが目標 ◼ インフラ全体をすぐに設定変更できる→ データセンターインフラのSoftware-Defined化 ◼ デリバリーコスト・時間を短縮する → サービスをコンテナ化し、自動配備を実現 ◼ 即座に問題を見つけ出しトラブルシュートできる → 全ログをリアルタイム分析 10
  10. FUJITSU Cloud Service for OSS: データセンターインフラのSoftware-Defined化 ◼データセンター内の論理区画作成をソフトウェアで実現 ◼ IP Fabricにより、サーバー/ストレージラック群のL2/L3ネットワークを論理分割

    ◼ 論理分割されたネットワークにサーバー/ストレージを自動でプロビジョニング Copyright 2019 FUJITSU LIMITED … … Pod#0 (C-Plane) Pod#1 (Compute) Pod#2 (Compute) Pod#31 (Object) Scalable and Flexible 11
  11. FUJITSU Cloud Service for OSS: サービスのコンテナ化と自動配備 ◼ クラウド基盤全体をDockerコンテナ化し、Ansibleで管理 ◼ 管理サービス群をOpenStack+Dockerで構築、Ansibleで運用保守を統一

    ◼ 年間250回を超えるOpenStackのアップデートを実現! Copyright 2019 FUJITSU LIMITED … … Pod#0 (C-Plane) Pod#1 (Compute) Pod#2 (Compute) Pod#31 (Object) Scalable and Flexible 管理サービス用OpenStack お客様提供OpenStack 管理サービス コンテナ 管理サービス コンテナ お客様システム DB AP Web お客様システム KVS AP LB AP AP … 12
  12. FUJITSU Cloud Service for OSS: サービスのコンテナ化と自動配備: Kollaの採用 Copyright 2019 FUJITSU

    LIMITED ◼FUJITSU Cloud for OSSは、OpenStackの配備にKollaを採用 ◼ Kollaとは Docker と Ansible によりOpenStackを配備するツール ◼Kollaをカスタマイズし、RHOSPの柔軟な配備を実現 ◼ RHOSPの標準配備範囲を超えるコントローラー配備や大規模クラスタ化を実現 ◼ 配備やコンテナ更新だけでなく、設定変更やローリングアップデートなどにも適用 13
  13. FUJITSU Cloud Service for OSS: Kolla – Kolla と Kolla-Ansible

    ◼ Kolla ➔ OpenStack用 Dockerfile(詳細にカスタマイズ可能) が集まったもの ◼ Kolla-Ansible ➔ OpenStack用 Ansible Playbook/Role が集まったもの ◼ Kollaがつくったコンテナイメージ を Kolla-Ansibleで配備・設定する Copyright 2019 FUJITSU LIMITED Kolla Kolla-Ansible 14
  14. FUJITSU Cloud Service for OSS: Kolla/Kolla-AnsibleによるOpenStack構築 Copyright 2019 FUJITSU LIMITED

    配備対象ホスト Dockerコンテナ App Conf Log Conf dir Log dir bind mount Jenkins Docker Ansible Ansible Docker Registry Image Image Image イメージ作成 OpenStack 設定ファイル更新 Image Pull/Run指示 ※Jenkins等のCI/CD支援ツールと 組み合わせて使う 15
  15. FUJITSU Cloud Service for OSS: Kolla/Kolla-AnsibleによるOpenStack構築 Copyright 2019 FUJITSU LIMITED

    Jenkins Docker Ansible Ansible Docker Registry Image Image Image イメージ作成 OpenStack設定 Docker操作指示 イメージPull 16
  16. FUJITSU Cloud Service for OSS: Kolla/Kolla-Ansibleによるデリバリ ◼ 開発環境で試験済みのKollaを商用環境と同期しデプロイ ◼ Kolla-ansible,

    vars files, Jenkins jobをGithubで同期 ◼ Docker image はVPN経由で Docker push Copyright 2019 FUJITSU LIMITED Jenkins Docker Ansible Ansible Docker Registry Image Image Image Jenkins Docker Ansible Ansible Docker Registry Image Image Image 商用環境 開発環境 … 17
  17. FUJITSU Cloud Service for OSS: 全ログのリアルタイム分析: 基盤ログの集約と解析 ◼ クラウド基盤を構成する100種類以上、数 100コンテナのログをElasticsearchに集約

    ◼ Elasticsearchは、Elastic社が開発している オープンソースの全文検索エンジン ◼ 1日400GBのログを常時分析し1年保存 ◼ OpenStackのモジュール間の複雑な 呼び出しをリアルタイムでインデックス化 ◼ 数10のモジュールが処理毎に異なる呼び出し、 1API呼び出しで数100行のログ Copyright 2019 FUJITSU LIMITED Identity API Queue Data base Conductor OpenStack log log log log log log Elasticsearch Request-id User-id Instance-id Scheduler Compute Users 18
  18. FUJITSU Cloud Service for OSS: 全ログのリアルタイム分析: ログのインデックス化例 Copyright 2019 FUJITSU

    LIMITED ◼ OpenStackログの一例 2018-07-31 10:13:20.066 36 INFO nova.osapi_compute.wsgi.server [req- 34378379-fad7-4b54-acf5-16d53dd0e1a8 983461ab3c3a447bbd55d8c8a9fbeff0 43906b4ccf124514b26d8a551419ac9f – 31ac69683b234ddb80f753a2a1a0450a 31ac69683b234ddb80f753a2a1a0450a] 10.101.4.138,10.101.4.49 "POST /v2.1/43906b4ccf124514b26d8a551419ac9f/os-keypairs HTTP/1.1" status: 200 len: 2597 time: 0.3791530 Loglevel Domain ID Request URI データ構造化 19
  19. FUJITSU Cloud Service for OSS: 全ログのリアルタイム分析: ダッシュボード例 Copyright 2019 FUJITSU

    LIMITED ◼ API単位、利用者単位、ホスト単位での挙動をリアルタイムで可視化 インシデントに対して、数分で何が起きたかを特定 20
  20. 背景&アウトライン 1. Tempestで FJCS for OSS をテストする ◼ FJCS for

    OSSでのTempest利用と課題 → Tempest自体をdebug可に ◼ OpenStack RBACへのTempestの対応 → Patroleの活用 2. Rallyで FJCS for OSS の性能をテストする ◼ ユーザ数が増加した場合のAPIの応答性能を測定する ◼ Compute1000台~規模の環境を構築して性能をテストする Copyright 2019 FUJITSU LIMITED 23 ◼OpenStackをパブリッククラウドとして提供する! ◼どういう使われ方をするのか、どれくらい使われるのか分からない
  21. 1. Tempestで FJCS for OSS をテストする ① 課題① テスト結果のデバッグに非常に時間がかかる ②

    課題② テスト結果の管理 ③ 課題③ 独自RBACへのtempest対応 Copyright 2019 FUJITSU LIMITED 24
  22. FJCS for OSSでのTempest利用 ◼ OpenStack主要機能以外のテストコードはプラグインとして追加 ◼ 全43種のtempest pluginが存在 ◼ 実際に追加したプラグイン

    • heat-tempest-plugin, neutron-tempest-plugin, octavia-tempest-plugin, neutron-lbaas-tempest-plugin, cinder-tempest-plugin, keystone-tempest- plugin, barbican-tempest-plugin Copyright 2019 FUJITSU LIMITED APIテスト総数: 2,678 1回のテストの実行時間: 約50分 (並列数: 10) 1回のテストで発行するAPIリクエスト: 約28,000リクエスト 26
  23. 課題① Tempest自体のデバッグに時間がかかる ◼問題個所の切り分けが大変 ① Tempest設定の問題 ② Tempestコードの問題 ③ OpenStack設定の問題 ④

    OpenStackコードの問題 Copyright 2019 FUJITSU LIMITED OpenStack Tempest API requests response Config Config ① ② ④ ③ 7割 3割 27
  24. tempestの設定項目が多い ◼ 100以上の設定項目を埋めなければならない Copyright 2019 FUJITSU LIMITED … [compute-feature-enabled] live_migration

    = True resize = True vnc_console = True attach_encrypted_volume = False block_migration_for_live_migration = False snapshot = True scheduler_available_filters = ComputeFilter,AvailabilityZoneFilter,PciPassthroughFilter,AggregateIns tanceExtraSpecsFilter,RamFilter,DiskFilter,ComputeCapabilitiesFilter,I magePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinity Filter volume_backed_live_migration = True … tempest.conf 28
  25. tempestコード自体に問題ある場合もある ◼ 特に、Heatのテストはバグが多い ◼ メンテされていないので、tempest からは除外された。。 ◼ 特定の設定がtempestで考慮されていない ◼ 例えば、Ironicとの混在環境、Neutron

    LBaaS proxyなど Copyright 2019 FUJITSU LIMITED … ・ The Heat API tests have been removed from tempest, they were unmaintained. The future direction of api test for heat is their in-tree Gabbi tests … https://docs.openstack.org/releasenotes/tempest/v16.1.0.html 29
  26. なぜテストが失敗したのかが分かりにくい ◼ 失敗したテスト結果にはTracebackのみが出力される。 Copyright 2019 FUJITSU LIMITED "Traceback (most recent

    call last): File ""/usr/share/rally/.rally/verification/verifier- 133eb54b-bf50-438e-a253-523f0e5395aa/extensions/neutron- lbaas/neutron_lbaas/tests/tempest/v2/api/test_health_monitor_admin.py"", line 98, in test_create_health_monitor_for_another_tenant_id_field self.assertEqual(hm.get('tenant_id'), tenantid) File ""/usr/share/rally/.rally/verification/verifier-133eb54b-bf50-438e-a253- 523f0e5395aa/.venv/lib/python2.7/site-packages/testtools/testcase.py"", line 411, in assertEqual self.assertThat(observed, matcher, message) File ""/usr/share/rally/.rally/verification/verifier-133eb54b-bf50-438e-a253- 523f0e5395aa/.venv/lib/python2.7/site-packages/testtools/testcase.py"", line 498, in assertThat raise mismatch_errortesttools.matchers._impl.MismatchError: !=:reference = u'39f98f6a49f34ebfbef887130c2fc89a'actual = '6bcea418-ac41-4e53-bded-a30680080b5a'" どのAPIの実行で失敗したのか?API実行時のパラメータは何か? 30
  27. 2019-08-27 02:17:29.160 171 INFO tempest.lib.common.rest_client [req-97d8a2ca-980b-4c43-a938-d99dceeaeb0e ] Request (AgentsAdminTestJSON:test_list_agents): 200

    GET https://openstack.test.local:8774/v2.1/e2499c5c7de74fc89aa50d3d3e606d17/os- agents 0.026s Tempestログの構造化 Copyright 2019 FUJITSU LIMITED ◼ Tempestログの一例 テスト名 データ構造化 リクエストID 32
  28. 課題② テスト結果の管理 ◼ tempestのテスト結果は標準出力に出力されるのみ! Copyright 2019 FUJITSU LIMITED … {5}

    tempest.api.compute.admin.test_flavors_access_negative.FlavorsAccessNegativeTestJSON.test_add_flavor_access_duplicate [0.724767s] ... ok {5} tempest.api.compute.admin.test_flavors_access_negative.FlavorsAccessNegativeTestJSON.test_flavor_access_list_with_public_flavor [0.215968s] ... ok {3} tempest.api.compute.admin.test_aggregates_negative.AggregatesAdminNegativeTestJSON.test_aggregate_add_host_as_user [0.338389s] ... ok {1} tempest.api.compute.admin.test_aggregates.AggregatesAdminTestJSON.test_aggregate_add_host_get_details [0.690649s] ... ok {3} tempest.api.compute.admin.test_aggregates_negative.AggregatesAdminNegativeTestJSON.test_aggregate_add_non_exist_host [0.186233s] ... ok {3} tempest.api.compute.admin.test_aggregates_negative.AggregatesAdminNegativeTestJSON.test_aggregate_create_aggregate_name_length_exceeds_25 5 [0.033513s] ... ok {3} tempest.api.compute.admin.test_aggregates_negative.AggregatesAdminNegativeTestJSON.test_aggregate_create_aggregate_name_length_less_than_ 1 [0.025815s] ... ok … テスト結果を管理(保管、集計、比較)できない! 34
  29. FJCS for OSSのPre-set role機能 ◼ FJCS for OSS では、事前定義したロールをユーザに提供し、RBACを実現 Copyright

    2019 FUJITSU LIMITED https://doc.cloud.global.fujitsu.com/lib/iaas/jp/api-presetrole/v3/api-presetrole/index.html?jp-east-3 37
  30. OpenStack RBAC と Tempest Patrole plugin ◼ OpenStack RBAC(Role-Based Access

    Control)とは ◼ Keystone の Role 機能を使って、UserのAPIアクセス権を制御する機能。 ◼ OpenStackでは、APIに対応するaction名と許可するRoleを policy.yamlに記述する • APIとactionは1対1対応ではなく、ドキュメントが不十分 • 1 APIから複数APIを呼ぶ(例: novaのinstance作成など)ので、それらの整合も必要 ◼ Tempest Patrole plugin ◼ https://docs.openstack.org/patrole/latest/index.html • 通常のTempestはカスタムRoleには未対応だが、Patroleを使えばAPIがPolicy.yamlに則った 動きをしているかをチェックできる。 OpenStackはPolicyのカスタマイズには不十分だが、 for OSSではカスタマイズしまくり、Tempestで試験できるようにしてみた。 Copyright 2019 FUJITSU LIMITED 38
  31. Patroleを使ったRBACのテスト ◼ Patrole を使えばPolicy設定のテストができる Copyright 2019 FUJITSU LIMITED OpenStack Tempest

    + Patrole API requests response policy.json OpenStackが期待通りの 応答をするかをチェック 41
  32. Patroleを使ったRBACのテスト ◼ Patroleによるテストの仕組み ◼ Actual = Expected なら Success ◼

    Actual ≠ Expected なら Fail Copyright 2019 FUJITSU LIMITED … [Rules]: os_compute_api:os-pause-server:pause, [Expected]: Allowed, [Actual]: Allowed [Rules]: os_compute_api:servers:reboot, [Expected]: Allowed, [Actual]: Allowed [Rules]: os_compute_api:os-server-tags:show, [Expected]: Allowed, [Actual]: Allowed [Rules]: os_compute_api:os-server-tags:delete_all, [Expected]: Allowed, [Actual]: Allowed [Rules]: os_compute_api:os-hypervisors, [Expected]: Denied, [Actual]: Denied … patrole.log 42
  33. Patroleを使ったRBACテストの問題点 ◼ policyファイルを入力にすること ◼ 網羅性(Octavia, Barbican, Heatなどがない) Copyright 2019 FUJITSU

    LIMITED FJCS for OSS Tempest + Patrole API requests response policy.json policyの書き方が 間違っていると どうしようもない! すべてのAPIを テストできない 43
  34. OpenStack APIの性能測定結果例 ◼ RallyベンチマークによるKeystone(認証機能)の性能確認 Copyright 2019 FUJITSU LIMITED 0 0.2

    0.4 0.6 0.8 1 1.2 1.4 0 50 100 150 200 250 300 Response time(sec) Concurrency(ユーザ数) Keystone Authetication Average 95th 99th 47
  35. Containers Containers Compute 1000台~規模の環境を構築する ◼ Fake Compute Driver + Kolla-ansibleでComputeを大量起動

    Copyright 2019 FUJITSU LIMITED https://docs.openstack.org/kolla-ansible/latest/reference/compute/nova-fake-driver.html Controller Compute nova-compute Container nova-compute Container nova-compute Container nova-compute Container nova-compute Container nova-compute Container Containers ・・・ ・・・ ・・・ 48
  36. Fake Compute Driverの動作概要 ◼ Computeは実際には何も動作しないが、動作しているかのように振る舞う Copyright 2019 FUJITSU LIMITED Boot

    request Client ・ Authentication ・ Scheduling ・ Commitment Boot a VM Update VM status to running VM boot request Boot response Controller Compute Status check 49
  37. Fake Compute+Rally による性能測定 ◼Fake computeを利用し、仮想的に1000台~規模環境を構築 Copyright 2019 FUJITSU LIMITED Concurrency

    Average complete time (sec) 95th percentile of complete time (sec) 99th percentile of complete time (sec) Success rate 10 14.994 19.308 34.733 1 (N=100) 30 86.952 230.569 302.513 0.943 (N=300) 40 not complete not complete not complete 0 (N=400) 50 Scheduler multiple workers support https://review.opendev.org/#/c/159382/
  38. まとめ 1. Tempestで FJCS for OSS をテストする 1. tempest自体にバグや設定ミスがある場合が非常に多い 2.

    デバッグしやすくする仕組みが必須 3. RBACのテストは非常に手間になる 2. Rallyで FJCS for OSS の性能をテストする 1. Controllerの性能を計測して定量的に評価できる(RabbitMQ, Galera等) 2. Fake computeを使えば仮想的に大規模環境での性能をテストできる Copyright 2019 FUJITSU LIMITED 51