【网络运维】Linux和自动化:Ansible
Linux自动化:Ansible
什么是自动化?
手动执行任务和自动化执行任务
手动执行任务缺点:
- 很容易遗漏某个步骤或错误地执行某个步骤。 步骤是否正确执行或产生预期的结果的验证通常有限。
- 管理大量服务器很容易会出现差异,加大维护的难度,并给IT环境带来错误或不稳定性。
自动化执行任务优点:
- 通过标准化,确保快速、正确地部署和配置所有系统。
- 自动执行日常计划重复性任务,从而空出时间并专注于更重要的事情。
- 更快速的交付应用。
基础架构即代码
-
良好的自动化系统允许实施基础架构即代码方法。基础架构即代码意味着可以使用机器可读的自动化语言来定义和描述IT基础架构所处的状态。 理想情况下,这种自动化语言也应该非常便于人类阅读,因为这样就可以轻松了解所处的状态并对其进行更改。
-
如果自动化语言使用简单文本文件表示,还可以使用版本控制系统管理。 这样做的好处是每个更改都可以嵌入到版本控制系统中,可以获得随时间所做更改的历史记录,可以将系统恢复到更早的配置。这样就奠定了一个遵循DevOps的基础。开发人员可以在自动化语言中定义所需的配置。操作员可以更轻松地查看这些更改以提供反馈,并使用该自动化可重复地确保系统处于开发人员期望的状态。
什么是 ANSIBLE?
Ansible是一个开源的自动化平台,通过Playbooks描述和配置IT基础架构。
Ansible是第一款可以在整个IT范围读取和编写的自动化语言,也是唯一能够从头至尾自动化应用生命周期和持续交付管道的自动化引擎。
Ansible可以管理强大的自动化任务,适用于不同的生产环境。同时,Ansible对于新用户来说,也可以很快的上手运用到生产环境。
使用案例:
- OpenStack 搭建和维护
- OpenShift 搭建和维护
- ceph 搭建和维护
Ansible 特点
-
简单:Ansible Playbooks 是一个人们非常容易查阅,理解和更改的文本文件,用户不需要具备特定的代码编写技能。
-
功能强大:可以使用Ansible部署应用,例如配置管理,工作流自动化,网络自动化。还可用于编排整个应用生命周期。
-
无代理:Ansible 是一个无代理的架构,通过OpenSSH或者WinRM连接到hosts,并执行任务,推送小的程序(Ansible modules)到这些主机上。这些程序用于设置系统到预期状态。在Ansible执行完成后,任何之前推送的模块,都会被删除。Ansible可以随时使用,因为被管理主机上不需要配置特定代理。正是因为这点,Ansible 才更加高效和安全。
-
跨平台支持:可以管理Linux、UNIX、windows 和网络设备。
-
非常准确地描述应用:Ansible Playbook使用YAML格式描述生产环境。
-
可以通过版本控制管理:Ansible Playbooks和projects是纯文本格式,可以当作源码存放在版本控制系统中。
-
非常容易与其他系统集成: HP SA,Puppet,Jenkins,红帽卫星服务器等。
Ansible 部署
准备实验环境
使用虚拟机创建以下设备:
- 控制节点 controller
- 受管节点 node1、node2、node3、node4
配置 /etc/hosts
10.1.8.10 controller.furongwang.cloud controller
10.1.8.11 node1.furongwang.cloud node1
10.1.8.12 node2.furongwang.cloud node2
10.1.8.13 node3.furongwang.cloud node3
10.1.8.14 node4.furongwang.cloud node4
配置控制节点 furongwang 用户使用furongwang用户免密登录所有节点,并免提sudo提权执行任何命令。
# 所有节点配置/etc/hosts
[root@node1 ~]# cat >> /etc/hosts <<EOF################# ansible #################
10.1.8.10 controller.furongwang.cloud controller
10.1.8.11 node1.furongwang.cloud node1
10.1.8.12 node2.furongwang.cloud node2
10.1.8.13 node3.furongwang.cloud node3
10.1.8.14 node4.furongwang.cloud node4
EOF# 所有节点添加用户
[root@node1 ~]# useradd furongwang
[root@node1 ~]# echo redhat | passwd --stdin furongwang# 所有节点,配置免密提权
[root@node1 ~]# echo 'furongwang ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/furongwang# 以上操作在设备node2~4上重复
# 创建密钥对
[furongwang@controller ~]$ [ -d ~/.ssh ] || mkdir -m 700 .ssh
[furongwang@controller ~]$ ssh-keygen -t rsa -f .ssh/id_rsa -N ''# 推送公钥到目标主机
[furongwang@controller ~]$ sudo yum install -y sshpass
[furongwang@controller ~]$ for host in controller node{1..4}
do sshpass -p 123 ssh-copy-id furongwang@$host
done# 验证免密登录
[furongwang@controller ~]$ for host in controller node{1..4}
do ssh furongwang@$host hostname
done
控制节点
控制节点即用来安装 Ansible 软件的主机节点。控制节点可以是一个或多个,由 ansible 管理的主机不用安装 Ansible。
提示:控制节点是Linux或UNIX系统,不支持 Windows 作为控制节点。
安装 ansible
[furongwang@controller ~]$ sudo yum install -y ansible
[furongwang@controller ~]$ ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/home/furongwang/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /bin/ansiblepython version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
受管节点
Linux
受管节点满足的要求取决于控制节点连接它们的方式以及它们要运行的模块:
- Python 版本:Linux和UNIX受管节点需要安装Python才能运行大部分的模块。
- 一些模块不需要Python。例如,raw模块的参数直接通过配置的远程shell运行,在没有Python环境的设备上使用。不过,raw模块难以通过安全的幂等方式使用。
安装 python
[furongwang@node1 ~]$ sudo yum install -y python
# 在设备node2~4上重复
Windows
Ansible随附了多个专门为Microsoft Windows系统设计的模块。这些模块列在Ansible模块索引的Windows Modules 部分。
大部分专门为Microsoft Windows受管节点设计的模块需要在受管节点上:
- 安装 Power Shell 3.0或更高版本。
- 配置 Power Shell 远程连接。
- 安装.NET Framework 4.0或更高版本。
本课程的示例中使用基于Linux的受管节点,不会深入阐述管理基于Microsoft Windows的受管节点时的具体差别和必要调整。可以在Ansible网站上查看更多信息。
网络设备
还可以使用Ansible自动化来配置受管网络设备,例如路由器和交换机。Ansible包含大量专门为此目的而设计的模块。其中包括对Cisco IOS、IOSXR和NX-OS的支持;Juniper Junos;AristaEOS;以及基于VyOS的网络设备等。
由于大多数网络设备无法运行Python,因此Ansible在控制节点上运行网络模块,而不是在受管节点上运行。特殊连接方法也用于与网络设备通信,通常使用SSH上的CLI、SSH上的XML或HTTP(S)上的API。