1. Ansible是什么
Ansible是一款IT自动化工具。主要应用场景有配置系统、软件部署、持续发布及不停服平滑滚动更新的高级任务编排。
Ansible本身非常简单易用,同时注重安全和可靠性,以最小化变动为特色,使用OpenSSH实现数据传输 ( 如果有需要的话也可以使用其它传输模式或者pull模式 ),其语言设计非常利于人类阅读,即使是针对不刚接触Ansible的新手来讲亦是如此。
Ansible不使用C/S架构管理节点,即没有Agent。这样的架构使得Ansible不会存在如何升级远程Agent管理进程或者因为没有安装Agent而无法管理系统。 因为OpenSSH是非常流行的开源组件,安全问题也非常少 。 Ansible的去中心化管理方式深受业内认可, 即它只依赖OS的Key
认证访问远程主机。 如需, Ansible可以便捷接入Kerberos, LDAP或者其它认证系统。
2. 环境准备
3. SSH免密钥登陆
Ansible通过OpenSSH连接到节点,把模块动作推送到节点以完成任务。配置私钥实现免密码登录,可以提高服务器管理效率,并保障信息安全。
了解更多可阅
--生成SSH密钥
[root@104 ~]# ssh-keygen -t rsa -b 4096
--将公钥复制到远程主机
[root@104 ~]# ssh-copy-id root@192.168.101.105
--测试登录
[root@104 ~]# ssh 192.168.101.105
4. Ansible安装及使用
4.1 Ansible安装
--Centos7官方YUM源已经不维护,使用阿里源
[root@104 ~]# rm -rf /etc/yum.repos.d/*
[root@104 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@104 ~]# yum -y install epel-release.noarch
[root@104 ~]# yum -y install ansible
4.2 主机清单
主机清单用于列出Ansible要管理的主机。可以使用IP地址或主机名。
默认主机清单文件位于/etc/ansible/hosts
。
[root@104 ~]# cat /etc/ansible/hosts
[GG] --创建主机组GG
192.168.101.105 --添加主机到主机组GG
[GGBoy] --创建主机组GGBoy
192.168.[0:1].[0:254] --把范围内主机添加到主机组GGBoy
server[a:z] --把范围内主机添加到主机组GGBoy
4.3 playbook剧本
Ansible Playbook是用YAML编写的自动化剧本,用于定义和执行一系列任务,以便实现可重复的配置管理和应用程序部署。
[root@104 ~]# cat 105.yaml
---
- hosts: GG --指定GG组的主机为执行任务主机,如果填写All即/etc/ansible/hosts文件内所有主机
tasks:
- name: 创建 test.txt 文件 --任务名称
shell: touch /root/test.txt --模块,这里使用shell模块执行创建文件动作
[root@104 ~]# ansible-playbook 105.yaml --ansible-playbook命令执行Playbook剧本
TASK [Gathering Facts]
Ansible在执行Playbook时,会自动运行一个名为setup
的模块,收集关于目标主机的一系列系统信息,可以根据收集情况判断主机在线情况。
TASK [创建test.txt文件]
正在执行Playbook据本里定义的TASK任务,changed表示Ansible在目标主机上进行了更改,意味着创建文件动作执行成功。
PLAY RECAP
剧本执行过程总结
5. become账号提权
生产环境中,为了安全因素,我们不会直接使用root来登录到Server ,确实有需要的情况下,我们再使用sudo切换到root权限。生产环境中的机器也不会开放权限允许root直接登录,所以通过become
参数在执行Playbook剧本的过程中提权,使需要root权限才能执行的操作能够完成。
--106服务器yunwei账号为普通用户,已配置sudo
--将公钥复制到远程主机192.168.101.106 yunwei账号的authorized_keys文件中
[root@104 ~]# ssh-copy-id yunwei@192.168.101.106
因为Ansible默认是通root账号进行登录,通过root是登录不上的,所以需要通过在主机清单中配置以使用yunwei账号进行登录。
[root@104 ~]# cat /etc/ansible/hosts
[GG]
192.168.101.105
[GGBoy]
192.168.[0:1].[0:254]
server[a:z]
[AA]
192.168.101.106 ansible_user=yunwei --ansible_user是个变量,定义Ansible执行Playbook时所登录的用户名
Playbook剧本添加启用提权功能和提权用户配置。
[root@104 ~]# cat 106.yml
---
- hosts: AA
become: yes --启用提权功能
become_user: root --提权为root账号运行
tasks:
- name: 创建文件
shell: touch /root/1.txt
[root@104 ~]# ansible-playbook --ask-become 106.yml --ask-become添加执行参数