15.RedHat认证-Ansible自动化运维(上)

15.RedHat认证-Ansible自动化运维(上)

RHCE8-RH294

Ansible 自动化(Ansible版本是2.8.2)

Ansible介绍

bash 复制代码
1.Ansible是什么?
Ansible是一个简单的强大的无代理的自动化运维工具(Ansible是自动化运维工具)

Ansible特点

bash 复制代码
简单的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优势

bash 复制代码
跨平台支持
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概念和架构

bash 复制代码
控制节点
在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

下载到本地后,右键通过VMworkStation 打开这个文件(RH294-SCSI.vmx)即可

bash 复制代码
rh294虚拟机的账号和密码
username:kiosk
password:redhat
username:root
password:Asimov
登陆环境时,选择kiosk用户登陆,不要用root登陆

classroom environment

bash 复制代码
在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的意思就是完全重置某个虚拟机(虚拟机的删除重建)
bash 复制代码
classroom启动之后,我们第一次加载环境,需要将其他的虚拟机文件全部加载到环境里面
[kiosk@foundation0 ~]$ rht-vmctl fullreset all   #将除了classroom之外的所有虚拟机全部删除重建
即使你有kvm虚拟化的管理经验,也不建议你用kvm的相关操作来管理
bash 复制代码
[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
bash 复制代码
墙裂建议用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工具

bash 复制代码
[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环境

bash 复制代码
我们后面的练习都是通过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
bash 复制代码
如果你是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环境的安装)

bash 复制代码
[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

bash 复制代码
[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)]
----------------------------------------------------------------
相关推荐
EMTime12 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王13 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
磊 子14 小时前
详细讲解一下epoll
linux·io·epoll·io多路复用
printfLILEI15 小时前
php中的类与对象以及反序列化
linux·开发语言·php
zyl8372115 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry15 小时前
MGRE实验
运维·服务器
叠叠乐16 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime16 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
xiaoye-duck17 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux