ansible自动化运维平台部署
目录
一、安装ansible
二、验证ansible是否安装成功 ansible -m ping group1
三、ansible语法格式
四、ansible常用模块
五、playbook(剧本)介绍
#安装ansible有源码安装和yum源安装
yum install ansible -y
#备份ansible配置文件
cd /etc/ansible/hosts && cp hosts hosts.default
#修改hosts文件,ansible在执行任务的时候,会去读取该文件
vim /etc/ansible/hosts
[group1]
192.168.161.80
192.168.161.90
192.168.161.100
#ansible命令语法
ansible 机器 -m 模块 -a ‘模块参数’
#查看ansible现有的模块
ansible-doc -l
#给80机器设置主机名
ansible 192.168.161.80 -m hostname -a "name=tyschool"
4.1 hostname模块:修改主机名
ansible 192.168.161.80 -m hostname -a "name=node1"
4.2 file模块:远程主机上文件操作
参数说明:
group:定义文件/目录的属组
mode:定义文件/目录的权限(注意:文件权限为4位数,第一位为uid/gid,后面表示ugo权限)
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state: (link|hard|touch|absent)
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
directory:创建的是目录
实操案例:
1、创建文件
ansible group1 -m file -a "path=/tmp/ansible.txt state=touch"
2、文件删除
ansible group1 -m file -a "path=/tmp/ansible.txt state=absent"
3、文件链接
3.1 软连接
ansible group1 -m file -a "src=/tmp/ansible.txt path=/tmp/ansible.ggg state=link"
3.2 硬链接
ansible group1 -m file -a "src=/tmp/ansble.txt path=/tmp/ansible_hard state=hard"
4、修改用户属主和属组,权限
ansible 192.168.161.80 -m file -a "path=/tmp/ansible.txt owner=bob group=bob mode=0600"
5、创建目录
ansible group1 -m file -a "path=/tmp/ansible state=directory"
6.目录删除
ansible group1 -m file -a "path=/tmp/ansible state=absent"
7、递归
recurse :yes /no
4.3 copy模块:本地文件拷贝到目标机器上
常用参数说明:
src :文件源路径
dest :目标路径
content :指定文件的内容复制到远程机器文件内
force : 强制 yes/no
backup : 是否备份有冲突的源文件 yes/no
checksum:拷贝完整性校验
owner : 目标文件所有者
group :目标文件所属组
mode :目标文件权限
案例:
1、拷贝本地文件到业务机器
ansible group1 -m copy -a "src=/tmp/huangshi.txt dest=/tmp/"
2、拷贝目录
ansible group1 -m copy -a "src=/etc/yum.repos.d/ dest=/tmp" #加/,是拷贝的目录下的文件
ansible group1 -m copy -a "src=/etc/yum.repos.d dest=/tmp" #拷贝的是文件夹
4.4 fetch模块(节点文件拷贝到本地)
ansible group1 -m fetch -a "src=/etc/passwd dest=/tmp" #管理机器目录中创建节点机器的ip目录中存放
注意:因为业务节点有多个,当从业务节点获取到文件到管理节点后,会在目的目录生成业务机器ip目录,业务节点对应的文件存放在该ip目录中
4.5 user模块:主要用于操作系统用户、组、权限、密码等操作
常用参数:
name
password 指定密码,密码必须为密文 (注意:在终端先生成密钥对:echo 123456 |openssl passwd -1 -stdin)
state=absent|present 删除或创建
system=yes|no 是否为系统用户
shell="" 指定登录shell
group= 用户组
create_home=yes|no 是否建立家目录
remove=yes|no 删除家目录
案例:
ansible group1 -m user -a "name=tianxian password=$1$1iBVoy.z$EB79SOJQ/u3HM.d98q7vV/ uid=4423 create_home=yes shell=/bin/bash state=present"
4.6 group模块 :创建组
案例:ansible group1 -m group -a "name=admin system=yes state=present"
4.7 cron模块:给节点机器管理周期性的时间任务
参数:
name 计划任务名称 (为了删除的时候方便去指定)
user 执行计划任务用户
job 计划任务命令
minute
hour
day
month
week
state=absent 删除计划任务
注意:不指定user的话,默认就是root(你在管理端执行创建的用户)
案例:
ansible group1 -m cron -a "name=test user=root job='echo haha >/tmp/test.txt' minute=12 hour=23"
4.8 yum_repository模块:yum_repository模块用于配置yum仓库
name 仓库名 name.repo
description 描述
baseurl 下载路径
gpgcheck=1|0
enabled=yes|no
state=absent 删除源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
案例:给业务机增加清华园的yum
ansible group1 -m yum_repository -a "name=qinghua baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ description='qinghua yum repo' gpgcheck=0 enabled=yes"
4.9 yum模块:用来使用yum命令实现软件包的安装和卸载,只能安装单个包, 安装多个包需要使用playbook
参数
name 需要安装软件包的名称
list=installd,updates,available repos 列出已经安装、需要更新、可获得、和yum源
state=absent/removed installed present latest 删除,移除、安装确认,安装最新版
ansible group1 -m yum -a "name=vsftpd state=latest"
4.10 service模块:用于控制服务的启动、关闭、开机自启动等
参数:
name 服务名称
state=reloaded restarted started stopped 服务管理
enabled yes|no 开机是否启动
案例:设置vsftp开机自启动并启动服务
ansible group1 -m service -a "name=vsftpd state=started enabled=yes"
4.11 script模块:用于在远程机器上执行本地脚本
备注:只有一个参数,指定脚本路径,不用给权限
案例:ansible group1 -m script -a "/root/haha.sh"
4.12 ansible command 和shell模块
两个模块都欧式用于执行Linux命令
shell模块和command模块差不多,但是command模块不能执行一些类似$HOME < > |等符号,但是shell可以
shell模块和command模块都只只能执行非交互式命令交互式命令无法执行,例如:vim
4.13 setup模块:收集远程主机的基本信息(操作系统类型,主机名、ip、cpu、内存信息等)
常用的过滤条件:
ansible_all_ipv4_address:显示ipv4的信息
ansible_devices:显示磁盘设备信息
ansible_distribution_major_version:显示系统主版本
ansible_distribution_version:显示系统版本
ansible_machine:显示系统类型
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示系统可用内存
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_processor:显示cpu个数
ansible_mounts:显示系统磁盘挂载情况
ansible用来配置,部署、和管理控制节点的剧本
使用格式为yaml格式,包括elk、docker等都会使用yaml格式
简单来说:playbook是ansible格式的脚本,将需要执行的操作按照ansible的编程语法,放到文件中执行
替代方案:1、完全可以使用shell脚本来替代playbook,shell中使用ansible模块
2、使用ansible+shell脚本,使用script模块
yaml格式规则
1、文件的第一行必须以'---'开始,表示这是yaml文件的开始,...表示结束,单个文档可以省略
2、#号为注释
3、列表中所有成员都开始于相同的缩进级别,并且使用一个- 作为开头(一个横杠和一个空格)
4、一个字典是由一个简单的键:值的形式组成(这个冒号后面必须是一个空格)
子集两个空格缩进
5、注意:写yaml文件不要使用tab键,都使用空格
yaml数据结构
1、标量--》相当于数据类型
2、序列--》数组和列表 - + 单个空格表示单个列表项 []表示一组数据
3、键值对--》相当于map :+ 空格表示单个键值对
playbook批量安装Apache过程分析:
1.安装Apache并启动
需要模块:1、yum模块 2、service模块来启动 3、copy模块来把本地修改好的Apache配置文件复制过去
2、创建过程
1、创建playbook脚本目录
2、修改好Apache配置文件
3、编写playbook脚本
playbook基础组件:
hosts:任务执行的远程目标主机
remote_user:在远程主机上执行任务的用户
tasks:需要在远程主机上执行的任务列表
variables:变量,变量可以在hosts中定义,可以在playbook中定义,也可以直接使用setup模块获取变量内容
handlers:任务处理器,当满足某些条件时才会触发任务操作
templates:使用模块语言的文本文件
tags:playbook中一般有多个任务,我们可以给每个任务打上标签,当我们只需执行某个任务时,执行的时候
ansible-playbook install_nginx -t tag3
那么,将只会执行第三个任务
如果一个hosts执行任务失败,整个tasks都会做回滚,重新修改playbook,重新执行即可
测试playbook脚本是否有错误:
ansible-playbook -C apache_init.yml
andlers也是一些task的列表,和一般的task并没有什么区别。
是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行
不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次
playbook案例一:重启sshd服务
#restart sshd
--- #开始
- hosts: group1 #指定hosts业务机
remote_user: root #指定远程操作用户
tasks: #任务列表
- name: restart sshd
command: 'systemctl restart sshd' #使用的模块
#备注:一定要注意对齐方式
案例二:安装Apache服务并初始化
---
#install and init apache
#date:2020-08-13
- hosts: group1
remote_user: root
tasks:
#第一步:创建运行Apache服务的用户
- name: create user for httpd
user: name=tyschool state=present
#安装Apache
- name: yum install httpd
yum: name=httpd state=latest
#复制配置文件
- name: copy httpd configure
copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
#启动服务
- name: start httpd
service: name=httpd state=started enabled=yes
案例三:对Apache剧本进行进一步加深,添加notice和handler
---
#install and init apache
#date:2020-08-13
- hosts: group1
remote_user: root
tasks:
- name: create user for httpd
user: name=tyschool state=present
- name: yum install httpd
yum: name=httpd state=latest
- name: copy httpd configure
copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
notify: #当Apache配置文件修改时,会触发handler,执行handler任务
- restart httpd
- name: start httpd
service: name=httpd state=started enabled=yes
handlers:
- name: restart httpd
service: name=httpd state=restarted