吾八哥博客

您现在的位置是:首页 > 笔记专题 > 正文

笔记专题

运维自动化工具Ansible的安装体验

吾八哥2018-06-09笔记专题26268

Ansible介绍

Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)。最关键的是Ansible基于SSH协议,无需在被控机上安装客户端代理之类的,使用起来非常之方便。网上搜了一下,Ansible的特点如下:

  1. 1.部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作。

  2. 2.默认使用SSH(Secure Shell)协议对设备进行管理,无需安装客户端。

  3. 3.去中心化,主从集中化管理。

  4. 4.配置简单、功能强大、扩展性强。

  5. 5.支持API及自定义模块,可通过Python轻松扩展。

  6. 6.过Playbooks来定制强大的配置、状态管理。

  7. 7.对云计算平台、大数据都有很好的支持。

  8. 8.提供一个功能强大、操作性强的 Web 管理界面和 REST API 接口 ---- AWX 平台。

  9. 9.幂等性:一种操作重复多次结果相同

Ansible中文权威指南:http://www.ansible.com.cn/

Ansible主控端配置

安装Ansible

环境要求

机器上安装了 Python 2.6 或 Python 2.7 (windows系统不可以做控制主机),都可以运行Ansible.

安装方法

apt-get安装:apt-get install ansible

其他安装方式:http://www.ansible.com.cn/docs/intro_installation.html#installing-the-control-machine

Ansible配置

秘钥认证

>ssh-keygen  #生成秘钥
>ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@10.211.55.7  #将公钥写入被管理的机器

添加被控机

>vi /etc/ansible/hosts

  支持主机分组,如:

[client]
10.211.55.6
10.211.55.7

支持添加多个分组,支持定义别名,主机名支持正则表达式等,这里就不详细列举了。

发送控制指令测试

例如,批量执行查看硬盘使用情况的df命令:

>ansible client -m command -a "df"

执行返回结果如下:

root@macOS-debian:~# ansible client -m command -a "df"
10.211.55.7 | SUCCESS | rc=0 >>
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             2012044        0   2012044   0% /dev
tmpfs             404640     5548    399092   2% /run
/dev/sda1       64760428 14552152  46888932  24% /
tmpfs            2023180        0   2023180   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
tmpfs            2023180        0   2023180   0% /sys/fs/cgroup
tmpfs             404636        0    404636   0% /run/user/0

10.211.55.6 | SUCCESS | rc=0 >>
Filesystem     1K-blocks    Used Available Use% Mounted on
udev              496744       0    496744   0% /dev
tmpfs             101576   10744     90832  11% /run
/dev/sda1       64760428 3735984  57705100   7% /
tmpfs             507876       0    507876   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs             507876       0    507876   0% /sys/fs/cgroup
tmpfs             101572       0    101572   0% /run/user/0
overlay         64760428 3735984  57705100   7% /var/lib/docker/overlay2/e4373909ceacde98e04d2e594add0c4fc5311e9df268eb7e392adf5c7191b3a3/merged
shm                65536       0     65536   0% /var/lib/docker/containers/535cdb6e434e5f845545a6c371edc283ee7fbade453debd86c7209106beaafe1/mounts/shm

ansible模块

ansible内置了非常多的模块,方便我们使用,具体的可以查阅官方文档:http://docs.ansible.com/ansible/latest/list_of_all_modules.htmlhttp://www.ansible.com.cn/docs/modules.html

Ansible-playbook

playbook文件格式为yaml语法,下面是一个简单的安装golang环境的例子!

之前在网络看到一篇文章里推荐的playbook脚本目录结构如下:

root@macOS-debian:/etc/ansible# tree .
.
├── ansible.cfg
├── hosts
├── install-golang.yml
└── roles
    └── install-golang
        ├── files
        │   ├── go1.10.1.linux-amd64.tar.gz
        │   ├── install-golang.sh
        │   └── set_variable.sh
        ├── tasks
        │   └── main.yml
        ├── templates
        └── vars
            └── main.yml

## file目录:用于存放将要拷贝到远程主机的安装包等

## tasks目录:将要执行的所有任务,如果比较复杂,可以单独定义不同的任务,最后在 main.yml 文件中引用即可

## templates目录:模板目录,这里存放着一些可变的文件,即:每台主机上的这些文件中的内容都不完全相同

## vars目录:用于存放变量

install-golang.yml文件内容为:

---
- hosts: client
  roles:
  - install-golang

roles/install-golang/tasks/main.yml文件内容为:

---
  - name: copy file go{{go_version}}.tar.gz
    copy: src=go{{go_version}}.tar.gz dest=/opt/go{{go_version}}.tar.gz owner=root group=root
  - name: unzip file
    shell: tar -C /usr/local -xzf /opt/go{{go_version}}.tar.gz
  - name: mkdir GOPATH
    shell: mkdir -p {{gopath}}
  - name: set variable
    lineinfile: dest=/etc/profile regexp="^export GOROOT=" line="export GOROOT=/usr/local/go"
  - name: set varialbe
    lineinfile: dest=/etc/profile regexp="^export GOPATH=" line="export GOPATH={{gopath}}"
  - name: set varialbe
    lineinfile: dest=/etc/profile regexp="^export PATH=\$PATH:\$GOROOT" line="export PATH=$PATH:$GOROOT/bin:$GOPATH/bin"

roles/install-golang/vars/main.yml文件内容为:

go_version: 1.10.1.linux-amd64
gopath: /data/go

执行的playbook方式为:ansible-playbook /etc/ansible/install-golang.yml

timg.jpeg