Ansible 自动化运维实战一篇搞定

一 abstract-简介

1.Logo:
在这里插入图片描述

2.介绍:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。

3.工作原理:
在这里插入图片描述

二 install-部署

一 dns resolve:
1.环境:
ansible服务器
ansible客户机

2 ansible服务器:
域名解析
[ansible-server]#vim /etc/hosts
192.168.159.133 ansible
192.168.159.135 host1
192.168.159.136 host2

3.ansible客户机:
无需配置(ip yum源)

二 install ansible:
ansible服务器
yum install -y epel-release 安装epel源
yum install -y ansible 检测部署是否完成

三 ssh-key(可选)

免密码ssh-key的方式
ssh-keygen
ssh-copy-id IP地址 推送公钥

四 ansible基础

1.定义主机清单:
vim /etc/ansible/hosts (注意,此处少一个主机)

2.测试连通性:
ansible localhost -m ping
(-m 指定模块。什么功能ping只是其中一个模块。还有shell,yum等等)

3.简洁输出:
ansible host1 -m ping -o

4.know_hosts
ansible host2 -m ping 失败了
ansible host2 -m ping -u root -k -o (增加用户名和密码选项)
去掉(yes/no)的询问:
1 vim /etc/ssh/ssh_config
2 StrictHostKeyChecking no
3 systemctl restart sshd
ansible host2 -m ping -u root -k -o (成功不提示)

5.错误示范:
ansible host4 -m ping -u root -k -o (失败,主机清单未标注主机)

6.注意ping和ssh:
ping:ICMP,网际消息管理协议
关闭host1主机的sshd进程,进行ping连通性测试。
再使用ansible对host1进行联通测试时,却是失败的。
结论ansible的ping,是探测ssh程序是否连接。不是icmp协议
ansible host1 -m ping -u root -k

五 Inventory -主机清单

含义:清查;存货清单;财产目录;主机清单

1 增加主机组:
vim /etc/ansible/hosts
[webserver]
host1
host2

[root@localhost ~]# ansible webserver -m ping -u root -k -o
SSH password:
输出提示
host3 | SUCCESS => {“changed”: false, “ping”: “pong”}
host1 | SUCCESS => {“changed”: false, “ping”: “pong”}
host4 | SUCCESS => {“changed”: false, “ping”: “pong”}
host2 | SUCCESS => {“changed”: false, “ping”: “pong”}

2 增加用户名 密码
vim /etc/ansible/hosts
[webserver]
host[1:4] ansible_ssh_user=‘root’ ansible_ssh_pass=‘666666’
(注意,密码可以自行更改)

ansible webservers -m ping -o
(免用户名和密码成功)

3.自定义主机列表:
vim hostlist

[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user=‘root’
ansible_ssh_pass=‘666666’ (注意自己的密码)

ansible -i hostlist dockers -m ping -o

六 Ad-Hoc-点对点模式

1.shell模块:
ansible webserver -m shell -a ‘hostname’ -o (获取主机名)

ansible webserver -m shell -a ‘hostname’ -o -f 2 (-f 2 指定线程数)

ansible host2 -m shell -a ‘yum -y install httpd’ -o (部署apache)

ansible host3 -m shell -a ‘uptime’ -o (查询系统负载)

2.复制模块:
ansible-doc copy (帮助)

3.用户模块:
创建用户
ansible webserver -m user -a ‘name=qianfeng state=present’

删除用户:
ansible webserver -m user -a ‘name=qianfeng state=absent’

修改密码:
1.生成加密密码
echo ‘777777’ | openssl passwd -1 -stdin
2.修改密码
ansible webserver -m user -a ‘name=qianfeng password=“ 1 1 1XVzsJMDr$5wI4oUaQ.emxap6s.N272.”’

修改shell:
ansible webserver -m user -a ‘name=qianfeng shell=/sbin/nologin append=yes’

4.软件包管理
ansible host1 -m yum -a ‘name="*" state=latest’ (升级所有包)

ansible host2 -m yum -a ‘name=“httpd” state=latest’ (安装apache)

5.服务模块:

ansible host2 -m service -a ‘name=httpd state=started’ (启动)

ansible host2 -m service -a ‘name=httpd state=started enabled=yes’ (开机启动)

ansible host2 -m service -a ‘name=httpd state=stopped’ (停止)

ansible host2 -m service -a ‘name=httpd state=restarted’ (重启)

ansible host2 -m service -a ‘name=httpd state=started enabled=no’ (开机禁止启动)

6.文件模块:
ansible host1 -m file -a ‘path=/tmp/88.txt mode=777 state=touch’ (创建文件)

7.收集模块:
ansible host3 -m setup (查询所有信息)

七 YAML-YAML Ain’t Markup Language-非标记语言

语法:
fruits:
- Apple
- Orange
- Strawberry
- Mango

.示例:
需求:
通过YAML编写一个简单的剧本,完成web的部署,配置,启动的全过程。

1.准备工作:
ansible all -m yum -a ‘name=httpd state=removed’ -o (清理环境)
yum install -y httpd (准备配置文件)
mkdir apache
cd apache
cp -rf /etc/httpd/conf/httpd.conf .
grep ‘^Listen’ httpd.conf

2.编写剧本:
vim apache.yaml

  • hosts: host2
    tasks:
    • name: install apache packages
      yum: name=httpd state=present
    • name: copy apache conf
      copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
    • name: ensure apache is running
      service: name=httpd state=started enabled=yes

3.测试:

ansible-playbook apache.yaml --syntax-check (检验语法)

ansible-playbook apache.yaml --list-tasks (列出任务)

ansible-playbook apache.yaml --list-hosts (列出主机)

ansible-playbook apache.yaml (执行)

http://192.168.2.142:8080/ (注意端口)

4.handlers

ansible-playbook apache.yaml
(再次执行,命令成功,但配置未生效,所以要增加处理程序。设置触发器)

ansible-playbook apache.yaml (再次执行,配置生效,触发成功)

八 Role-角色扮演

简介:roles则是在ansible中,playbooks的目录组织结构。
将代码或文件进行模块化,成为roles的文件目录组织结构,
易读,代码可重用,层次清晰。
目标:通过role远程部署nginx并配置

1.目录结构:
图示
在这里插入图片描述

准备:
mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo 1234 > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

2.编写任务
vim roles/nginx/tasks/main.yaml

3.准备配置文件
vim roles/nginx/templates/nginx.conf.j2

4.编写变量
vim roles/nginx/vars/main.yaml

5.编写处理程序
vim roles/nginx/handlers/main.yaml

6.编写剧本
vim roles/site.yaml

  • hosts: host4
    roles:
    • nginx

7.实施
cd roles
ansible-playbook site.yaml --syntax-check (测试)
ansible-playbook site.yaml (实施剧本)
验证host4
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值