Ansible
自动化运维屁平台
运维自动化平台介绍
运维⾃动化平台是由管理机器和业务机器组成的:
管理机器:任务定制以及发布
业务机器:接受任务并执⾏
运维⾃动化平台的优势:
-
⼀次性任务定制:任务⼀次性发给所有的业务机器
-
接收任务执⾏时间:任务主机并发完成任务,节省部署的时间
-
错误率低:避免重复,保证⼀次任务定制准确即可
常⻅的⾃动化运维⼯具
- Puppet
- SaltStack
- Ansible
Puppet、Ansible、SaltStack对⽐
工具 | 语言 | 架构 | 协议 |
---|---|---|---|
Puppet | Ruby | C/S | HTTP |
Ansible | Python | ⽆Client | SSH |
Saltstack | Python | C/S(可无Client) | SSH/ZMQ/RAET |
Ansible介绍
Ansible 是由Python开发的⾃动化运维⼯具,集合了众多运维⼯具(Pupppet,chef,fabric, func)的优点,实现了匹配系统配置、批量程序部署、批量运⾏命令等功能。Ansible是基于模块⼯作的,本身并没有批量部署的能⼒,真正具有批量部署的是Ansible所运⾏的模块,Ansible只是 提供了框架。
Ansible架构
1.链接插件Connection Plugins:⽤来链接主机,⽤来链接被管理端
2.核⼼模块Core module:链接主机实现操作,他依赖于具体的模块来做具体的事情
3.⾃定义模块Custom module:根据⾃定义的需求编写具体的模块
4.插件Plugins:完成模块功能的补充
5.剧本Playbook:ansible的配置⽂件,将多个任务定义在剧本⾥,由ansible⾃动执⾏
6.主机清单:Inventory定义ansible需要操作主机的范围
Ansible优点
1.不需要单独安装客户端,也不需要启动任何服务
2.Ansible是Python中的⼀套完整的⾃动化执⾏任务模块
3.Ansible Playbook采⽤yaml配置,对于⾃动化任务执⾏⼀⽬了然(简单)
4.Ansible模块较多,对于⾃动化的场景⽀持⽐较丰富
Ansible作用
ansible能做什么?
批量命令⾏执⾏
批量安装服务
批量配置同步
批量任务执⾏
批量代码部署
使用ansible有什么好处?
提⾼⼯作效率
提⾼⼯作精准度
减少维护的成本
减少重复性⼯作
Ansible⼯作原理
1.⽤户登录管理机器,通过ansible剧本或者当⾏命令针对业务机器组或者单个机器部署任务
2.管理机器读取⽤户的部署任务,根据invenroty⽂件中定义的业务组机器查找对应的IP地址
3.管理机下发任务,管理机通过ssh免密链接业务机器,下发给业务机器
4.业务机器开始执⾏任务
5.业务机器将执⾏的结果发送给ansible管理机
反馈字体颜⾊
绿⾊ 为发⽣变化
⻩⾊ 更改⽣效
红⾊ 执⾏错误
紫⾊ 警告
Ansible⾃动化运维平台部署
自动化部署前准备
1.服务器准备
主机名称 | IP |
---|---|
master | 10.0.0.143 |
slave1 | 10.0.0.139 |
slave2 | 10.0.0.111 |
2.主机以及主机名互相绑定
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.143 master #添加IP和主机名的映射关系
10.0.0.139 slave1
10.0.0.111 slave2
3.时间同步
每台机器都要时间同步
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 安装chrony时间同步服务,同步时间
yum install -y chrony # 安装时间同步工具
vim /etcchrony.conf # 修改要同步的时间同步服务器地址
# 查看
grep -E "^server" /etc/chrony.conf
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
server ntp4.aliyun.com
# 启动chrony
systemctl start chronyd
# 同步
chronyc sources -v
210 Number of sources = 4
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ ntp6.flashdance.cx 2 6 77 90 -51ms[ -60ms] +/- 185ms
^* tock.ntp.infomaniak.ch 1 6 177 27 +34ms[ +25ms] +/- 142ms
^? ntp.wdc1.us.leaseweb.net 0 6 0 - +0ns[ +0ns] +/- 0ns
^+ undefined.hostname.local> 2 6 177 30 +4931us[+4931us] +/- 133ms
# 验证
date # 命令
Mon Mar 1 16:46:30 CST 2021
#查看时间详情
timedatectl # 命令
Local time: Mon 2021-03-01 16:46:46 CST
Universal time: Mon 2021-03-01 08:46:46 UTC
RTC time: Mon 2021-03-01 08:46:47
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
4.配置ssh免密
# 交互式
ssh-keygen
ssh-copy-id root@10.0.0.139
# 非交互式
1.rm -rf ~/.ssh/id_dsa ~/.ssh/id_dsa.pub # 清除之前的密钥对⼉
2.ssh-keygen -t dsa -f ~/.ssh/id_dsa -P '密码' #免交互创建sshkey
# -t 指定秘钥类型 dsa rsa
# -f 指定私钥的位置
# -P 命令⾏中指定密码
3.sshpass -p123 ssh-copy-id -o StrictHostKeyChecking=no slave1
安装Ansible
1.下载epel源
epel源下载网站:https://developer.aliyun.com/mirror/epel?spm=a2c6h.13651102.0.0.3e221b11fAOZAY
yum安装
# yum安装
yum install -y ansible
ansible --version # 查看ansible版本
源码安装
下载对应的ansible软件包:https://releases.ansible.com/ansible/
tar -xf ansible-2.8.3.tar.gz
mv ansible-2.8.3 /opt/ansible # 解压
cd /opt/ansible
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 安装pip
mkdir /etc/ansible/ -p
ln -s /opt/ansible/bin/* /usr/bin/ # 创建命令软连接
cp /opt/ansible/examples/* /etc/ansible/
ansible --version # 查看ansible版本
配置主机清单
vim /etc/ansible/hosts
# 为主机分组,分组的目的是不同组的主机执行不同的命令
[web]
10.0.0.139
10.0.0.111
# 如果主机IP是连续的还可以这样写
10.0.0.[100:200]
常⽤模块
https://docs.ansible.com/ansible/latest/index.html
Ansible 是基于模块⼉⼯作的,本身没有批量部署的能⼒,真正具有批量部署的是Ansible所运⾏的 模块,Ansible只是提供⼀种框架
Ansible ⽀持的模块⼉⾮常的多,我们并不需要把每个模块⼉都记住,⽽只需要熟悉⼀些常⻅的模块⼉,其他的模块⼉在需要⽤到的时候再去查询官⽅⽂档即可。
Ansible命令格式
ansible 操作机器的IP或组名 -m 模块⼉名称 -a '模块参数'
基本格式为:ansible 操作的机器名或者组名 -m 模块⼉名 -a '参数1=值1 参数2=值2'
查看所有⽀持的模块⼉
ansible-doc -l # 查看所有的模块
ansible模块使用
1.command模块
默认的模块,可以运行远程范围内所有的shell命令