使用 ansible 能夠進行批量配置,批量安裝軟件,省了一大部分繁瑣的重複工做,提升了管理服務器的效率。html
本章介紹如何使用 ansible
的安裝以及關於 ansible 的基本功能。建議擁有云服務器的同窗均可以學習一下 ansible
python
我如今有兩個雲服務器用來瞎折騰,裝的都是 centos 系統。而我在兩個服務器上都會裝上 tmux
,用做多窗口管理。git
但在有了服務器的早期有可能各類亂折騰,又須要屢次重裝系統,而每次重裝系統,又須要重裝一遍 tmux
。github
這就會形成一件重複度極高的事情: 安裝 tmux
。redis
若是在 centos 中安裝 tmux
可以直接使用 yum install tmux
也就罷了,可是安裝 tmux 也是一件極爲瑣碎的事情。docker
根據我在本系列文章 窗口複用與 tmux 中提到一個 tmux
的安裝步驟shell
並且,在多個服務器和屢次重裝過程當中,有可能重複以上安裝步驟 N 次。windows
因而自動化運維存在的意義就體現了出來,它能夠直接使用一條命令便完成全部服務器的安裝過程後端
ansible 是使用 python 寫的一個作自動化運維的工具。在使用 ansible 以前須要明白如下兩個概念centos
ansible 工做在 ssh 協議上,它只須要知足兩個條件
在 mac 上,直接經過 brew install ansible
就能夠完成安裝。
若是不是 mac,能夠參考 官方安裝指南
不過本地環境大多都是 mac
或者 windows
經過配置 ~/.ssh/config
與 ssh key
能夠達到直連免密的效果,具體參考本系列的第一篇文章 雲服務器初始登陸配置
~/.ssh/config
文件以下
Host shanyue
HostName 172.17.68.39
User root
Host shuifeng
HostName 172.17.68.40
User root
複製代碼
經過配置 ~/.ssh/config
後,咱們爲遠程服務器起了別名。此時能夠經過 inventory
進行分組管理。
ansible
默認的 inventory
配置文件爲 /etc/ansible/hosts
。
[prod]
shanyue
shuifeng
[dev]
proxy
jumper ansible_port=5555 ansible_host=192.0.2.50
複製代碼
配置釋義以下
all
下prod
下,而 proxy 與 jumper 在分則 dev
下inventory
中一樣能夠設置 hostname
, port
與別名,可是建議在 ssh-config 中進行設置ad-hoc
命令指去特定一組服務器上執行一個命令。而一個命令實際上指的是 module
,而最經常使用的 module
是 ping
,用以查看服務器是否正常連通
全部的module能夠參考 ansible modules
# 查看全部服務器是否可以正常連通
$ ansible all -m ping
shuifeng | SUCCESS => {
"changed": false,
"ping": "pong"
}
shanyue | SUCCESS => {
"changed": false,
"ping": "pong"
}
複製代碼
ansible ad-hoc
執行的命令過於簡單,通常用於服務器的測試工做以及一些簡單的小操做。而一些複雜的事情,如上述所說的 tmux
的安裝則須要一系列腳原本完成。
ad-hoc
是指定服務器執行指定命令, 而 playbook
是指定服務器執行一系列命令。
- hosts: prod
roles:
- tmux
複製代碼
role 指定了一系列命令,或者稱作 tasks
。每一個 task
均可以看作一個 ad-hoc
,由 ansible module 組成
可是在 task
執行的過程當中,必定會有一些變量,配置文件的設置,這就是 role 的其它組成部分。如 defaults
,vars
,files
和 templates
。role
的文件結構組織以下
site.yml
roles/
tmux/
tasks/
handlers/
files/
templates/
vars/
defaults/
meta/
複製代碼
好比一個 tmux 的 role 作了如下 tasks
配置文件參考個人 ansible 配置: shfshanyue/ansible-op
- name: prepare
yum:
name: "{{item}}"
with_items:
- gcc
- automake
- libevent-devel
- ncurses-devel
- glibc-static
- name: install tmux
git:
repo: https://github.com/tmux/tmux.git
dest: ~/Documents/tmux
version: 2.8
- name: make tmux
shell: sh autogen.sh && ./configure && make
args:
chdir: ~/Documents/tmux/
- name: copy tmux
copy:
src: ~/Documents/tmux/tmux
dest: /usr/bin/tmux
remote_src: yes
mode: 0755
- name: clone config file
when: USE_ME
git:
repo: https://github.com/shfshanyue/tmux-config.git
dest: ~/Documents/tmux-config
- name: clone config file (from .tmux)
git:
repo: https://github.com/gpakosz/.tmux.git
dest: ~/Documents/tmux-config
when: not USE_ME
- name: copy config file (from .tmux)
copy:
src: ~/Documents/tmux-config/.tmux.conf.local
dest: ~/.tmux.conf.local
remote_src: yes
when: not USE_ME
- name: copy config file
copy:
src: ~/Documents/tmux-config/.tmux.conf
dest: ~/.tmux.conf
remote_src: yes
- name: delete tmux-config
file:
name: ~/Documents/tmux-config
state: absent
複製代碼
即 role
的倉庫。
有一些高頻的可複用的服務組件的部署,如 docker
,redis
之類,能夠在 ansible-galaxy 找到,而免了本身寫 role
的麻煩。
$ ansible-galaxy install davidwittman.redis
複製代碼
ansible
以批量配置以及軟件管理見長,若是你有一臺本身的服務器的話,很是建議學習 ansible
。
歡迎關注公衆號山月行,我會按期分享一些先後端以及運維的文章,而且會有技術與生活上的每日回顧與總結,歡迎關注交流