1.1Ansible的作用讲解
由于互联网的快速发展导致产品更新换代速度逐步增长,运维人员每天都要进行 大量的维护操作,按照传统方式进行维护使得工作效率低下。这时部署自动化运维就 可以尽可能安全、高效的完成这些工作。
Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署 变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。
Ansible 可以看作是一种基于模块进行工作的框架结构, 批量部署能力就是由Ansible 所运行的模块实现的。简而言之 Ansible 是基于“模块”完成各种“任务”的。其基本框架结构
![](https://i-blog.csdnimg.cn/blog_migrate/d3186cc7392d8985a09cae86d430b2dd.png)
1.2安装部署 Ansible 服务
1.2.1ansible环境前期准备
操作系统 配置 主机名 IP
CentOS7.9 2C2G node1 10.128.0.11
CentOS7.9 2C2G node2 10.128.0.12
CentOS7.9 2C2G node3 10.128.0.13
1.2.2修改主机名以及关闭防火墙关闭系统内核安全
#修改主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
#node1 node2 node3关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭内核安全机制
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
1.2.3安装epel-release
软件包它提供了一些额外的软件包,扩展了默认的软件包仓库。
#安装epel-release它提供了一些额外的软件包,扩展了默认的软件包仓库。
yum -y install epel-release
#安装ansible服务
yum -y install ansible
#安装完后查看ansible服务版本
ansible --version
1.2.4编写hosts以及更改配置文件
#hosts里添加组名 一下两种方式选择一种
vi /etc/ansible/hosts
[test]
10.128.0.12 ansible_ssh_user=root ansible_ssh_pass=123456
[ouppt]
10.128.0.13 ansible_ssh_user=root ansible_ssh_pass=123456
#另外一种编写hosts
[all]
ansible_ssh_user=root
ansible_ssh_port=22
ansible_ssh_pass=123456
# ansible_become=yes
# ansible_become_method=sudo
# ansible_become_user=root
# ansible_become_pass=
[test]
10.128.0.12
[ouppt]
10.128.0.13
#host_key_checking 选项取消注释,将被设置为 False,这将禁止 Ansible 在连接到主机时检查主机密钥。请确保在修改配置文件之前对其进行备份,并且只对你有权限修改的配置文件进行更改。
vi /etc/ansible/ansible.cfg
#取消注释
host_key_checking = False
#以组开始执行ping测试连通性
ansible all -m ping
ansible test -m ping
ansible ouppt -m ping
1.2.5创建用户删除用户
#创建用户删除用户
#创建用户
ansible test -m user -a "name=test01"
#删除用户
ansible test -m user -a 'name="test01" state=absent'
#查看当前是否有这个用户
ansible test -m shell -a 'id test01'
1.2.6创建组以及指定gip
#创建组 并指定gip
ansible test -m group -a 'name=mysql gid=307 system=yes'
#创建用户 并指定uip 加入到mysql组里面
ansible test -m user -a 'name=mysql uid=306 system=yes group=mysql'
#删除用户
ansible test -m user -a 'name=mysql uid=306 system=yes group=mysql state=absent'
ansible all -m shell -a 'id mysql'
1.2.7使用ansible创建crontab定时任务
#查看
ansible all -m shell -a 'crontab -l'
#创建周期任务
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp"'
#指定备注
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp" name="test job"'
#删除
ansible ouppt -m cron -a 'minute="*/10" job="/usr/bin/echo hellp" name="test job" state=absent'
1.2.8copy模块推送文件
echo hello > limit
ansible all -m copy -a 'src=/root/imit dest=/tmp/imit owner=root mode=400'
ansible all -m shell -a 'cat /tmp/imit'
#创建文件
ansible all -m user -a 'name=test01'
#重新设置文件归属
ansible test -m file -a 'owner=test01 mode=644 path=/tmp/imit'
1.2.9推送脚本并执行脚本
#推送脚本
vi /test.sh
#!/bin/bash
echo "$(date) $(hostname)"
chmod +x test.sh
#推送并执行脚本
ansible all -m script -a 'test.sh'
1.2.10使用ansible的yum安装服务
#使用yum安装httpd
ansible all -m yum -a 'name=httpd'
ansible all -m shell -a 'yum -y install httpd'
#操作服务(开机自启动,开启服务
ansible web -m service -a 'enabled=true name=httpd state=started'
#查看全部模块
ansible-doc -l
#类似于man手册 查看shell怎么使用
ansible-doc shell
yum模块
支持的参数:
name:安装包名称
state:
present:安装
latest:安装最新的
absent: 卸载软件
service模块
支持的参数:
enabled :设置开机启动。
name : 服务名称
state :四种状态
started:启动服务 stopped:停止服务
restarted:重启服务 reloaded:重载配置
user模块
支持的参数:
name:指定用户名
group:指定基本组
state:设置帐号状态,不指定为创建,指定值为absent表示删除
system:当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid: 指定用户的uid
password: 指定用户密码
group模块
支持的参数:
gid:设置组ID
name:组的名称
state:组的状态,默认为创建,设置值为absent为删除
system:值为yes,表示创建为系统组
1.3编写playbook
1.3.1编写playbook
#整合编写
vi test.yaml
---
- name: test play
hosts: all
tasks:
- name: install httpd
yum: name=httpd
- name: start httpd
service: name=httpd state=started
#执行playbook文件
ansible-playbook test.yaml
#多行编写
vi test.yaml
---
- name: test play
hosts: all
tasks:
- name: install httpd
yum:
name: httpd
- name: start httpd
service:
name: httpd
state: started
#执行playbook文件
ansible-playbook test.yaml
1.3.2playbook添加变量
#添加变量的好处就是以后想更换安装的东西只需要更换变量后面的内容
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg: httpd
tasks:
- name: install {{ pkg }}
yum:
name: "{{ pkg }}"
- name: start httpd
service:
name: httpd
state: started
#执行playbook文件
ansible-playbook test.yaml
1.3.3playbook循环编写
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg: httpd
tasks:
- name: install pkg
yum:
name: "{{ item }}"
loop:
- httpd
- php
- telnet
- tree
- name: start httpd
service:
name: httpd
state: started
#或者使用变量循环
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg:
- httpd
- php
- telnet
- tree
tasks:
- name: install pkg
yum:
name: "{{ item }}"
loop: "{{ pkg }}"
- name: start httpd
service:
name: httpd
state: started
#执行playbook文件
ansible-playbook test.yaml
1.3.4playbook条件判断编写
#先关闭httpd
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg:
- httpd
- php
- telnet
- tree
tasks:
- name: install pkg
yum:
name: "{{ item }}"
loop: "{{ pkg }}"
- name: stop httpd
service:
name: httpd
state: stopped
#执行playbook文件
ansible-playbook test.yaml
ansible db -m setup | grep fqdn
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg:
- httpd
- php
- telnet
- tree
tasks:
- name: install pkg
yum:
name: "{{ item }}"
loop: "{{ pkg }}"
- name: stop httpd
service:
name: httpd
state: stopped
- name: start httpd
service:
name: httpd
state: started
when: ansible_fqdn == "node3"
#执行playbook文件
ansible-playbook test.yaml
1.3.5handlers触发器
#node2
scp /etc/httpd/conf/httpd.conf 10.128.0.13:/root/
#node1
vi httpd.conf
42:修改为8080
##修改配置文件就会触发触发器,并重启httpd服务
vi test.yaml
---
- name: test play
hosts: all
vars:
pkg:
- httpd
- php
- telnet
- tree
tasks:
- name: install pkg
yum:
name: "{{ item }}"
loop: "{{ pkg }}"
- name: stop httpd
service:
name: httpd
state: stopped
- name: start httpd
service:
name: httpd
state: started
when: ansible_fqdn == "node3"
- name: test handlers
hosts: all
tasks:
- name: copy httpd config
copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/httpd.conf
notify:
- restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
#执行playbook文件
ansible-playbook test.yaml