ansibile 自动化运维实战

发布时间:2024年01月04日

?1、简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。无客户端。我们要学一些Ansible的安装和一些基本概念,然后我们会开始研究一些真正有意思的东西 – playbook,配置管理,部署以及语法编排.我们将会学习如何使用/usr/bin/ansible执行ad-hoc并行命令,我们还会学习ansible的核心有什么样的模块可供使用.当然以后你也可以写你自己的模块,

命令执行过程:1、加载自己的配置文件,默认/etc/ansible/ansible.cfg。2、查找对应的主机配置文件,找到要执行的主机或者组。3、加载自己对应的模块文件,如command。4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器。5、对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件。6、给文件+x执行。7、执行并返回结果。8、删除临时py文件,sleep 0 退出。

工作原理:

2.install-部署

1 环境准备

ansible服务器:192.168.220.64

ansible客户机:192.168.220.84、192.168.220.82、192.168.220.83、192.168.220.95

ansible服务器域名解析:

vim /etc/hosts

192.168.220.64 ansible

?192.168.220.84 host1

192.168.220.82 host2

192.168.220.83 host3

192.168.220.95 host4

?ansible仅需配置YUM源即可

2 安装 ansible

ansilble服务器:

rm  -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y ansible

?检测部署是否完成

rpm -ql ansible????????列出所有文件

rpm -qc ansible????????查看配置文件

ansible --help????????查看ansible帮助

ansible-doc -l????????看所有模块(A10,华为,docker,EC2,aws等等广大厂商设备)

ansible-doc -s yum????????看yum模块,了解其功能

3.ssh-key(选做,本实验数据未做)

免密码ssh-key的方式。

ssh-keygen
ssh-copy-id IP地址

4.ansible基础

1.定义主机清单

vim /etc/ansible/hosts

host1
host2
host3

注意此处少一个主机。请留意

2.测试连通性

ansible ? localhost ? -m ping

-m 指定模块。
ping只是其中一个模块。还有shell,yum等等?

3.简洁输出

ansible host1 -m ping  -o 

4.know_hosts

ansible host2 -m ping?        #ping失败

增加用户名和密码选项

ansible host2 -m ping -u root -k -o 

?去掉(yes/no)的询问

vim /etc/ssh/ssh_config

StrictHostKeyChecking no

systemctl restart sshd

ansible host2 -m ping -u root -k -o     #成功不提示

5.错误示范

ansible host4 -m ping -u root -k -o?

?失败,主机清单未标注主机。需要增加主机

6.请注意ping和ssh

关闭host1主机的sshd进程,进行ping连通性测试。再使用ansible对host1进行联通测试时,却是失败的。结论ansible是通过ssh程序连接。

5.Inventory -主机清单

1 增加主机组

vim /etc/ansible/hosts

[webserver]
host1
host2
host3
host4?

webserver自己取名即可

ansible webserver  -m ping  -o

2 增加用户名 密码

vim /etc/ansible/hosts

[webserver]
host[1:4] ansible_ssh_user='root' ansible_ssh_pass='666666'

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

?主机和主机的用户名密码不同。如何设置?

?[webservers]
host1 ansible_ssh_user='root' ansible_ssh_pass='777777'
host[2:4] ansible_ssh_user='root' ansible_ssh_pass='666666'

3 增加端口

将host1的sshd程序端口修改为2222

vim /etc/ssh/sshd_config

?Port 2222

systemctl restart sshd
ansible webservers -m ping -o    #失败,因为默认端口已更改
vim /etc/ansible/hosts

[webserver]
host1 ansible_ssh_user='root' ansible_ssh_pass='777777' ansible_ssh_port='2222'
host[2:4] ansible_ssh_user='root' ansible_ssh_pass='666666'?

请将用户名密码和端口回复原状

4 组:变量

ansible内部变量可以帮助我们简化主机清单的设置

vim /etc/ansible/hosts

?[webserver]
host[1:4]
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

?常用变量

5 子分组

将不同的分组进行组合

vim /etc/ansible/hosts

?[apache]
host[1:2]
[nginx]
host[3:4]
[webserver:children]
apache
nginx
[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

6 自定义主机列表

vim hostlist

?[dockers]
host1
host2
[dockers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='666666'

ansible -i  hostlist dockers  -m ping  -o

6.Ad-Hoc-点对点模式

简介:临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。

1.shell模块

帮助:ansible-doc 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

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'

?-a 属性 src是source dest:destination是目标路径

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'    #如果文件有多份,可以进行备份。

3.用户模块

帮助:ansible-doc user

创建用户

ansible webserver -m user -a 'name=gll state=present'

修改密码

1、生成加密密码

echo '123456' | openssl passwd -1 -stdin

?$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272.

ansible webserver -m user -a 'name=gll password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."'

修改shell

ansible webserver -m user -a 'name=gjj shell=/sbin/nologin append=yes'

删除用户

ansible webserver -m user -a 'name=qianfeng state=absent'

4.软件包管理

帮助:ansible-doc yum

ansible host1 -m yum -a 'name="*" state=latest'    #升级所有包
ansible host2 -m yum -a 'name="httpd" state=latest'    #安装apache

5.服务模块

帮助:ansible-doc service

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-doc file

ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch'    #创建文件
ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory'

7.收集模块

帮助:ansible-doc setup

ansible host3 -m setup?查询所有信息

ansible host3 -m setup -a 'filter=ansible_all_ipv4_addresses'

文章来源:https://blog.csdn.net/a1608281475/article/details/135371121
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。