Ansible入门

简介

Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。
Ansible 用 python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt,Puppet,Chef等),但它们各有优劣。
Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于,如果需要的话,你可以在不止一个地方控制你的整个基础架构。

特性

  1. Agentless:不需要在被管理节点上安装客户端,只要有sshd即可
  2. Serverless:在服务端不需要启动任何服务,只需要执行命令就行
  3. Modules in any language:基于模块工作,可以使用任意语言开发ansible模块
  4. YAML, not code:使用yaml语言定制playbook
  5. SSH by default:默认使用ssh控制各节点

基本组件

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):把需要完成的多个任务定义在剧本中
  • 主机组(Host Inventory):
  • ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作

前提条件

设置好各个节点的IP及主机名,并写入/etc/hosts中(每个节点完成)

创建用户,用于管理ansible(每个节点完成)

权限委派

  • 创建用户:useradd admin
  • 设置密码:passwd admin
  • 设置admin的权限,让他能够的到root权限
  • 修改/etc/sudoers
  • vi /etc/sudoers
  • 在root ALL=(ALL) ALL下面添加
  • admin ALL=(ALL) NOPASSWD: ALL
  • 冒号后面有空格,NOPASSWD表示执行命令时不需要密码,当然将他改为指定命令也是可以的

在主控端上生成ssh密钥,用于免密连接

  • 首先切换到admin
  • su - admin(一定要加“-”,否则后面可能报错)
  • ssh-keygen
  • 将密钥拷贝到其他节点
  • ssh-copy-id 192.168.1.1

根据需要关闭防火墙或打开某些端口(所有节点)

  • systemctl disable firewalld
  • systemctl stop firewalld
  • vi /etc/sysconfig/selinux
  • 将SELINUX=enabled改为SELINUX=permissive
  • seteforce 0

创建本地yum源(主控端完成)

  • yum install -y httpd
  • mkdir /var/www/html/pub
  • mkdir /var/www/html/ansible
  • 创建/isos目录,用于存放iso文件
  • mkdir /isos
  • 通过winSCP或xftp将iso文件传到主控端/isos中
  • 将iso挂载到/var/www/html/pub和/var/www/html/ansible中,并写入/etc/fstab
  • /iso/rhel-8.0-x86_64-dvd.sio /var/www/html/pub iso9669 defaults 0 0
  • /iso/rhel-8.0-x86_64-additional-20190521.iso /var/www/html/ansible iso9660 defaults 0 0
  • mount -a

修改yum仓库

vi /etc/yum.repos.d/dvd.repo

   `[dvd]`

   `name=BaseOS`

   `baseurl=http://192.168.7.1/pub/BaseOS`

   `gpgcheck=0`

   

   `[AppStream]`

   `name=Appstream`

   `baseurl=http://192.168.7.1/pub/AppStream`

   `gpgcheck=0`

   

   `[ansible]`

   `name=ansible`

   `baseurl=http://192.168.7.1/ansible/ansible-2.8-for-rhel-8-x86_64-rpms`

   `gpgcheck=0`



   yum clean all

   yum makecache

将/etc/yum.repos.d/dvd.repo 复制到其他各个节点

安装与配置

安装并查看版本
yum install -y ansible
ansible –version

配置ansible
su - admin
sudo vi /etc/ansible/ansible.cfg
更改以下内容

`[defaults]`  
`inventory = /home/admin/ansible/ inventory(可自定义)`  
`remote_user = admin`  
`host_key_checking = False`  
`[privilege_escalation]`  
`become=True`  
`become_method=sudo`  
`become_user=root`  
`become_ask_pass=False`  

mkdir /home/admin/ansible
touch /home/admin/ansible/inventory

这个文件存放的是你所有的节点,可以分组
vi /home/admin/ansible/inventory

`[webservers]`  
`192.168.7.1`  
`192.168.7.2`  
`[prod]`  
`192.168.7.1`  
`192.168.7.3`  
`[it:children](这个表示prod和webservers是it的子组,it包含这两个组的所有)`  
`prod`  
`webservers`  

ansible all –list-hosts
下面执行的是所有节点执行ping,如果返回bong则表示成功,all是缺省值,表示所有节点,-m 后面跟模块名, -a 后面跟参数,用单引号括起来
ansible all -m ping
下面的是创建用户
ansible all -m command -a ‘useradd user10’

用法

查看所有模块
ansible-doc -l

根据需要查找模块
ansible-doc -l | grep yum

查看模块文档
ansible-doc yum

上面以命令的方式执行叫ad-hoc
下面介绍以文件的方式执行:playbook
一定要注意格式
vim createuser.yml

写好文件后先检测语法,但这条命令只能检测你的格式
ansible-playbook –syntax-check creatuser.yml

测试,前提是后面的操作和前面的操作没有联系,否则可能会报错
ansible-playbook -C creatuser.yml

需求,安装httpd以及php,并启动,要求下次开机会自动启动

其他实例: