Ansible Night Online 2021.02.10
Ansible Towerをみんなで使うためにやったこと@hito58Ansible Night 2021.02
View Slide
自己紹介氏名: 木場 仁美(こば ひとみ, @hito58)仕事:- 通信キャリアで音声系システム開発担当- 入社5年目- 運用を楽にするためにがんばってます
今日お話しすること
今日お話しすること音声系システムの運用でAnsible Towerを使うにあたりやったこと①インベントリを共通化する②Playbookを1つのリポジトリで管理するこの2つについて紹介(本内容は所属団体とは無関係な個人の感想であり、正しいからやるべきというものではありません!)
①インベントリの共通化そもそもの利用背景:Ansible Towerをつかって運用コマンドをうちたい
①インベントリの共通化そもそもの利用背景:Ansible Towerをつかって運用コマンドをうちたいアンシブルタワーworker11worker10worker21worker20controller
①インベントリの共通化そもそもの利用背景:Ansible Towerをつかって運用コマンドをうちたい(障害対応、計画的な保守業務)アンシブルタワーPlaybook実行worker11worker10worker21worker20controller
①インベントリの共通化なぜ共通化が必要か:操作内容によってインベントリにおけるhostsの定義が違う
①インベントリの共通化なぜ共通化が必要か:操作内容によってインベントリにおけるhostsの定義が違うMWが提供する保守用コマンドはcontrollerに入ってクラスタ単位でうつview stats --cluster 1worker11worker10worker21worker20controllerhosts:で指定される単位
①インベントリの共通化---- name: 状態確認hosts: alltasks:- shell: view stats --cluster {{ cl_no }}register: result_status・・・# inventoryworker1 cl_no=1 ansible_host=192.168.0.1worker2 cl_no=2 ansible_host=192.168.0.1全部同じアドレス(controllerのアドレス)
①インベントリの共通化なぜ共通化が必要か:操作内容によってインベントリにおけるhostsの定義が違うdf -hリソース確認などLinuxコマンドはサーバ指定でうつworker11worker10worker21worker20controllerhosts:で指定される単位
①インベントリの共通化---- name: 状態確認hosts: alltasks:- shell: {{ command }}register: result_status・・・# inventorycontroller ansible_host=192.168.0.1worker10 ansible_host=192.168.0.2worker11 ansible_host=192.168.0.3worker20 ansible_host=192.168.0.4worker21 ansible_host=192.168.0.5
①インベントリの共通化これらをTowerから実行するために:①それぞれのインベントリをTowerに登録• 登録するhosts数がサーバ台数より多くなる→Towerは登録するhosts数に応じてライセンス費用決まる②インベントリを正規化して共通のインベントリとして登録• 既存Playbookを書き換えないといけない
①インベントリの共通化方針:・hostsは最小単位を採用、その他の概念はgroupsで表現(groupはいくら登録してもノーカウント!)・インベントリに合わせてplaybookを作りかえ(delegate_to節やhosts:にワイルドカード/正規表現つかうと楽!)
①インベントリの共通化書き換え例:MW提供のコマンド利用するばあい---- name: 状態確認hosts: *0tasks:- delegate_to: controllershell: {{ command }}register: result_status・・・)# inventorycontroller ansible_host=192.168.0.1worker10 ansible_host=192.168.0.2worker11 ansible_host=192.168.0.3worker20 ansible_host=192.168.0.4worker21 ansible_host=192.168.0.5[worker1]worker10Worker11[worker2]worker20worker21
今日お話しすること音声系システムの運用でAnsible Towerを使うにあたりやったほうがいいこと①インベントリを共通化する②Playbookを1つのリポジトリで管理するこの2つについて紹介
②Playbookを1つのリポジトリで管理するAnsible TowerはPlaybookをGitから呼び出して実行するPlaybookを保管するリモートリポジトリが必要アンシブルタワーサーバー①サーバー②Playbook実行PlaybooksrepositoryPlaybook読み込みGit
②Playbookを1つのリポジトリで管理する• インベントリが全Playbook共通にできたからその流れでPlaybookもまとめて1つのGitリポジトリで管理• 共通処理はRoles/カスタムモジュールにし、別のリポジトリで管理、submoduleとして紐づけるアンシブルタワーPlaybook/インベントリ読み込みPlaybooksrepositoryGitRole①repositoryRole②repositoryLib①repositorysubmodule
②Playbookを1つのリポジトリで管理するリポジトリ内構成例:[email protected]/[email protected]/library/../output_perser/library/output_perser.py../run_mw_command/library/run_mw_command.pypb_config_update/main.ymlpb_get_log/main.ymlroles/[email protected]/[email protected]/ansible.cfghosts.yml
②Playbookを1つのリポジトリで管理するリポジトリ内構成例:[email protected]/[email protected]/library/../output_perser/library/output_perser.py../run_mw_command/library/run_mw_command.pypb_config_update/main.ymlpb_get_log/main.ymlroles/[email protected]/[email protected]/ansible.cfghosts.ymlinventoryファイルも同一リポジトリ内インベントリソースとしてTowerに登録Jobテンプレートで使うPlaybookたちカスタムモジュールたち(Submodule)Roleたち(Submodule)
②Playbookを1つのリポジトリで管理するよかったこと:- このリポジトリだけプロジェクトとしてTowerに登録すればよい(Towerにプロジェクトが乱立されない)- cloneしたらTowerとほぼ同じ環境でPlaybookの実行確認ができる
まとめ• インベントリを正規化/共通化してメンテしやすくなった• リポジトリを1つにしてPlaybookを開発、試験しやすくなった• Towerを使わなかったとしても、わかりやすい構成で使えるかも
____________________________< Thank you for listening! >----------------------------¥ ^__^¥ (oo)¥_______(__) A )¥/¥||----w ||| ||