由于Ansible不是一个服务,所以更改完配置后无无需进行重启操作(也没提供重启的操作方法),改完配置立即生效。
一、Ansible安装
Ansible的安装方法主要有以下三种:
1、yum使用EPEL源安装
复制
1. $ mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
2. $ mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
3. $ wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
4. $ yum clean all && yum makecache
5. # 可以使用以下三种方式查看ansible包的信息
6. $ yum info ansible
7. $ yum list ansible
8. $ yum list | grep ansible
9. ansible.noarch 2.9.27-1.el7 epel
10. ansible-collection-microsoft-sql.noarch 1.1.0-1.el8 AppStream
11. ansible-collection-redhat-rhel_mgmt.noarch 1.0.0-2.el8 AppStream
12. ansible-doc.noarch 2.9.27-1.el7 epel
13. ansible-freeipa.noarch 0.3.8-1.el8 AppStream
14. ansible-freeipa-tests.noarch 0.3.8-1.el8 AppStream
15. ansible-inventory-grapher.noarch 2.4.4-1.el7 epel
16. ansible-lint.noarch 3.5.1-1.el7 epel
17. ansible-openstack-modules.noarch 0-20140902git79d751a.el7 epel
18. ansible-pcp.noarch 2.2.1-1.el8 AppStream
19. ansible-python3.noarch 2.9.27-1.el7 epel
20. ansible-review.noarch 0.13.4-1.el7 epel
21. ansible-test.noarch 2.9.27-1.el7 epel
22. centos-release-ansible-29.noarch 1-2.el8 extras
23. kubernetes-ansible.noarch 0.6.0-0.1.gitd65ebd5.el7 epel
24. python2-ansible-runner.noarch 1.0.1-1.el7 epel
25. python2-ansible-tower-cli.noarch 3.3.9-1.el7 epel
26. vim-ansible.noarch 3.2-1.el7
27. # 安装ansible
28. $ yum -y install ansible
29. $ ansible --version
2、编译安装
复制
1. $ yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
2. # 需要提前安装Python环境(略)
3. $ wget https://releases.ansible.com/ansible/ansible-2.9.27.tar.gz
4. $ tar xf ansible-2.9.27.tar.gz
5. $ cd ansible-2.9.27
6. $ ls -al
7. total 160
8. drwxr-xr-x 2 root root 4096 May 25 05:18 bin
9. drwxr-xr-x 2 root root 4096 May 25 05:18 changelogs
10. drwxr-xr-x 3 root root 4096 May 25 05:18 contrib
11. -rw-r--r-- 1 root root 35148 May 25 05:18 COPYING
12. drwxr-xr-x 6 root root 4096 May 25 05:18 docs
13. drwxr-xr-x 3 root root 4096 May 25 05:18 examples
14. drwxr-xr-x 3 root root 4096 May 25 05:18 hacking
15. drwxr-xr-x 3 root root 4096 May 25 05:18 lib
16. drwxr-xr-x 2 root root 4096 May 25 05:18 licenses
17. -rw-r--r-- 1 root root 13840 May 25 05:18 Makefile
18. -rw-r--r-- 1 root root 1731 May 25 05:18 MANIFEST.in
19. drwxr-xr-x 10 root root 4096 May 25 05:18 packaging
20. -rw-r--r-- 1 root root 7724 May 25 05:18 PKG-INFO
21. -rw-r--r-- 1 root root 5175 May 25 05:18 README.rst
22. -rw-r--r-- 1 root root 351 May 25 05:18 requirements.txt
23. -rw-r--r-- 1 root root 12949 May 25 05:18 setup.py
24. -rw-r--r-- 1 root root 28352 May 25 05:18 SYMLINK_CACHE.json
25. drwxr-xr-x 7 root root 4096 May 25 05:18 test
26. $ python setup.py build
27. $ python setup.py install
28. $ mkdir /etc/ansible
29. $ cp -r examples/* /etc/ansible
3、Git 源码安装
复制
1. $ git clone https://github.com/ansible/ansible.git
2. $ cd ansible
3. $ git checkout stable-2.9
4. Updating files: 100% (19674/19674), done.
5. Branch 'stable-2.9' set up to track remote branch 'stable-2.9' from 'origin'.
6. Switched to a new branch 'stable-2.9'
7. $ source ./hacking/env-setup
4、pip安装
复制
1. $ yum install python-pip python-devel
2. $ yum install gcc glibc-devel zibl-devel rpm-bulid openss1-devel
3. $ pip install -U pip
4. $ pip install ansible --upgrade
二、Ansible相关文件说明
1、配置文件
2、主配置文件介绍
复制
1. [defaults]
2. #inventory = /etc/ansible/hosts # 主机列表配置文件
3. #library =/usr/share/my_modules/ # 库文件存放目录
4. #remote_tmp = $HOME/.ansible/tmp # 临时py命令文件存放在远程主机目录
5. #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
6. #forks = 5 # 默认并发数
7. #sudo_user = root # 默认sudo用户
8. #ask_sudo_pass = True # 每次执行ansible命令是否询间ssh密码
9. #ask_pass = True # 是否询问密码
10. #remote_port = 22 # 默认的远程登录端口
11. host_key_checking = False # 检查对应服务器的host_key,建议取消注释
12. log_path=/var/log/ansible.log # 日志文件,建议启用
13. #module_name = command # 默认模块,可以修改为shell模块
以上只是一小部分关于default的相关配置,还有其他更多的配置这里暂时不一一列举。因为ansible的大部分参数都可以保持默认,无需更改。但是当你的被管理机器数量增加以后,建议将forks数量适当的调整。
温馨提示:由于Ansible不是一个服务,所以更改完配置后无无需进行重启操作(也没提供重启的操作方法),改完配置立即生效。
3、Inventory主机清单文件
主机清单文件,用大白话讲其实就是被整合在一个文件中的一组或者多组被管控的节点。默认情况下,该清单文件为:/etc/ansible/hosts,通常我们可能会根据项目需求,起一个见名知意的其他名称,或者也会直接在每一套我们需要组织的项目根目录下存放一个hosts的清单文件。
Inventory主机清单文件可以有多个,在使用plyabook时可以手动通过-i 参数指定你需要使用的清单文件名称。
Inventory文件遵循了ini配置文件的风格,一个section就表示一组隶属于同一个分组的被管理机器。目标被管理节点默认均被视为使用SSH的22端口,但是当部分节点使用非22端口号时,也可以在清单文件中进行指定。
被管理节点可以是以IP的形式写在清单文件中,也可以使用域名的形式。
复制
1. [sites]
2. 172.16.0.10
3. 172.16.0.11
4. [appsrvs]
5. 192.168.66.[1:30]
6. [nginx]
7. nginx1.ayunw.cn
8. nginx2.ayunw.cn
9. [apache]
10. apache1.ayunw.cn:2333
11. apache2.ayunw.cn
12. [nginxsrvs]
13. nginx[10:20].ayunw.cn
14. [dbservers]
15. redis1.ayunw.cn
16. redis2.ayunw.cn
17. [dbsrvs]
18. mysql-[a:z].ayunw.cn
三、实战演练
1、环境介绍
我这里包括ansible主控机和另外两个被管理机器。
复制
1. [root@ansible-server ~]# cat /etc/ansible/hosts
2. [webservers]
3. 192.168.66.[151:153]
4. [dbservers]
5. 192.168.66.151
6. [appservers]
7. 192.168.66.[152:153]
2、Ansible相关命令工具
以上命令,最常用的两个:ansible和ansible-playbook,这两个命令就是ansible用来实现批量管里的关键。
接下来介绍几个比较常用的命令。
(1)ansible-doc
该命令主要用于显示针对某个模块的使用方法的帮助信息。如果忘记了模块或者模块的用法,可以通过该命令快速查看。
复制
1. ansible-doc [options][module...]
2. # 列出可用模块
3. -l,--list
4. # 显示指定模块的playbook片段
5. -s,--snippet
6. 如:
7. # 列出所有模块
8. ansible-doc -l
9. # 查看指定模块帮助用法
10. ansible-doc copy
11. # 查看指定模块帮助用法[简化版的帮助]
12. ansible-doc -s copy
注意: 在使用ansible批量管理操作之前,需要先对所有主机做一个免密认证,以确保每个被管理节点都能在ansible管理节点上通过ssh协议免密登录到被管理节点。
免密的三种实现方式:
ad-hoc 方式常用参数说明:
通配符
复制
1. ansible "*"-m ping
2. ansible 192.168.1.* -m ping
3. ansible "srvs" -m ping
4. [root@ansible-server ~]# ansible "*" --list-hosts
5. hosts (3):
6. 192.168.66.151
7. 192.168.66.152
8. 192.168.66.153
逻辑或
复制
1. ansible "websrvs:appsrvs" -m ping
2. ansible "192.168.66.151:192.168.66.152" -m ping
逻辑与
复制
1. # 在websrvs组并且在dbsrvs组中的主机
2. ansible "webservers:&dbservers" -m ping
3. 192.168.66.151 | SUCCESS => {
4. "ansible_facts": {
5. "discovered_interpreter_python": "/usr/bin/python"
6. },
7. "changed": false,
8. "ping": "pong"
9. }
逻辑非
复制
1. # 在websrvs组,但不在dbsrvs组中的主机
2. # 注意:此处为单引号
3. ansible 'webservers:!dbservers' -m ping
正则
复制
1. ansible "webservers:&dbservers" -m ping
2. ansible "~(web|db)servers" -m ping
(2)ansible执行命令过程
可以通过加参数 -v 或者 -vvv列出详细的执行过程(可以多加几个v参数)。
复制
1. [root@ansible-server ~]# ansible "~(web|db)servers" -vvv -m ping > ansible.log
2. [root@ansible-server ~]# grep "chmod" ansible.log
(3)ansible执行后颜色描述
默认情况下是以下三种颜色:
但是在ansible配置文件中可以定义颜色,如下:
复制
1. [root@ansible-server ~]# vim /etc/ansible/ansible.cfg
2. [colors]
3. #highlight = white
4. #verbose = blue
5. #warn = bright purple
6. #error = red
7. #debug = dark gray
8. #deprecate = purple
9. #skip = cyan
10. #unreachable = red
11. #ok = green
12. #changed = yellow
13. #diff_add = green
14. #diff_remove = red
15. #diff_lines = cyan
(4)Ansible-playbook示例
复制
1. [root@ansible-server ~]# cat echo-demo.yml
2. ---
3. - hosts: all
4. remote_user: root
5. tasks:
6. - name: echo demo
7. command: echo "第一个 ansible-playbook 示例"
8. [root@ansible-server ~]# ansible-playbook echo-demo.yml
(5)ansible-vault
该工具用于对yaml文件进行加解密,格式如下:
复制
1. ansible-vault [create|decrypt|edit|encrypt|rekey|view]
2.
3. 如:
4. ansible-vault encrypt echo-demo.yml # 加密
5. ansible-vault view echo-demo.yml # 查看
6. ansible-vault decrypt echo-demo.yml # 解密
7. ansible-vault edit echo-demo.yml # 编辑加密文件
8. ansible-vault create echo-demo.yml # 创建新文件
ansible是一个简单高效且很强大的工具,它的功能远不止于此。而那些不常用的命令工具,本文也暂不介绍。
来源: 运维开发故事
>>>>>>点击进入系统运维专题
¥10500.00
¥49.00
¥5999.00
¥499.00
¥1888.00