輕量級自動化部署工具 Ansible

jopen 9年前發布 | 27K 次閱讀 Ansible

自動化部署系統將集群的所有狀態保存在幾個文件中,即使將集群完全摧毀,通過這些配置文件,可以很快恢復完全一樣的集群出來。

這就像將一座城市保存在一個水晶球里。或者鋼鐵俠的衣服折疊成一個手提箱。

輕量級自動化部署工具 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 分鐘。
輕量級自動化部署工具 Ansible

支持多個不同的云服務

這樣你可以將服務器混合部署在自建 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!