文章目录
- 01-Ansible 自动化介绍
- Ansible 自动化介绍
- 手动执行任务和自动化执行任务
- 基础架构即代码
- Ansible 与 DevOps
- 什么是 ANSIBLE?
- Ansible 特点
- Ansible 概念和架构
- Ansible Way
- Ansible 用例
- Ansible 部署
- 准备实验环境
- 控制节点
- 受管节点
- Linux
- Windows
- 网络设备
- 网络设备
01-Ansible 自动化介绍
Ansible 自动化介绍
手动执行任务和自动化执行任务
手动执行任务缺点:
- **很容易遗漏某个步骤或错误地执行某个步骤。**步骤是否正确执行或产生预期的结果的验证通常有限。
- 管理大量服务器很容易会出现差异,加大维护的难度,并给IT环境带来错误或不稳定性。
自动化执行任务优点:
- 通过标准化,确保快速、正确地部署和配置所有系统。
- 自动执行日常计划重复性任务,从而空出时间并专注于更重要的事情。
- 更快速的交付应用。
基础架构即代码
良好的自动化系统允许实施基础架构即代码方法。**基础架构即代码意味着可以使用机器可读的自动化语言来定义和描述IT基础架构所处的状态。**理想情况下,这种自动化语言也应该非常便于人类阅读,因为这样就可以轻松了解所处的状态并对其进行更改。
**如果自动化语言使用简单文本文件表示,还可以使用版本控制系统管理。**这样做的好处是每个更改都可以嵌入到版本控制系统中,可以获得随时间所做更改的历史记录,可以将系统恢复到更早的配置。这样就奠定了一个遵循DevOps的基础。开发人员可以在自动化语言中定义所需的配置。操作员可以更轻松地查看这些更改以提供反馈,并使用该自动化可重复地确保系统处于开发人员期望的状态。
Ansible 与 DevOps
百度百科:DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
DevOps的关键在于 communication(沟通和交流)。
Ansible是第一款可以在整个IT范围读取和编写的自动化语言,也是唯一能够从头至尾自动化应用生命周期和持续交付管道的自动化引擎。
什么是 ANSIBLE?
Ansible is a simple automation language,通过Playbooks描述和配置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 概念和架构
- NODES:Ansible架构中有两种计算机类型:
- 控制节点,安装有ansible软件的节点。
- 受管节点,被ansible管理的Linux系统、Windows系统、网络设备等。
- INVENTORY:受管主机清单。
- PLAYBOOK:Ansible用户只需要编写playbook,确保主机是预期状态。
- 每个playbook可以包含多个play。
- 每个play会在一组hosts上按顺序执行一系列tasks。
- 每个task都执行一个模块,模块是一个小的代码段(Python,PowerShell,或者其他语言)。Ansible自带几百个模块,执行不同类型自动化任务,例如操作系统文件,安装软件,API调用。Tasks,plays和Playbooks是 idempotent(幂等的),在相同的主机上多次安全地执行Playbooks,让主机是正确的状态。如果主机已经是预期状态,则Playbook不会做任何改变。
- PLUGINS,添加到Ansible中的代码段,用于扩展Ansible平台。
Ansible Way
- Complexity Kills Productivity(复杂性会破坏效率),越简单越好。Ansible的设计宗旨是工具易用,自动化易写易读,所以在创建自动化时尽可能地追求简单化。
- Optimize For Readability(专为易读性优化),Ansible自动化语言围绕简单易读的声明性文本文件来构建。正确编写的Ansible Playbook可以清楚地记录您的工作流自动化。
- Think Declaratively(声明式思维),Ansible是一种要求状态引擎。它通过表达您希望系统处于何种状态来解决如何自动化IT部署的问题。Ansible的目标是通过仅执行必要的更改,使您的系统处于所需的状态。
Ansible 用例
- 配置管理:集中化配置文件管理和部署是Ansible的常见用例,很多高级用户也是通过这种方式了解Ansible自动化平台。
- 应用部署:通过Ansible定义应用,以及使用红帽Ansible Tower管理部署时,各团队可以更加有效地管理从开发到生产的整个应用生命周期。
- 工作流管理:Ansible 和红帽Ansible Tower有助于简化调配系统的流程,不论您是要PXE引导和kickstart安装裸机恢复服务器或虚拟机,还是从模板创建虚拟机或云实例。
- 持续交付:创建CI/CD管道需要多个团队的协调和参与。如果没有组织内人人可用的简单自动化平台,就无法实现这个目标。Ansible Playbook让您的应用可以在整个生命周期内得到正确部署(和管理)
- 安全性和合规性:当您在Ansible Playbook中定义安全策略时,也可以将扫描和修复整站安全策略集成到其他自动化流程中。确保安全应该是您所有部署中不可或缺的组成部分,而不是事后才去考虑的部分。
- 编排:仅配置本身不足以定义您的环境,您还需定义多个配置间就应如何交互,并确保以整体的方式管理各类分散资源。
Ansible 部署
准备实验环境
基于CentOS-7-template克隆出5台虚拟机,分别按下面的实验环境命名,配置IP
实验环境
| 主机名 | IP地址 | 作用 |
|---|---|---|
| controller.dyx.cloud | 192.168.108.10 | 控制节点 |
| node1.dyx.cloud | 192.168.108.11 | 受控节点 |
| node2.dyx.cloud | 192.168.108.12 | 受控节点 |
| node3.dyx.cloud | 192.168.108.13 | 受控节点 |
| node4.dyx.cloud | 192.168.108.14 | 受控节点 |
实验环境 /etc/hosts
192.168.108.10 controller.dyx.cloud controller192.168.108.11 node1.dyx.cloud node1192.168.108.12 node2.dyx.cloud node2192.168.108.13 node3.dyx.cloud node3192.168.108.14 node4.dyx.cloud node4配置控制节点 laogao 用户使用laogao用户免密登录所有节点,并免提sudo提权执行任何命令。
# 所有节点配置/etc/hostscat>>/etc/hosts<<EOF ################# ansible ################# 192.168.108.10 controller.dyx.cloud controller 192.168.108.11 node1.dyx.cloud node1 192.168.108.12 node2.dyx.cloud node2 192.168.108.13 node3.dyx.cloud node3 192.168.108.14 node4.dyx.cloud node4 EOF# 所有节点添加用户[root@controller ~]# useradd dyx[root@controller ~]# echo 123 |passwd --st din dyxChanging passwordforuser dyx. passwd: all authentication tokens updated successfully.[root@controller ~]# echo 'dyx ALL=(ALL) N OPASSWD:ALL' >/etc/sudoers.d/dyx[root@node1 ~]# useradd dyx[root@node1 ~]# echo 123 |passwd --stdin d yxChanging passwordforuser dyx. passwd: all authentication tokens updated successfully.[root@node1 ~]# echo 'dyx ALL=(ALL) NOPASS WD:ALL' >/etc/sudoers.d/dyx[root@node2 ~]# useradd dyx[root@node2 ~]# echo 123 |passwd --stdin d yxChanging passwordforuser dyx. passwd: all authentication tokens updated successfully.[root@node2 ~]# echo 'dyx ALL=(ALL) NOPASS WD:ALL' >/etc/sudoers.d/dyx[root@node3 ~]# useradd dyx[root@node3 ~]# echo 123 |passwd --stdin d yxChanging passwordforuser dyx. passwd: all authentication tokens updated successfully.[root@node3 ~]# echo 'dyx ALL=(ALL) NOPASS WD:ALL' >/etc/sudoers.d/dyx[root@node4 ~]# useradd dyx[root@node4 ~]# echo 123 |passwd --stdin d yxChanging passwordforuser dyx. passwd: all authentication tokens updated successfully.[root@node4 ~]# echo 'dyx ALL=(ALL) NOPASS WD:ALL' >/etc/sudoers.d/dyx# controller节点操作# 安装sshpass[root@controller ~]# yum install -y sshpass# 密钥登陆[root@controller ~]# su - dyx[dyx@controller ~]$sshnode1#输入yes,密码,exit退出[dyx@controller ~]$sshnode2[dyx@controller ~]$sshnode3[dyx@controller ~]$sshnode4[dyx@controller ~]$sshcontroller# 创建密钥对[dyx@controller ~]$[-d ~/.ssh]||mkdir-m700.ssh[dyx@controller ~]$ ssh-keygen -t rsa -f .ssh/id_rsa -N''Generating public/private rsa key pair. Your identification has been savedin.ssh/id_rsa. Your public key has been savedin.ssh/id_rsa.pub. The key fingerprint is: SHA256:y1a5LZQDEiEZcgquOOMUXGXOitN1OIsYsKbPBg1mWAo dyx@controller.dyx.cloud The key's randomart image is: +---[RSA2048]----+|E o.==o.||*=.+=...||=O. *...||Bo* + +..o||B=.+.S *||o*..+ +||.+ + o.||...|||+----[SHA256]-----+# 推送公钥到目标主机[dyx@controller ~]$forhostincontroller node{1..4};dosshpass -p123ssh-copy-id dyx@$host;done# 验证免密登录[dyx@controller ~]$forhostincontroller node{1..4};dosshdyx@$hosthostname;donecontroller.dyx.cloud node1.dyx.cloud node2.dyx.cloud node3.dyx.cloud node4.dyx.cloud控制节点
控制节点即用来安装 Ansible 软件的主机节点。控制节点可以是一个或多个,由 ansible 管理的主机不用安装 Ansible。
提示:控制节点是Linux或UNIX系统,不支持 Windows 作为控制节点。
安装 ansible
#法一[root@controller ~]# yum install -y epel-release[root@controller ~]# yum install -y ansible#法二[root@controller ~]# yum install -y epel-release[root@controller ~]# sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo[root@controller ~]# sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo[root@controller ~]# sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g " /etc/yum.repos.d/epel.repo#验证[root@controller ~]# ansible --versionansible2.9.27 configfile=/etc/ansible/ansible.cfg configured module search path=[u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location=/usr/lib/python2.7/site-packages/ansible executable location=/usr/bin/ansible python version=2.7.5(default, Oct142020,14:45:30)[GCC4.8.520150623(Red Hat4.8.5-44)]所有关机拍快照
受管节点
Linux
受管节点满足的要求取决于控制节点连接它们的方式以及它们要运行的模块:
- Python 版本:Linux和UNIX受管节点需要安装Python才能运行大部分的模块。
- 一些模块不需要Python。例如,raw模块的参数直接通过配置的远程shell运行,在没有Python环境的设备上使用。不过,raw模块难以通过安全的幂等方式使用。
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的网络设备等。
深入阐述管理基于Microsoft Windows的受管节点时的具体差别和必要调整。可以在Ansible网站上查看更多信息。
网络设备
还可以使用Ansible自动化来配置受管网络设备,例如路由器和交换机。Ansible包含大量专门为此目的而设计的模块。其中包括对Cisco IOS、IOSXR和NX-OS的支持;Juniper Junos;AristaEOS;以及基于VyOS的网络设备等。
由于大多数网络设备无法运行Python,因此Ansible在控制节点上运行网络模块,而不是在受管节点上运行。特殊连接方法也用于与网络设备通信,通常使用SSH上的CLI、SSH上的XML或HTTP(S)上的API。