Ansible 使用入门

背景

由于经常有部署新服务器的需求,服务器部署过程中的配置和基础环境的安装很多都是重复性的 工作,所以使用配置管理工具将这些重复性的工作控制起来最合适不过了,之前有写过一篇用 SaltStack 做自动化运维的文章 saltstack 使用笔记,这次换用 Ansible ,顺便比较一下两种工具。

选用 Ansible 的原因

  1. 轻量级
  2. 通过 SSH 下发命令

如何开始

目录结构

.
--hosts    # 服务器地址和组,以下的是配置
├── config
│   ├── kernel
│   ├── tmux
│   └── vim
├── deploy
│   └── project1
│   └── project2
├── docker
│   └── fig_config
│       ├── common
│       ├── mongo
│       ├── mysql
│       ├── nginx
│       ├── rabbitmq
│       └── redis
├── env
├── iptables
├── nginx
└── ssh

首先配置好 hosts 文件, 格式:

; ansible hosts file user .ini format
; group
; [test]
; ip address

; service ip address
; 127.0.0.1

将上面的注释去掉,IP 地址改成服务器地址,并且在服务器上加上本地的 ssh 公钥,执行下面命令:

# 导入环境变量
export ANSIBLE_HOSTS=/hosts_file_direcory/hosts

# 测试服务器连通
ansible all -m ping
# 如果没有问题服务器应该会返回 pong

配置文件格式

连接服务器没有问题的话,就可以使用写 playbook(配置管理文件)来管理服务器了。

Ansible 的配置文件使用的 YAML 格式,例子如下:

# -------- basic env: init-env.yml -------------
# install basic env tool task
- name: install pkg
  apt: pkg= state=present update_cache=yes
  with_items:
    - gcc
    - g++
    - curl
    - tmux
    - python-dev
    - python-setuptools
    - python-pip
    - htop
    - zsh
    - software-properties-common
    - python-software-properties
    - libpq-dev
    - build-essential
    - libmysqlclient-dev
    - libevent-dev
    - git
    - wget
    - mc

# install python lib task
- name: install python pkg
  pip: name=
  with_items:
    - fabric
    - virtualenvwrapper
    - ipython
    - ipdb
    - supervisor
    - fig

# add user task
- name: add deploy user
  user: name=deploy shell=/bin/zsh append=yes

# ----- web basic env: web_env.yml -------
---
- hosts: your_web_hosts
  remote_user: root

  tasks:
    - include: init-env.yml
    - name: init web dir
      file: path=/data owner=root group=root state=directory mode=0755

运行

# 对服务器执行初始化命令
ansible-playbook init_env.yml

常用命令

# 对所用服务器 web_hosts 执行初始化命令
ansible-playbook web_env.yml

# 指定服务器
ansible-playbook web_env.yml --limit web_hosts

# 调试(Dry Run)
ansible-playbook web_env.yml --check

整理出来的开源库参考

总结

Ansible 对于我来说最大的有点就是使用 ssh 来执行命令,而 SaltStack 则需要在机器上安装客户端 其次 Ansible 由于设计的时候就考虑了监控和图形化,可视化做的不错,如果大家在考虑选择 Ansible 还是 SaltStack,个人推荐使用 Ansible