輕量級自動化部署工具 Ansible
自動化部署系統將集群的所有狀態保存在幾個文件中,即使將集群完全摧毀,通過這些配置文件,可以很快恢復完全一樣的集群出來。
這就像將一座城市保存在一個水晶球里。或者鋼鐵俠的衣服折疊成一個手提箱。
比起來其他自動化集群管理和運維工具 Puppet、Chef、Slat, Ansible 顯得很簡單并且輕量級, 但是 Ansible 又不像 Fab 那樣功能單一只能做批量命令。
Ansible 比 Fab 增加了對服務器狀態的管理功能,這樣就能將運維操作狀態記錄和保存在版本庫中。Ansible 盡量少引入 DSL 這樣的學習門檻。配置文件只是常見的 YAML 格式 (playbooks)。
同樣這樣的簡單設計的劣勢是沒有依賴管理功能。但是 Ansible 對于一般的使用場景已經足夠了。
可以用來初始化基礎設施的服務器集群,用戶管理、部署和更新、卸載應用代碼,管理配置文件,維護 Web 服務器等等。并且可以用來同時管理多個不同的云服務提供商。
Ansible 的特點
輕量級
輕量級的好處是學習門檻低、問題少、安裝快、執行快。操作完全依賴 SSH 而不需要安裝 agent 。這樣的好處是不再需要維護 agent 的狀態,不用擔心 Agent 掛掉。而 SSH 是每臺服務器必備的服務。它非常適合安全補丁更新的場景。比如,100 臺服務器打 bash vulnerability 安全補丁只需要 10 分鐘。
支持多個不同的云服務
這樣你可以將服務器混合部署在自建 IDC、AWS、DigitalOcean、Linode 上。而且將調試環境放到本機的 Vagrant 的虛擬機中。
這對于測試和調試非常方便。
灰度更新
Ansible 支持對集群的小部分機器批量操作,然后逐步完成整個集群的操作。這對于需要機器重啟的場景就非常實用。
現有自動化系統的補充
Ansible 可以補充現有 Salt 和 puppet 系統的不足。比如重啟那些運行在每個服務器上的 Agent 。
Ansible 中的概念
任務 Task
多個 Task 順序執行,在每個 Task 執行結束可以通知 Hanlder 觸發新操作。
變量 Variable
用戶定義的變量。
環境 Facts
Facts 從每臺服務器上收集得到,可以用作變量。
模塊
比如 shell、ping、apt 等等
操作 Hanlder
Ansible 快速入門
安裝
sudo pip install ansible
增加服務器資源
修改 /etc/ansible/hosts 添加
[web] 192.168.1.2 192.168.1.3 192.168.1.4
PS: 一般將 hosts 文件放到當前文件夾, 需要在命令中指定 hosts 文件位置
ansible -u root web -m ping -i ./hosts
執行下 Helloworld:
ansible all -m ping -u root
這樣的入門教程已經完成了。
Ansible 的手動執行命令版本:
ansible all -m ping -u root
看其他幾個常用的操作,體會一下,通過看命令你就會知道所做的操作,非常簡單:
ansible -u root web -m copy -a "src=/etc/hosts dest=/tmp/hosts" ansible -u root web -m yum -a "name=abcd state=present" ansible -u root web -m yum -a "name=abcd state=absent" ansible -u root web -m user -a "name=foo password=" ansible -u root web -m user -a "name=foo state=absent ansible -u root web -m git -a "repo=git://blog.eood.cn/repo.git dest=/srv/myapp version=HEAD" ansible -u root web -m service -a "name=nginx state=started" ansible -u root web -m service -a "name=nginx state=restarted" ansible -u root web -m service -a "name=nginx state=stopped"
Ansible 的配置文件版本: Playbook
一個最簡單的 Playbook:
--- - hosts: blog.eood.cn tasks: - name: Installs nginx web server apt: pkg=nginx state=installed update_cache=true notify: - start nginx handlers: - name: start nginx service: name=nginx state=started
保存成 nginx.yml
執行 Playbook:
ansible-playbook nginx.yml
通過添加命令行變量可以 override nginx 中的變量。
最后
Ansible 結合 Docker、Mesos、Puppet、Vagrant、Git 等系統可以構建出非常好的自動化運維平臺。Ansible 比起其他自動化運維工具更適合對 Docker 實例進行維護和管理。如果你的機器實例數量超過 1000,也可以選擇Ansible 的 Web 控制工具 Ansible Tower 。
來自:http://blog.eood.cn/the-ansible