使用 ansible 作自動化運維

使用 ansible 能夠進行批量配置,批量安裝軟件,省了一大部分繁瑣的重複工做,提升了管理服務器的效率。html

本章介紹如何使用 ansible 的安裝以及關於 ansible 的基本功能。建議擁有云服務器的同窗均可以學習一下 ansiblepython

自動化運維的必要性

我如今有兩個雲服務器用來瞎折騰,裝的都是 centos 系統。而我在兩個服務器上都會裝上 tmux,用做多窗口管理。git

但在有了服務器的早期有可能各類亂折騰,又須要屢次重裝系統,而每次重裝系統,又須要重裝一遍 tmuxgithub

這就會形成一件重複度極高的事情: 安裝 tmuxredis

若是在 centos 中安裝 tmux 可以直接使用 yum install tmux 也就罷了,可是安裝 tmux 也是一件極爲瑣碎的事情。docker

根據我在本系列文章 窗口複用與 tmux 中提到一個 tmux 的安裝步驟shell

  1. 安裝依賴 package
  2. 在 github 下載源代碼,編譯安裝
  3. 在 github 下載配置文件

並且,在多個服務器和屢次重裝過程當中,有可能重複以上安裝步驟 N 次。windows

因而自動化運維存在的意義就體現了出來,它能夠直接使用一條命令便完成全部服務器的安裝過程後端

ansible 安裝及配置

ansible 是使用 python 寫的一個作自動化運維的工具。在使用 ansible 以前須要明白如下兩個概念centos

  • 本地環境: 即你的 PC,mac 或者是跳板機,在本地環境須要安裝 ansible
  • 遠程服務器: 在遠程服務器會部署本身的服務,跑應用,也是須要被管理的服務器。在遠程服務器中不須要裝任何應用

ansible 工做在 ssh 協議上,它只須要知足兩個條件

1. 在本地環境安裝 ansible

在 mac 上,直接經過 brew install ansible 就能夠完成安裝。

若是不是 mac,能夠參考 官方安裝指南

不過本地環境大多都是 mac 或者 windows

2. 在本地可以 ssh 到遠程服務器

經過配置 ~/.ssh/configssh key 能夠達到直連免密的效果,具體參考本系列的第一篇文章 雲服務器初始登陸配置

~/.ssh/config 文件以下

Host shanyue
    HostName 172.17.68.39
    User root
Host shuifeng
    HostName 172.17.68.40
    User root
複製代碼

ansible inventory

經過配置 ~/.ssh/config 後,咱們爲遠程服務器起了別名。此時能夠經過 inventory 進行分組管理。

ansible 默認的 inventory 配置文件爲 /etc/ansible/hosts

[prod]
shanyue
shuifeng

[dev]
proxy
jumper ansible_port=5555 ansible_host=192.0.2.50
複製代碼

配置釋義以下

  1. 總共有四臺服務器,shanyue,shuifeng,proxy,jumper,全部的服務器都在分組 all
  2. shanyue 與 shuifeng 在分組 prod 下,而 proxy 與 jumper 在分則 dev
  3. inventory 中一樣能夠設置 hostname, port 與別名,可是建議在 ssh-config 中進行設置

一個簡單的 ad-hoc 命令

ad-hoc 命令指去特定一組服務器上執行一個命令。而一個命令實際上指的是 module,而最經常使用的 moduleping,用以查看服務器是否正常連通

全部的module能夠參考 ansible modules

# 查看全部服務器是否可以正常連通
$ ansible all -m ping
shuifeng | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
shanyue | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
複製代碼

ansible playbook

ansible ad-hoc 執行的命令過於簡單,通常用於服務器的測試工做以及一些簡單的小操做。而一些複雜的事情,如上述所說的 tmux 的安裝則須要一系列腳原本完成。

ad-hoc 是指定服務器執行指定命令, playbook 是指定服務器執行一系列命令。

  • hosts,用以指定服務器活服務器分組。如 prod
  • role, 用以指定一系列命令的集合。如 tmux,方便複用
- hosts: prod
 roles:
 - tmux
複製代碼

role

role 指定了一系列命令,或者稱作 tasks。每一個 task 均可以看作一個 ad-hoc,由 ansible module 組成

可是在 task 執行的過程當中,必定會有一些變量,配置文件的設置,這就是 role 的其它組成部分。如 defaultsvarsfilestemplatesrole 的文件結構組織以下

site.yml
roles/
   tmux/
     tasks/
     handlers/
     files/
     templates/
     vars/
     defaults/
     meta/
複製代碼

好比一個 tmux 的 role 作了如下 tasks

  1. 安裝依賴 package
  2. 在 github 下載源代碼,編譯安裝
  3. 在 github 下載配置文件

配置文件參考個人 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
複製代碼

ansible-galaxy

role 的倉庫。

有一些高頻的可複用的服務組件的部署,如 dockerredis 之類,能夠在 ansible-galaxy 找到,而免了本身寫 role 的麻煩。

ansible-redis

$ ansible-galaxy install davidwittman.redis
複製代碼

小結

ansible 以批量配置以及軟件管理見長,若是你有一臺本身的服務器的話,很是建議學習 ansible


歡迎關注公衆號山月行,我會按期分享一些先後端以及運維的文章,而且會有技術與生活上的每日回顧與總結,歡迎關注交流

歡迎關注公衆號山月行,在這裏記錄個人技術成長,歡迎交流
相關文章
相關標籤/搜索