15.RedHat认证-Ansible自动化运维(上)
RHCE8-RH294
Ansible自动化(Ansible版本是2.8.2)
Ansible介绍
1.Ansible是什么?
Ansible是一个简单的强大的无代理的自动化运维工具(Ansible是自动化运维工具)
Ansible特点
简单的Ansible-Simple
Ansible Playbooks是容易理解,容易看懂的。playbooks是非常容易理解和修改的自动化工具。不需要特
别复杂的编程能力就能写playbook。playbook顺序执行task。playbook简单涉及让每个团队都能很容易上手使用
强大的Ansible-Powerful
你可以使用ansible来部署应用,进行配置管理,工作流自动化运维,网路自动化运维。Ansible可用于协调
整个应用程序生命周期
无代理的Ansible-Agentless
Ansible被建立为无代理的架构。通常,Ansible通过使用OpenSSH或WinRM来连接到被管理的主机并且
经常(但不全是)通过向被管理主机推送叫Ansible模块的小程序来运行tasks。这些程序用于将系统置于
特定的期望状态。任何被推送的模块当ansible任务执行完之后将会被移除。你可以很快的上手ansible,因
为ansible在被管理主机上不需要任何特殊的代理。因为客户端没有代理,所以Ansible是更高效的并且相
比其他的自动化运维工具更安全。
Ansible优势
跨平台支持
Ansible的无代理特性支持Linux,Windows,Unix和网络设备,无论物理机,虚拟机,云主机和容器环境都能支持
易懂易上手
被写成YAML的text文件的Ansible Playbooks是易懂的并且能帮助任何人快速理解并上手
完美应用描述
Ansible Playbooks可以进行任何更改,并且可以描述和记录应用程序环境的各个方面
简单的版本管理
Ansible Playbooks和project是明文的text。它们可以像源代码一样对待并放置在现有的版本控制系统中
支持动态的Inventories
Ansible管理的计算机列表可以从外部源动态更新,以便始终捕获所有托管服务器的正确,最新列表,无论基础架构或位置如何
与其他系统轻松集成的编排
HP SA,Puppet,Jenkins,Red Hat Satellite和其它的在你环境中的系统都可以被集成到你的Ansible中
Ansible是第一种可以跨IT读写的自动化语言。它也是唯一能够从开始到结束自动化应用程序生命周期和连续
交付管道的自动化引擎。
Ansible概念和架构
控制节点
在Ansible的架构中有两种类型的机器,一类是控制节点,一类是被管理主机。Ansible被安装并且运行在
控制节点上,并且这类机器上有你的项目文件的副本。控制节点可以是管理员的笔记本,也可以是一个被
很多管理共同使用的系统,也可以是一个运行Ansible Tower的服务器。
被管理主机-Inventory
被管理主机被列在Inventory中,inventory将这些被管理主机组织进不同的group中进行管理。inventroy
可以被定义在静态的text文件中,或者被定义在动态的脚本中。
Playbook
不用写复杂的脚本,Ansible用户创建高等级的plays来保证主机处在特定的状态。一个剧本在主机上执行
一系列的任务。这些剧本在text文件中被表达为YAML的格式。一个包含一个或更多的play文件叫做
playbook。
Task
每个task运行一个带着特定参数的module,每个module都是一段很少的代码,该代码可以用Python,
PowerShell或其他的语言写。每个模块本质上都是工具包中的工具。Ansible附带了数百个可用于执行各种
自动化任务的有用模块。这些模块可以操作系统中的文件,安装软件或者做系统调用。
安全的多次运行
当在task中使用模块时,模块通常确保关于机器的某些特定事物处于特定状态。例如,task结余使用模块来
确定一个文件是否存在,是否有特定的权限和内容,而使用不同模块的任务可以确保挂载了特定的文件系
统。如果系统不在那个状态,task将会将系统置成那个状态。如果系统已经处在了那个状态,它将什么都
不会做。如果一个task失败了,Ansible的缺省行为是为失败的主机终止剩余的剧本。Tasks,Plays和
playbook是idempotent(幂等的)。你可以在同样的主机上安全的运行多次同样的playbook,并且当你的
系统处在正确的状态时,playbook当运行时将不会做任何改变。
Ansible插件
Ansible也使用插件。插件是您可以添加到Ansible来扩展它,并且能适应新用途和平台的代码。
Ansible架构
Ansible架构是无代理的。通常,当一个管理员运行一个Ansible Playbook或者ad hoc命令时,控制节点
通过使用SSH或WinRM来连接到被管理主机。这意味着在被管理主机客户端不必安装特定的代理软件,并
且不必允许特殊的网络流量传输到非标准端口
rh294虚拟机(实验环境)
实验环境分享链接
链接:https://pan.baidu.com/s/1883uarHug1aJVWRmIt-XaQ
提取码:6666
rh294虚拟机的账号和密码
username:kiosk
password:redhat
username:root
password:Asimov
登陆环境时,选择kiosk用户登陆,不要用root登陆
classroom environment
在rh294的机器里面有7个基于KVM的虚拟机,分别如下:
workstation虚拟机(作为ansible control host)
servera,serverb,serverc,serverd(作为ansible managed host)
bastion(提供了一个外部网络)
classroom虚拟机(提供了练习环境脚本,软件仓库,课程材料)
你如果想管理这些教学环境的虚拟机,不需要掌握虚拟化知识。红帽提供了非常方便的管理工具rht tools。
red hat training tools。
这些虚拟机的启动顺序,先启动classroom,在启动剩下所有的虚拟机。
刚开始的环境,虚拟机并没有在环境中存在,需要使用命令拉取虚拟机。
[kiosk@foundation0 ~]$ rht-vmctl fullreset classroom
Are you sure you want to full reset classroom? (y/n) y
Powering off classroom..
Full resetting classroom.
Creating virtual machine disk overlay for rh294-classroom-vda.qcow2
Starting classroom.
rht-vmctl命令就是rht tools。
rht-vmctl fullreset的意思就是完全重置某个虚拟机(虚拟机的删除重建)
classroom启动之后,我们第一次加载环境,需要将其他的虚拟机文件全部加载到环境里面
[kiosk@foundation0 ~]$ rht-vmctl fullreset all #将除了classroom之外的所有虚拟机全部删除重建
即使你有kvm虚拟化的管理经验,也不建议你用kvm的相关操作来管理
[kiosk@foundation0 ~]$ su -
Password:
[root@foundation0 ~]# virsh destroy servera # 立即停止某个虚拟机
Domain servera destroyed
[root@foundation0 ~]# virsh list --all
Id Name State
----------------------------------------------------
8 classroom running
9 bastion running
10 workstation running
12 serverb running
13 serverc running
14 serverd running
- servera shut off
[root@foundation0 ~]# virsh start servera
Domain servera started
[root@foundation0 ~]# virsh list --all
Id Name State
----------------------------------------------------
8 classroom running
9 bastion running
10 workstation running
12 serverb running
13 serverc running
14 serverd running
15 servera running
墙裂建议用rht tools来管理这些虚拟机
rht-vmctl status all 查看所有虚拟机的状态
[kiosk@foundation0 ~]$ rht-vmctl status all
bastion RUNNING
workstation RUNNING
servera RUNNING
serverb RUNNING
serverc RUNNING
serverd RUNNING
[kiosk@foundation0 ~]$ rht-vmctl status classroom
classroom RUNNING
virt-manager命令可以打开图形化的KVM工具
[kiosk@foundation0 ~]$ rht-vmctl reset all
#相当于将所有的虚拟机都恢复快照
[kiosk@foundation0 ~]$ rht-vmctl poweroff all
#关闭所有的虚拟机
all不包含classroom
[kiosk@foundation0 ~]$ rht-vmctl status all
bastion DEFINED
workstation DEFINED
servera DEFINED
serverb DEFINED
serverc DEFINED
serverd DEFINED
[kiosk@foundation0 ~]$ rht-vmctl start all # 启动所有的虚拟机
[kiosk@foundation0 ~]$ rht-vmctl status all
bastion RUNNING
workstation RUNNING
servera RUNNING
serverb RUNNING
serverc RUNNING
serverd RUNNING
[kiosk@foundation0 ~]$ rht-vmctl poweroff servera
Are you sure you want to poweroff servera? (y/n) y
Powering off servera..
[kiosk@foundation0 ~]$ rht-vmctl status all
bastion RUNNING
workstation RUNNING
servera DEFINED
serverb RUNNING
serverc RUNNING
serverd RUNNING
#-----------------------------------------------------------------------------------------------------
教学环境的主机解析文件
[kiosk@foundation0 ~]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
### rht-vm-hosts file listing the entries to be appended to /etc/hosts
#
172.25.250.9 workstation.lab.example.com workstation
172.25.250.10 servera.lab.example.com servera
172.25.250.11 serverb.lab.example.com serverb
172.25.250.12 serverc.lab.example.com serverc
172.25.250.13 serverd.lab.example.com serverd
172.25.250.254 bastion.lab.example.com bastion
在rh294的环境里面classroom给我们提供了两个web网站,分别是content.example.com和materials.example.com
# 可以在虚拟机里的浏览器里直接访问
如何操作我们的RH294环境
我们后面的练习都是通过rh294的物理操作系统连接到workstation来操作
workstation是我们的ansible control节点
servera~d是我们的ansible managed节点
几乎所有的虚拟机的root密码都是redhat
除了root用户之外还有一个叫做student的特权用户,该用户的密码是student
classroom的root密码是Asimov
在rhel8系统,ansible会自动的根据你的平台的python版本去选择。
[student@workstation ~]$ yum list platform-python
如果你是rhel系统,需要使用订阅命令通过RHN连到红帽的软件仓库进行下载安装。
在教学环境里面,已经给我们集成了相关的软件仓库。
#Workstation是ansible的控制节点,我们只在控制节点安装ansible即可,被管理节点不需要安装Ansible!!!
[student@workstation ~]$ sudo yum -y install ansible
[sudo] password for student:
Last metadata expiration check: 0:49:06 ago on Wed 03 Jun 2020 09:34:52 PM
CST.
Package ansible-2.8.0-1.el8ae.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
# 查看控制节点的python版本,
# 切记:被管理主机必须要有python环境
[student@workstation ~]$ ansible --version
ansible 2.8.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/student/.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, Apr 3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Ansible安装练习(Lab环境的安装)
[kiosk@foundation0 ~]$ ssh workstation
[student@workstation ~]$ lab intro-install start # 其实这个脚本里删除了ansible,就是想让我们自己练习安装ansible
[student@workstation ~]$ sudo yum -y install ansible # 安装ansible
[student@workstation ~]$ ansible --version
ansible 2.8.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/student/.ansible/plugins/modules',
'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible # ansible模块的位置
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Apr 3 2019, 17:26:03) [GCC 8.2.1
20180905 (Red Hat 8.2.1-3)]
[student@workstation ~]$ lab intro-install finish
Cleaning up environment:
. Cleaning up................................................. SUCCESS
CentOS8安装ansible
[root@control-host ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
#确保internet的可达性
[root@control-host ~]# yum repolist
如果想在centos上安装ansible有两种方法,一种是源码包安时,还有一种是通过epel软件仓库安装
[root@control-host ~]# yum -y install epel-release
# 上面软件安装完成之后会自动帮你生成epel的软件仓库
[root@control-host ~]# yum repolist
# 安装ansible
[root@control-host ~]# yum list | grep ansible
-----------------------------------------------------
ansible.noarch 2.9.9-1.el8 epel
ansible-doc.noarch 2.9.9-1.el8 epel
ansible-freeipa.noarch 0.1.6-4.el8 AppStream
centos-release-ansible-29.noarch 1-2.el8 extras
-----------------------------------------------------
[root@control-host ~]# yum -y install ansible
[root@control-host ~]# ansible --version
---------------------------------------------------
ansible 2.9.9
config file = /etc/ansible/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, May 21 2019, 23:51:36) [GCC 8.2.1
20180905 (Red Hat 8.2.1-3)]
----------------------------------------------------------------