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.

本気で使うStack storm

1,967 views

Published on

2017-10-11(Wed) Tech Night @ Shiodome # 5 発表資料

Published in: Software
  • Be the first to comment

本気で使うStack storm

  1. 1. 本気で使うStackStorm Ansible連携と冗長化について 2017/10/11 ソフトバンク株式会社 山根 武信
  2. 2. 1 自己紹介 山根 武信 所属:テクノロジーユニット ネットワーク統括 サービスプラットフォーム開発本部 アプリケーション&クラウド開発統括部 基盤開発企画部 コアテクノロジー開発課 ・内製S/W開発 ・統計PF開発 ・NFV開発 ・サービス系インフラ自動化開発 最近読んだ本: 趣味: 走って痩せる ちばアクアラインマラソン 2016
  3. 3. 2 最近やっていること 個別インフラから共通インフラへ 認証 Web ・・・認証 Web ・・・ 個別 個別 個別 共通インフラ
  4. 4. 3 環境 7.3.1611 2.1.1-1
  5. 5. Ansible連携 4
  6. 6. 5 StackStormの用途 ワークフローエンジンとして利用 NW機器 サーバ
  7. 7. 6 StackStormおさらい IFTTT for DevOps IF “ログファイルに特定の文字列が追加されたら” THEN “L2SWの特定portをshutdownする” THIS THAT
  8. 8. 7 StackStormおさらい(単純なAction) Sensors RuleTrigger Trigger Critera Action Call Action IFTTT定義 ファイル監視 一行追加 特定文字 列のみ L2SW に ssh し設 定変更 L2SW に ssh し設定変 更実行
  9. 9. 8 StackStormおさらい(Workflow) Sensors RuleTrigger Trigger Critera Action Call Workflow Action IFTTT定義 Action Action Action Call
  10. 10. 9 StackStorm実装 Django Apps Rules WebHook Trigger Trigger Workflow Action Call Workflow Action mistral-v2 Ansible Action Ansible Action Ansible Action Call Open Stack Call Ansible Playbook Ansible Playbook Ansible Playbook API Call
  11. 11. 10 StackStorm実装 Rule --- name: "delete_vm_rule" pack: "workflow" description: "StackStorm Delete VM webhook Rule" enabled: true trigger: type: "core.st2.webhook" parameters: url: "delete_vm" action: ref: "workflow.delete_vm_action" parameters: trace_tag: "{{ trigger.body.trace_tag }}" project: "{{ trigger.body.project }}" controller: "{{ trigger.body.controller }}" vm_name: "{{ trigger.body.vm_name }}" ■URL https://[HOST]/api/v1/webhooks/delete_vm ■Header St2-Trace-Tag: [ Trace Tag value ] X-Auth-Token: [ Token value ] Content-Type: application/json ■Body {"trace_tag": “’Trace Tag Value’", "project": “’project value’", "controller": “’controller value’", "vm_name": “’vm_name value’"} Rule定義ファイル [delete_vm_rule] Webhook REST-API REST-API URLの指定 REST-API JSONパラメータ Actionの指定
  12. 12. 11 StackStorm実装 Action --- description: delete vm enabled: true entry_point: workflows/delete_vm_action.yml name: delete_vm_action pack: workflow parameters: trace_tag: default: dummy type: string project: default: dummy type: string controller: default: dummy type: string vm_name: default: dummy type: string runner_type: mistral-v2 Action定義ファイル Workflow定義ファイルの指定 Workflow Engineの指定
  13. 13. 12 StackStorm実装 Workflow version: '2.0' name: workflow.delete_vm_action description: delete_vm workflows: main: type: direct input: - trace_tag - project - controller - vm_name tasks: delete_vm: action: ansible.playbook input: private_key: /xxxxx/id_rsa user: xxxxx inventory_file: /xxxxx/hosts playbook: /xxxxx/delete_vm.yml extra_vars: project=<% $.project %> controller=<% $.controller %> vm_name=<% $.vm_name %> on-error: - send_ng_status on-success: - send_ok_status send_ok_status: action: core.http input: url: http://xxxxx/ method: POST headers: { "Content-Type": "text/plain" } body: "<% $.trace_tag %>, 0" send_ng_status: action: core.http input: url: http://xxxxx/ method: POST headers: { "Content-Type": "text/plain" } body: "<% $.trace_tag %>, 1" Ansible Playbook Action extra_vars で Ansible にパラメータ渡し 呼び出し元に結果とTrace Tagを返す Ansible Playbookの指定 Workflow定義ファイル [delete_vm_action.yml]
  14. 14. 13 StackStorm実装 Ansible Playbook --- - name: delete vm hosts: st2 connection: local vars: project: "{{ project }}" controller: "{{ controller }}" vm_name: "{{ vm_name }}" environment: OS_IDENTITY_API_VERSION: "3" gather_facts: false roles: - { role: delete_vm, when: "vm_name != '-'" } Playbook [delete_vm.yml] StackStormから渡されたパラメータ - name: delete vm os_server: auth: auth_url: "http://{{ controller }}:5000/v3" username: "{{ auth_env.username }}" password: "{{ auth_env.password }}" project_domain_id: "{{ auth_env.project_domain_id }}" project_name: "{{ project }}" user_domain_id: "{{ auth_env.user_domain_id }}" state: "absent" timeout: "{{ vm_env.timeout }}" name: "{{ vm_name }}" Role [delete_vm]
  15. 15. 14 Ansible Packを使用する理由 リカバリの容易さ StackStorm障害時にAnsible単体でリカバリ可能 モジュールの豊富さ 設定対象に対するAnsible Moduleが豊富 デメリット 構成が複雑 課題 StackStormとAnsibleの使い分け
  16. 16. 冗長化
  17. 17. 16 Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 冗長構成概要 Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDBMongoDB RabbitMQ MariaDB RabbitMQ MariaDB データ冗長 アクセス冗長 MongoDB Replica set Client RabbitMQ Mirrored queue LB MariaDB Galera cluster LB RabbitMQ MariaDB
  18. 18. 17 Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api LBヘルスチェック Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDBMongoDB RabbitMQ MariaDB RabbitMQ MariaDB RabbitMQ MariaDB
  19. 19. 18 1.認証 Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 処理フロー Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDB RabbitMQ MariaDB MongoDB RabbitMQ MariaDB RabbitMQ MariaDB ①Client が REST APIでToken要求 ②払いだされたTokenはMongoDBに保存 1 2
  20. 20. 19 2.WebHook Trigger Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 処理フロー Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDB RabbitMQ MariaDB MongoDB RabbitMQ MariaDB RabbitMQ MariaDB ①Client が Tokenを指定してREST APIで WorkflowをTrigger ②MongoDBに保存しているTokenで認証 ③st2rulesengineへのRPCリクエストをMQ にキューイング 1 2 3
  21. 21. 20 3.Rule Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 処理フロー Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDB RabbitMQ MariaDB MongoDB RabbitMQ MariaDB RabbitMQ MariaDB ①MQよりRPCリクエストを取得 ②MongoDBよりRuleを取得 ③Rule判定 ④st2actionrunnerへのRPCリクエストをMQ にキューイング 1 3 4 2
  22. 22. 21 4.Action Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 処理フロー Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDB RabbitMQ MariaDB MongoDB RabbitMQ MariaDB RabbitMQ MariaDB ①MQよりRPCリクエストを取得 ②MongoDBよりActionを取得 ③mistral-serverへのRPCリクエストをMQに キューイング 1 3 2
  23. 23. 22 5.Workflow Host#3 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api Host#2 st2auth st2rulesengine st2actionrunner mistral-server Nginx st2api 処理フロー Host#1 st2auth st2rulesengine st2actionrunner mistral-server Nginx LB HTTPS VIP AMQP VIP MySQL VIP st2api MongoDB MongoDB RabbitMQ MariaDB MongoDB RabbitMQ MariaDB RabbitMQ MariaDB ①MQよりRPCリクエストを取得 ②MariaDBよりWorkflowを取得 ③Workflow実行 1 3 2
  24. 24. 23 冗長時の考慮事項 StackStormのMongoDB設定 Workflowでの注意点 同一WorkflowのActionでも別々のホストで実行される可能性があるので、ローカルに作 成したファイルを次のActionで使う等は動作しない場合がある (core.localで作成したファイルの再利用等) [database] host = mongodb://{{ Host#1 ip }},{{ Host#2 ip }},{{ Host#3 ip }}/?replicaSet={{ replica set name }} /etc/st2/st2.conf
  25. 25. 24 End of File

×