ansible簡介
一款輕量級的自動化運維軟件
為什么用ansible
- Chef
Ruby 語言編寫晌该,C/S架構(gòu)雷逆,配置需要Git依賴富拗,Recipe腳本編寫規(guī)范,需要一定編程經(jīng)驗 - Saltstack
Python編寫侣颂,C/S架構(gòu),模塊化枪孩,YAML腳本編寫規(guī)范憔晒,適合大規(guī)模集群部署 - Ansible
Python編寫,agentless(無客戶端),模塊化管理蔑舞,Playbook腳本編寫規(guī)范拒担,易于上手,適合中小規(guī)墓パ快速部署从撼,對敏捷開發(fā)十分友好
安裝
兩種方式實現(xiàn)安裝
- yum安裝(yum -y install ansible )
- git clone https://github.com/ansible/ansible.git
這里我們采用 python3.6.5 + Virtualenv + ansible2.5 安裝ansible,使用虛擬環(huán)境的好處在這里不必多說钧栖。
1. 安裝Python3.6 和 pip
2. 安裝 virtualenv
# pip install virtualenv
3. 創(chuàng)建ansible賬戶并安裝python3.6版本virtualenv實例
# useradd deploy && su - deploy
# virtualenv -p /usr/local/bin/python3 .py3-a2.5-env # 在 deploy 賬戶家目錄下創(chuàng)建了名叫 .py3-a2.5-env 的虛擬環(huán)境
4. git 源代碼安裝ansible2.5
# cd /home/deploy/.py3-a2.5-env
# git clone https://github.com/ansible/ansible.git
# cd ansible && git checkout stable-2.5
5. 加載python3.6 virtualenv 環(huán)境
# source /home/deploy/.py3-a2.5-env/bin/activate
6. 安裝ansible依賴包
# pip install paramiko PyYAML jinja2
7. 在python3.6虛擬環(huán)境下加載ansible2.5
# source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q
8. 驗證 ansible2.5
# ansible --version
playbooks 框架格式
01框架與格式.png
單看圖可能會有些懵逼低零,下面我們來詳細解釋
1. 創(chuàng)建一個 testplaybooksd 目錄
# mkdir /home/deploy/testplaybooks
2. 進入 testplaybooks 目錄
(1) 創(chuàng)建 inventory # 這個目錄就可以用來放我們需要進行管理的主機清單
# mkdir inventory
(2) 創(chuàng)建roles目錄 # 這個目錄就是用來存放具體任務(wù)的
# mkdir roles
(3) 在inventory 里面創(chuàng)建一個 testenv文件 # 這個文件里就定義了被管理主機的一些信息和變量
vim inventory/testenv
[testservers] # 定義主機可以一個或多個
test.example.com
[testservers:vars] # 定義變量,用法后面會講到
server_name=test.example.com
user=root
output=/root/test.txt
(4) 在roles下創(chuàng)建 testbox 并在 testbox 下創(chuàng)建tasks 用來存放具體任務(wù)
# mkdir roles/testbox/tasks
(5) 到 tasks 目錄下面創(chuàng)建 main.yml 文件用來編寫我們需要在被管理主機上執(zhí)行的任務(wù)
cd roles/testbox/tasks
vim mail.yml
- name: print server name and user to remote testbox
shell: "echo 'current {{user}} is logging {{server_name}}'" > {{output}}
# 在這里桐经,任務(wù)名字就是就是我們定義的name后面的內(nèi)容毁兆,而第二行就代表 我們使用ansible的shell模塊去打印這句話并追加到我們定義的文件中,
#這里的{{user}},{{server_name}},{{output}}就是我們在 testenv #中定義的變量阴挣,{{變量名}} 是固定寫法
(6) 最后我們在我們的主目錄 testplaybooks 中气堕,編寫 deploy.yml 腳本作為我們執(zhí)行任務(wù)的入口
vim deploy.yml
- hosts: "testservers" # 這里的 testservers 就是我們在 testenv 中定義的被管理主機
gather_facts: true # 參數(shù)指定了在以下任務(wù)部分執(zhí)行前,是否先執(zhí)行setup模塊獲取主機相關(guān)信息
remote_user: root # 指定被管理主機的用戶
roles:
- testbox # 指定任務(wù)
3. so,我們定義的目錄結(jié)構(gòu)用樹狀圖表示就是這樣的
.
├── deploy.yml
├── inventory
│ └── testenv
└── roles
└── testbox
│
├── tasks
│ └── main.yml
4. 接下來畔咧,執(zhí)行我們的 YML 任務(wù)
ansible-playbook -i inventory/testenv deploy.yml
5. 看到如下輸出結(jié)果,就代表執(zhí)行成功
(.py3-a.2.5-env) [deploy@centos7-05 testplaybooks]$ ansible-playbook -i inventory/testenv deploy.yml
PLAY [testservers] *************************************************************
TASK [Gathering Facts] *********************************************************
ok: [test.example.com]
TASK [testbox : print server name and user to remote testbox] ******************
changed: [test.example.com]
PLAY RECAP *********************************************************************
test.example.com : ok=1 changed=1 unreachable=0 failed=0
6. 到 test.example.com 這臺主機下驗證
cat /root/test.txt
current deploy is logging test.example.com
7. 完成