Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

AppFormix勉強会資料

AppFormixはリアルタイム監視と機械学習による予測分析機能を備えた、“インテントベース”のクラウド運用管理/パフォーマンス最適化ソフトウェアです。Openstack運用管理とクラウドオートメーションをAppFormixで実現できるのか、をテーマにした勉強会の資料です。

  • Be the first to comment

AppFormix勉強会資料

  1. 1. 2017年5月 AppFormix勉強会 ジュニパーネットワークス株式会社
  2. 2. 2 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Legal Disclaimer 本資料に記載されている機能や構成、ロードマップ情報などは、 資料作成時点におけるジュニパーネットワークスの仕様や予定を示したもの であり、事前の通告無しに内容が変更されることがあります。 本資料は技術情報の提供を目的としたものであり、機器、機器の機能、 サービスなどに関して保証を行うものではありませんので、ご注意ください。
  3. 3. 3 Copyright © 2017 Juniper Networks, Inc. www.juniper.net 仮想化インフラ統合運用ツール Ecosystem Members / Partners: Customers: Awards: COMPANYPRODUCT 機能: • あらゆる項目からのクロスレイヤを可能とする可視化ツール (Host, Project, Instance毎の詳細な可視化が可能) • 分散処理に依るスケーラブル、リアルタイム可視化およびア ラーム • 機械学習および予知分析 • リアルステートドリブン・オートメーション&オーケストレー ションによる最適化されたパフォーマンスおよびレジリエンシ の提供 • タイム・レポート、キャパシティプランニング ユースケース: • テレコクラウド、パブリッククラウド、マネージド・プライ ベートクラウドなどのサービスインスタンスのSLAモニタリン グ AWS
  4. 4. 4 Copyright © 2017 Juniper Networks, Inc. www.juniper.net AppFormix Ops Tools For The DevOps Era Operations Analytics State-Driven Orchestration Billing and Reporting Role-Based Monitoring & Alarms Showback and ChargebackEmpower your users with Role Based GUIs and APIs Prevent Service DisruptionsStream Analysis for real-time risk analysis Physical and Software Defined Infrastructure DevOps Ready Data-Driven Capacity Planning Enhance reliability and improve your cloud ROI IT Automation
  5. 5. 5 Copyright © 2017 Juniper Networks, Inc. www.juniper.net The Best Cloud Optimization Software  100% ソフトウェア  クラウド構築 – スケーラブルなマイクロサービス  ファイヤーウォールで保護されたエリアで動作  Non Disruptive & 容易なデプロイメント  無停止で既存のクラウド基盤にインストールが可能  OpenStack & Kubernetesの制御プレーンの統合: 既存のワークフローを変えずに使用可能  ホスト上のユーザスペースプロセスとして動作: 既存のOSまたはカーネルの変更は必要なし 既存のVM、コンテナ、アプリケーションの変更は必要なし  Automation & Orchestration  ローカル・グローバルリソースのオーケストレーション “Works off the shelf with no engineering effort”
  6. 6. 6 Copyright © 2017 Juniper Networks, Inc. www.juniper.net パートナー: INTEL AppFormix + INTEL = Predictable Performance “インテルRDTとのデモンストレーションでは、驚異的なス ループット、遅延、ジッタ、コンテナフローなどの優れた 性能向上を実証しています。 “ Das Kamhout, senior principal engineer, Data Center Group, Intel 0 1 1 2S Intel®Xeon®processor E5-2699 v4 (No CAT) 2S Intel®Xeon®processor E5-2699 v4 (with CAT) Increased performance of webserver by protecting it from a “noisy neighbor” on the platform – Containers on the 2S Intel®Xeon®processor E5-2699 v4 Cloud / Datacenter Orchestration Up to 27% Higher Throughput Cache Allocation Technology (CAT) can prioritize important VMs – e.g., web server Workload: NGINX based webserver on Intel Xeon E5 v4 Normalizedperformance 0 5 10 15 20 25 30 35 1 2S Intel®Xeon®processor E5-2699 v4 (No CAT) 2S Intel®Xeon®processor E5-2699 v4 (with CAT) Improved average NGINX* Web Server Response Time in a noisy-neighbor environment – with containers on the 2S Intel®Xeon®processor E5-2699 v4 Up to 51% Better Average Response Time Cache Allocation Technology (CAT) can Improve Web Server Response Times Workload: NGINX based webserver, 100KB Request Size Avg.ResponseTime(ms) Improved Webserver Response Time • レスポンスタイム平均51%の向上 • ピーク時の遅延時間が120%低下 • VNFのジッタが70%減少 AppFormix Orchestration for Virtualized Network Functions (VNFs)
  7. 7. 7 Copyright © 2017 Juniper Networks, Inc. www.juniper.net AppFormix アーキテクチャ Agentは “コンピュートノード”上で動作するローレベルなコンポーネントであり、コンピュート ノード上のアプリケーションが処理するワークロードを提供します。 コンピュートノードはベアメタルまたは仮想マシンの両方をサポートします。
  8. 8. 8 Copyright © 2017 Juniper Networks, Inc. www.juniper.net クラウド基盤の管理 管理の容易さ • シングルペインでOpenstack基盤、Computeノー ド、プロジェクト、インスタンス単位の状態確認 が可能 • Risk、BadなどAlarmの閾値を設定でき状態に応 じて自動的にインスタンスのライブマイグレー ションを指定可能 • Computeノードの状態だけでなく、インスタンス の状態監視が可能 – CPU、メモリ使用率 – Disk IO Read/Write、レスポンスタイム – トラフィック量 – インスタンスのキープアライブ • 動的な閾値の設定 – 例えば月曜日-金曜日の9AM – 10 PMの間は ComputeノードのCPU使用率が70%でも特に問 題ないが、土曜日の9PM – 11PMはCPUの使用率 が高騰する状態がある。AppFormixはこのよう な状態変化を自動学習して、動的にAlarmを作成 する
  9. 9. 9 Copyright © 2017 Juniper Networks, Inc. www.juniper.net f
  10. 10. 10 Copyright © 2017 Juniper Networks, Inc. www.juniper.net リソース管理 過去から現在使用しているFlavorの仕様状態をグラフ化し傾向を確認。また、既存リソースからFlavor単位であと各Flavorが 何個作成できるかを自動計算。Compute nodeの増設を計画的に行えます。 クラウド基盤のリソース管理
  11. 11. 11 Copyright © 2017 Juniper Networks, Inc. www.juniper.net 課金管理 テナント単位で課金情報やインスタンスの使用量が出力できます。課金データはFlavor,Network,Storage,データ転送量など を組み合わせて設定が可能です。 クラウド基盤の課金管理
  12. 12. 12 Copyright © 2017 Juniper Networks, Inc. www.juniper.net 仮想マシンの動作 オペレータが手動で仮想マシンのスタート/ストップ/Live Migrationなども可能です。 仮想マシンの管理
  13. 13. 13 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Host AppFormix Multi-site Monitoring Agent Host Agent Site 1 Central Control Plane AppFormix Platform AppFormix Platform Host Agent Host Agent Site 2 AppFormix Platform Events sent to global visualization layer.
  14. 14. 14 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Host AppFormix Multi-site Monitoring Agent Host Agent Site 1 Central Control Plane AppFormix Platform AppFormix Platform Host Agent Host Agent Site 2 AppFormix Platform Events sent to global visualization layer.
  15. 15. 15 Copyright © 2017 Juniper Networks, Inc. www.juniper.net 物理ネットワークのトータル管理 物理ネットワーク機器の情報をAppFormixの管理画面に統合。仮想基盤を物理から仮想までトータルで管理できます。 物理ネットワークの管理
  16. 16. 16 Copyright © 2017 Juniper Networks, Inc. www.juniper.net アラームは静的なアラームだけでなく、動的(機会学習した閾値)でのアラームも作成できます。 アラームは対応したサービスとの連携が可能となっており、オートヒーリングやオートスケーリングなどのサービスと組み合 わせることにより、クラウドに様々な自動化されたサービスを提供できます。 アラーム管理
  17. 17. 17 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Dynamicアラーム
  18. 18. 18 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Dynamicアラーム ダイナミックアラームはある期間(1日とか1週間とか)のデータ の動きを学習して、動的な閾値を作成します。 例えば、ある1日のCPUの使われ方が左図の場合、この状態から1 時間単位でベースラインを算出します。 算出した結果、翌日のCPUの使われ方が異なる場合、アラームを挙 げることができます。 ここで アラーム
  19. 19. 外部連携
  20. 20. Host AppFormix Architecture Agent VM Container AppFormix Platform Central policy management REST API Notifications Push notifications to external systems AppFormix Dashboard
  21. 21. 21 Copyright © 2017 Juniper Networks, Inc. www.juniper.net AppFomix Alarm JSON { "apiVersion": "v1", "kind": "Alarm", "spec": { "aggregationFunction": "average", "comparisonFunction": "above", "eventRuleId": "d829aa80-1831-11e7-b05e-0242ac130002", "intervalCount": 1, "intervalDuration": 5, "intervalsWithException": 1, "metricType": "cpu.usage", "mode": "event", "module": "alarms", "name": "Event_Live_migration", "severity": "warning", "threshold": 80 }, 次ページへ続く
  22. 22. 22 Copyright © 2017 Juniper Networks, Inc. www.juniper.net AppFomix Alarm JSON "status": { "description": "Host system014: average cpu.usage above 80 {uSample_Value: 88.43}", "entityDetails": {}, "entityId": "system014", "entityType": "host", "metaData": { "Sample_Value": 88.43 }, "state": "triggered", "timestamp": 1491207781000 } }
  23. 23. 23 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Flask "status": { "description": "Host system014: average cpu.usage above 80 {uSample_Value: 88.43}", "entityDetails": {}, "entityId": "system014", "entityType": "host", "metaData": { "Sample_Value": 88.43 }, "state": "triggered", "timestamp": 1491207781000 } }
  24. 24. 24 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Flask Flaskとは? PythonベースのWeb App Framework “ http://flask.pocoo.org/ “ HTTP のSocketをたてて、外部からデータをPOSTすることが可能! from flask import Flask app = Flask(__name__) if __name__ == '__main__': FLASK_PORT = 8000 app.run( host="0.0.0.0", port=int(FLASK_PORT) ) Socket立てて待つだけ ならこれだけ! python sample_socket.py * Running on http://0.0.0.0:8090/ (Press CTRL+C to quit) 実行結果
  25. 25. 25 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Flask Postメッセージを受信する from flask import Flask, request import json app = Flask(__name__) @app.route('/', methods=['POST']) def app_message_post(): data = request.json msg= json.dumps(data) print(msg) if __name__ == '__main__': FLASK_PORT = 8000 app.run( host="0.0.0.0", port=int(FLASK_PORT) ) {"status": {"description": "Posting test json to validate notification endpoint", "timestamp": 1493202880000, "entityType": "", "state": "", "entityDetails": {}, "entityId": "", "metaData": {}}, "kind": "Alarm", "spec": {"aggregationFunction": "", "intervalDuration": "", "name": "test_data", "module": "", "severity": "info", "intervalCount": "", "metricType": "", "eventRuleId": "", "comparisonFunction": "", "intervalsWithException": "", "threshold": "", "mode": ""}, "apiVersion": "v1"} AppFormixからJSONをPostすると
  26. 26. 26 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Flask Keystone/Nova clientをImport from flask import Flask, request import json from keystoneclient.auth.identity import v2 from keystoneclient import session from novaclient import client as nova_client # Openstack credentials OPENSTACK_USERNAME = os.environ.get('OS_USERNAME') OPENSTACK_PASSWORD = os.environ.get('OS_PASSWORD') OPENSTACK_PROJECT_NAME = os.environ.get('OS_PROJECT_NAME') OPENSTACK_AUTH_URL = os.environ.get('OS_AUTH_URL') args = ¥ {'AuthServerUrl': OPENSTACK_AUTH_URL, 'OpenstackPassword': OPENSTACK_PASSWORD, 'OpenstackTenant': OPENSTACK_PROJECT_NAME, 'OpenstackUsername': OPENSTACK_USERNAME} auth_url=args['AuthServerUrl'] username=args['OpenstackUsername'] password=args['OpenstackPassword'] tenant_name=args['OpenstackTenant'] NOVA_CLIENT_VERSION = '2' nova = nova_client.Client(NOVA_CLIENT_VERSION, username, password, tenant_name, auth_url) # Functions for migration def get_instances(host): instances = ¥ nova.servers.list(search_opts={'all_tenants': 1, 'host': host}) return [instance.id for instance in instances] def migrate_all_instances(host): instances = get_instances(host) for instance in instances: nova.servers.live_migrate( instance, None, False, False)
  27. 27. 27 Copyright © 2017 Juniper Networks, Inc. www.juniper.net Flask Keystone/Nova clientをImport # Initialize the Flask application app = Flask(__name__) @app.route('/', methods=['POST']) def app_message_post(): message = "No action" try: data = request.json status = data['status'] spec = data['spec'] if spec['eventRuleId'] == '1f28c2dc-2669-11e7-b224-0242ac130005': host = status['entityId'] meta = status['metaData'] migrate_all_instances(host) message = ¥ "Migrate all instances from Host {}".format(host) return json.dumps({'result': message}) except Exception as e: return(‘error’) if __name__ == '__main__': app.run( host="0.0.0.0", port=int("7070") ) サンプルコード https://github.com/nakadaisuke/appformix_study
  28. 28. Appendix
  29. 29. AppFormix Platform Host Compute Host AppFormix in single OpenStack site AppFormix Controller OpenStack Adapter Nova Neutron CinderKeystone SQL RabbitMQ vRouter KVM OS HW Plugin Agent
  30. 30. Host Extensible Architecture - Adapters Agent VM Container AppFormix Controller OpenStack Adapter Kubernetes Adapter Contrail Adapter Storage Ceph Adapter Network Import data model into AppFormix using adapters
  31. 31. Host Extensible Architecture - Plugins Agent VM Container AppFormix Controller OpenStack Adapter Kubernetes Adapter Contrail Adapter Storage Ceph Adapter Network Add Your Own Metrics Extensible using Nagios style plugins
  32. 32. AppFormix Orchestration for OpenStack SLAの定義: 複数の項目を組み合わせ、Compute nodeやInstance の状態を管理。 RiskやHealthチェックを行い、SLAに触れたCompute ノードへ新規VMの追加を抑制したり、アラームと組み 合わせてNova evacuateを発行しり自動化を行うこと が可能
  33. 33. AppFormix Orchestration for OpenStack OpenStack VM Placement AppFormix SLA aware VM Placement Performs VM placement based on user-defined SLA policy Filters based on: • User-Defined policy that incorporates running-state of the host • Improves reliability by filtering out hosts that are at risk of failure • CPU, memory available You are not required to write any code Performs VM placement based on static inventory Filters based on: • Regions, Aggregates • affinity groups • CPU Core, memory allocated May require code changes to achieve desired filter Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Filters Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Weighting Host 1 Host 3 Host 5 Host 6 Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Filters Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Weighting Host 6 Host 1 Host 3 AppFormix Filter Host 1 Host 3 Host 5 Host 6
  34. 34. AppFormix filter plugin for nova-scheduler • OpenStack nova-scheduler has a pluggable framework. • AppFormix provides a filter plugin. • AppFormix filter plugin queries policy state of hosts from the AppFormix Platform. • In case of query failure, filter plugin defaults to allowing hosts to be scheduled. Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Filters Host 1 Host 2 Host 3 Host 4 Host 5 Host 6 Weighting Host 6 Host 1 Host 3 AppFormix Filter Host 1 Host 3 Host 5 Host 6 nova-scheduler AppFormix Platform REST API call
  35. 35. AppFormix Platform Host Resilient Architecture Controller (active) Redis DataManager (active) HA proxy (active) AppFormix Platform Host Controller (passive) Redis DataManager (active) HA proxy (standby) AppFormix Platform Host Controller (passive) MongoDB Redis DataManager (active) HA proxy (standby) MongoDB MongoDB Events and data from Agent

×