概述
AUTOMATION FOR EVERYONE,这是官方对Ansbile的定位。看字面意思应该很明确了,它就是为了完成系统各种自动化而服务。用它部署应用、管理各类系统,帮助运维人员简化很多复杂场景,提高工作效率。Ansible有收费版和开源版本,我一直用开源的,能满足现在的需求。用ansbile也没几个月,之前用puppet,salt,不能说都比这些好,但ansible的优点还是很多的,不然也不至于redhat会收购吧。
进入正题
使用场景
- 配置管理。从系统初始化完成到正式上线,我们会将指定机器角色定义好,比如是proxy(负载均衡)还是web服务器,这不限于是单台机器或多台机器。单台机器可以承担多个角色,比如我们将dns角色和web服务器角色共同应用于某台机器,以达到机器复用的目的。
- 实时执行命令-Ad hoc。Ansible有好多模块支持命令行操作,比如copy,shell等。
优点
- 没有客户端,命令通过ssh通道执行。一般情况下加key认证简单方便。像Puppet和salt C/S架构,如果master有故障会很麻烦,但Ansible不会,只需要将私钥保持好,可以在任意机器执行命令。
- Python语言编写。很多运维人员都用python,也喜欢用python写的开源软件,这点大家应该都懂的。
安装
- mac可以直接用brew
brew install ansible
- CentOS安装可以用yum,需要安装EPEL yum源
yum install ansible
KEY认证
1.在中控机(控制所有机器的主机)生成key,以root用户操作,demo如下:
[root@web01 app]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: c3:8c:fc:26:2c:eb:6d:42:cc:50:d4:56:21:e1:f0:ba root@web01.bj The key's randomart image is: +--[ RSA 2048]----+ | .o.ooo. | | .+o. | | . .o | | . o + | | +. o S | | +o . . | | .E o o | | .+.o | | .oo. | +-----------------+
2.将中控机的公钥传到各个主机的认证文件中(默认在$HOME/.ssh/authorized_keys),当前$HOME为root.这个key不用手工复制,用ssh-copy-id操作,如下:
[root@web01 app]# ssh-copy-id root@web02.bj The authenticity of host 'web02.bj (10.80.0.11)' can't be established. RSA key fingerprint is 43:f2:67:6a:11:5b:16:0f:6f:65:f9:32:74:06:ca:e2. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'web02.bj,10.80.0.11' (RSA) to the list of known hosts. root@web02.bj's password: Now try logging into the machine, with "ssh 'root@web02.bj'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
提示让你输入目标机器的用户密码,输入完成公钥会自动传到对方认证KEY文件(authorized_keys)。
到这步,整个安装过程就结束了,可以简单跑个命令测试下。
简单测试
- 在ansible主机列表配置文件/etc/ansible/hosts中,将需要管理的机器添加机器,如下:
[root@web01 app]# cat /etc/ansible/hosts web02.bj
如上,就web02.bj一台机器。咱们运行ping模块测试ansible all -m ping
[root@web01 app]# ansible all -m ping web02.bj | success >> { "changed": false, "ping": "pong" }
看到pong回应了,说明测试成功了。