ansible的介绍,安装与部署
文章目录
- ansible的介绍,安装与部署
- 一. ansible的介绍
- 1. 含义
- 2. ansible 架构图
- 3. [ansible核心模块网址](https://docs.ansible.com/ansible/latest/collections/index_module.html)
- 4. ansible 无需代理
- 5. 优点
- 6. 工作方式
- 7. ansible 的控制节点
- 8. 受管主机
- 二. 安装ansible
- 三. 部署ansible
- 1. 定义清单
- 2. 使用静态清单指定受管主机
- 3. 验证清单
- 4. 覆盖清单的位置
- 5. 构建清单文件
- 6. 管理Ansible配置文件
- 7. 管理配置文件中的设置
- 7.1 Ansible配置
一. ansible的介绍
1. 含义
- Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
- Ansible是基于模块工作的,只提供一种框架,包括:
- (1) 连接插件connection plugins:负责和被监控端实现通信;
- (2) host inventory(清单):指定操作的主机,是一个配置文件里面定义管理的主机;
- (3) 各种模块核心模块、command模块、自定义模块;
- (4) 借助于插件完成记录日志邮件
等功能;
- (5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务
2. ansible 架构图
3. ansible核心模块网址
4. ansible 无需代理
- Ansible 围绕无代理架构构建
- 通过 OpenSSH 或 WinRM 连接它所管理的主机并且运行任务,方法通常是将称为 Ansible 模块的小程序推送至这些主机。这些程序用于将系统置于需要的特定状态。在 Ansible 运行完其任务后,推送的所有模块都会被删除
5. 优点
- 跨平台支持:Ansible 可以管理Linux、Windows、UNIX和网络设备(路由器交换机)的无代理支持,适用于物理(真机)、虚拟、云和容器环境
- 人类可读的自动化:Ansible Playbook采用 YAML 文本文件编写,易于阅读,有助于确保所有人都能理解它们的用途。
- 完美描述应用:可以通过 Ansible Playbook进行每种更改,并描述和记录应用环境的每一个方面,把达到什么效果描述出来,自动会达成那个效果。
- 轻松管理版本控制:Ansible Playbook和项目是纯文本。它们可以视作源代码,放在现有版本控制系统中。
- 支持动态清单(通过程序自动生成的):可以从外部来源动态更新 Ansible 管理的计算机列表,随时获取所有受管服务器的当前正确列表,不受基础架构或位置的影响。
- 编排可与其他系统轻松集成:能够利用环境中现有的 HP SA、Puppet、Jenkins、红帽卫星和其他系统,并且集成到 Ansible 工作流中。
6. 工作方式
- Ansible 的设计宗旨是工具易用,自动化易写易读。所以在创建自动化时我们应追求简单化
- Ansible 是一种要求状态引擎。它通过表达你所希望系统处于何种状态来解决如何自动化IT部署的问题。Ansible 的目标是通过仅执行必要的更改,使系统处于所需的状态。试图将 Ansible 视为脚本语言并非正确的做法。
7. ansible 的控制节点
- Ansible 软件只需要安装到要运行它的一个(或多个)控制节点上
- 对控制节点的要求:
- 控制节点应是Linux或UNIX系统。不支持将Windows用作控制节点,但Windows系统可以是受管主机。
- 控制节点需要安装Python3(版本3.5或以上)或Python2(版本2.7或以上
8. 受管主机
- 受管主机不需要安装特殊代理
- Ansible控制节点使用标准的网络协议连接受管主机
二. 安装ansible
- 配置yum源
[root@SYL2 ~]# cd /etc/yum.repos.d/
[root@SYL2 yum.repos.d]# ls
[root@SYL2 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:100 2495 100 2495 0 0 13633 0 --:--:-- --:--:-- --:--:-- 13633
[root@SYL2 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@SYL2 yum.repos.d]#
[root@SYL2 yum.repos.d]# yum clean all
Failed to set locale, defaulting to C.UTF-8
36 files removed
[root@SYL2 yum.repos.d]# yum list all
[root@SYL2 yum.repos.d]# yum list all|grep ansible
[root@SYL2 yum.repos.d]# yum -y install centos-release-ansible-29
[root@SYL2 yum.repos.d]# ls
CentOS-Base.repo CentOS-SIG-ansible-29.repo
[root@SYL2 yum.repos.d]# cd
[root@SYL2 ~]# yum -y install ansible
三. 部署ansible
1. 定义清单
- 清单定义Ansible将要管理的一批主机。这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量
2. 使用静态清单指定受管主机
- 静态清单文件是指定Ansible目标受管主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML
green.example.com
blue.example.com
192.168.100.1
192.168.100.10
- 可以将受管主机组织为主机组
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
www[001:006].example.com //001到006
上面是一组
[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
db-[99:101]-node.example.com
3. 验证清单
验证主机
[root@SYL2 ansible]# vim hosts
[root@SYL2 ansible]# ansible node1 --list-hosts
hosts (1):
node1
[root@SYL2 ansible]# ansible node2 --list-hosts
[WARNING]: Could not match supplied host pattern, ignoring: node2
[WARNING]: No hosts matched, nothing to do
hosts (0):
[root@SYL2 ansible]#
主机组
[root@SYL2 ansible]# vim hosts
[root@SYL2 ansible]# ansible webs --list-hosts
hosts (2):
node1
node2
[root@SYL2 ansible]#
使用以下命令列出默认清单文件中的所有受管主机
[root@SYL2 ansible]# ansible all --list-hosts
hosts (2):
node1
node2
[root@SYL2 ansible]#
使用以下命令列出不属于任何组的受管主机
[root@SYL2 ansible]# vim hosts
[root@SYL2 ansible]# ansible ungrouped --list-hosts
hosts (1):
666
[root@SYL2 ansible]#
4. 覆盖清单的位置
- /etc/ansible/hosts文件被视为系统的默认静态清单文件
5. 构建清单文件
[root@SYL2 ansible]# ls
ansible.cfg hosts roles
[root@SYL2 ansible]# vim inventory
[root@SYL2 ansible]# ls
ansible.cfg hosts inventory roles
[root@SYL2 ansible]# cat inventory
[webs]
SYL3
[root@SYL2 ansible]# vim /etc/hosts
[root@SYL2 ansible]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.232.128 SYL3
[root@SYL2 ansible]#
[root@SYL2 ansible]# ansible SYL3 -i /etc/ansible/inventory --list-hosts
hosts (1):
SYL3
[root@SYL2 ansible]#
6. 管理Ansible配置文件
- 使用./ansible.cfg 优先级最高
- 使用~/.ansible.cfg
- 使用/etc/ansible/ansible.cfg
[root@SYL2 ~]# mv httpd/ /opt/
[root@SYL2 httpd]# ls
ansible.cfg inventory
[root@SYL2 httpd]#
[root@SYL2 httpd]# cat ansible.cfg |grep inventory
inventory =/opt/httpd/inventory
[root@SYL2 httpd]# ansible all --list-hosts
hosts (1):
SYL3
[root@SYL2 httpd]#
临时生效
[root@SYL2 httpd]# export ANSINLE_CONFIG=/opt/httpd/ansible.cfg //环境变量
[root@SYL2 httpd]# ansible --version
ansible 2.9.27
config file = /opt/httpd/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Jan 19 2022, 23:28:49) [GCC 8.5.0 20210514 (Red Hat 8.5.0-7)]
[root@SYL2 httpd]#
7. 管理配置文件中的设置
Ansible配置文件由几个部分组成,每一部分含有以键值对形式定义的设置。部分的标题以中括号括起来。对于基本操作,请使用以下两部分:
- [defaults]部分设置Ansible操作的默认值
[defaults]
inventory = ./inventory
remote_user = user
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
- [privilege_escalation]配置Ansible如何在受管主机上执行特权升级
7.1 Ansible配置
指令 | 描述 |
inventory | 指定清单文件的路径 |
remote_user | 要在受管主机上登录的用户名。如果未指定则使用当前用户名 |
ask_pass | 是否提示输入SSH密码。如果使用SSH公钥身份验证则可以是false |
become | 连接后是否自动在受管主机上切换用户(通常切换为root) 这也可以通过play来指定。 |
become_method | 如何切换用户(通常为sudo,这也是默认设置,但可选择su) |
become_user | 要在受管主机上切换到的用户(通常是root,这也是默认值) |
become_ask_pass | 是否需要为become_method提示输入密码。默认为false。 |