什么是Ansible
ansible是近年来越来越火的一款运维自动化工具,其主要功能是帮助运维实现IT工作的自动化、降低认为操作失误、提高业务自动化率、提升运维工作效率。
常用于软件部署自动化、配置自动化、管理自动化、系统化系统任务、持续集成等
常见的部署管理工具有Chef、Puppet、Ansible、SaltStack、Fabric
Ansible的安装
在阿里云官网中找到epel源
安装
然后执行以下命令进行替换
利用epel源查找ansible,然后进行安装
vim /etc/ansible/hosts
执行命令后发现不可执行,原因是没有进行免密
免密
在server1中生成密钥
将密钥发送给server2和server3
此时再执行命令,免密成功
all表示全部主机,用组名也可表示一个组,如:test就表示test组
Ansible的资源配置清单
在server1中创建新的用户
useradd devops
在devops用户中建立ansible目录
su - devops
mkdir ansible
此时使用普通用户身份不能调用ping命令去执行
使用-u(使用root身份)-k(向root用户询问密码)后可以使用普通用户调用ping命令
在server2和server3中创建devops用户,分别给用户设置密码
可以通过普通用户执行
但是只允许用一次
此时用ssh连接报错的主机即可继续使用
也可以通过root用普通用户的身份去使用
两者区别
普通用户的权限有限
将server1/etc/passwd拷贝到server2下的/tmp(-a 后加参数)
此时可以在server的/tmp看到passwd
也可在server1中使用命令直接查看server2中/tmp,此时也可以看到/tmp/passwd
当更改目录时会报错,是因为other用户对文件没有写权限
在普通用户的ansible目录下编写hosts文件
删除root用户下 /etc/ansible/hosts 的内容
编写ansible.cfg文件
在普通用户下生成免密
ssh-keygen
将密钥发送给server2和server3
ssh-copy-id 172.25.254.2
ssh-copy-id 172.25.254.3
ansible all -m ping命令测试成功表示发送成功
用普通用户身份可以使用但是root用户身份却不能使用,原因是因为远端主机没有配置sudo(-b表示用root用户身份)
在server2和server3中配置sudo
visudo
此时通过root用户也可以使用
省略-b
编写/ansible/ansible.cfg
此时就不需要加-b来执行
copy参数也可以
远程删除文件
将普通用户/ansible/的文件复制到root用户的/mnt下
cp -r /home/devops/ansible/ /mnt/
编写ansible.cfg
此时执行命令是以devops用户的身份执行而不是root
免密
将devops用户的密钥发送给server2和server3
ssh-copy-id devops@172.25.254.2
ssh-copy-id devops@172.25.254.3
cd /mnt/ansible
vim ansible.conf
-i 指定文件
vim ansible.conf
此时再用-i会覆盖
定义主机和组
中括号表示一个组,也表示一个范围
[webserver]
www[1:10].example.com
db-[a:f].example.com
定义主机变量
在playbook中使用是对主机进行个性化定制
[webserver]
web1 http_port=8080 maxRequestsPerChild=1024(不能在命令行中使用,只用于playbook)
定义组变量
[webserver]
server2
server3
[webserver:vars]
ntp_server=time1.aliyun.com
webserver组中的所有主机ntp_server值为time1.aliyun.com
定义组嵌套及组变量
[apache] [webserver:children]
server2 apache
[nginx] nginx
server3 [webserver:vars]
server4 ntp_server=time1.aliyun.com
组和组之间可以相互调用,并且可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持。
vim hosts
变量检索的位置
Inventory配置文件(默认/etc/ansible/hosts)
Playbook中vars定义的区域
Roles中vars目录下的文件
Roles同级目录group_vars和hosts_vars目录下的文件
匹配所有主机,all或*号功能相同
对多台主机或多个组同时执行,相互之间用冒号分割开即可
在test组但是不在prod组的主机,用感叹号表示
既在test组又在prod组
远程安装软件
ansible test -m dnf -a “name=httpd state=present” ##在server2上安装httpd
开启服务
ansible test -m service -a “name=httpd state=started”
ansible控制火墙
ansible test -m firewalld -a “service=http permanent=yes immediate=yes state=enabled”
curl 172.25.254.2(测试界面)
vim index.html
hello
ansible test -m copy -a “src=index.html dest=/var/www/html/” ##拷贝到server2
curl 172.25.254.2
在server2中,passwd的owner=root,group=root
ansible test -m file -a “dest=/tmp/passwd owner=root group=root” ##修改owner group
此时passwd的owner=root,group=root
ansible test -m file -a “dest=/tmp/passwd mode=600” ##修改权限
ansible test -m user -a “name=wxh” ##创建wxh用户
ansible test -m user -a “name=wxh state=absent” ##删除用户
远程在数据库中创建用户
先安装数据库
ansible test -m dnf -a “name=mariadb-server”
ansible test -m dnf -a “name=python3-PyMySQL.noarch”
开启数据库
ansible test -m service -a “name=mariadb state=started”
创建用户
ansible test -m mysql_user -a “name=wxh password=westos priv=’.:select’ state=present”