目录
一、关于ansible
1.核心组件
二、使用ansible
1.准备环境
2.主机清单配置
3.ansible使用
三、ansible常用模块
1.copy模块
2.script模块
3.fetch模块
4.shell模块
5.file模块
6.service模块
7.yum模块
一、关于ansible
Ansible是一个部署一群远程主机的工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。理论上说,只要管理员通过ssh登录到一台远程主机上能做的操作,Ansible都可以做到。Ansible是python开发的,故依赖一些python库和组件,如:paramiko,PyYaml和jinja三个关键组件;集合了众多运维工具的优点,实现批量系统配置、批量程序部署、批量运行命令等功能。
拓展其它的自动化运维工具:puppet,saltstack,chef,func,fabric等
1.核心组件
host inventory:主机清单,可以配置去操作哪些主机
module 、plugins :模块,插件,实现某些功能的库
playbook:剧本,告诉主机清单里的机器做什么事情
二、使用ansible
1.准备环境
4台Centos 8.3的机器,其中一台ansible 2.9.25
ip地址 主机名
192.168..0.186 ansible
192.168..0.187 node1
192.168..0.188 node2
192.168..0.189 node3
在主机名为ansible那台机器下载ansible
[root@ansible .ssh]# yum install ansible -y
[root@ansible .ssh]# ansible --version
ansible 2.9.25
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3.6.8 (default, Aug 24 2020, 17:57:11) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
从ansible上生成ssh公钥同步到三台node主机上,实现无密钥登录管理(当然这只是推荐)
[root@ansible ~]# ssh-keygen
[root@ansible ~]# cd /root/.ssh/ #可以查看生成的私钥和公钥
[root@ansible .ssh]# ls
id_rsa id_rsa.pub
#在执行下面这个步骤时,输入yes和各主机的密码即可ssh 'root@192.168.0.18*'免密登录了
[root@ansible .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.0.187
[root@ansible .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.0.188
[root@ansible .ssh]# ssh-copy-id -i id_rsa.pub root@192.168.0.189
#可以去node节点查看密钥
[root@node1 ~]# cd /root/.ssh
[root@node1 .ssh]# ls
authorized_keys
2.主机清单配置
[root@ansible .ssh]# cd /etc/ansible/
[root@ansible ansible]# ls
ansible.cfg hosts roles
[root@ansible ansible]# vim hosts #在hosts文件下添加主机
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
[k8sservernode]
192.168.0.187
192.168.0.188
192.168.0.189
/etc/ansible/ansible.cfg 这个文件是ansible的主配置文件
/etc/ansible/hosts 这个文件是主机清单的配置文件
3.ansible使用
ansible 主执行程序,一般用于命令行下执行
ansible-playbook 执行playbook中的任务
ansible-doc 获取各模块的帮助信息
ansible-doc -l 查看ansible有哪些模块,大概几千个
ansible-doc -s 模块名 查看某个模块怎么使用
三、ansible常用模块
参数:
all 表示所有主机
-m 接模块名
-f 几个子进程执行
-a 模块执行的参数
-u 某主机的用户名
-c 连接方式
1.copy模块
从本地copy文件分发到目录主机路径
参数说明:
src= 源文件路径
dest= 目标路径
注意src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制过去
content= 自行填充的文件内容
owner 属主
group 属组
mode权限
[root@ansible ~]# ansible all -m copy -a "src=/root/lianxi.txt dest=/root mode=600"
[root@ansible ~]# ansible nfsserver -m copy -a "src=/root/lianxi.txt dest=/root"
2.script模块
把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行
[root@ansible ~]# ansible all -m script -a "/root/lianxi.sh"
如果文件数量很大,效率很慢,就可以添加-f选项,设置多个进程去执行
[root@ansible ~]# ansible all -f 10 -m script -a "/root/lianxi.sh"
3.fetch模块
从远程主机拉取文件到本地
[root@ansible /]# ansible all -m fetch -a "src=/etc/passwd dest=/lianxi"
4.shell模块
由于commnad只能执行裸命令(即系统环境中有支持的命令),至于管道之类的功能不支持,
shell模块能进行shell解析,执行Linux命令的
[root@ansible 192.168.0.187]# ansible all -m shell -a "ip add|grep ens33"
5.file模块
创建文件,设置文件属性
state:
touch 空文件
directory 目录
link 软链接文件
hard 硬链接文件
[root@ansible 192.168.0.187]# ansible all -m file -a "path=~/liu.txt state=touch"
6.service模块
服务管理模块
常用参数:
name:服务名
state:服务状态 reloaded,restarted,started,stopped
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)
[root@ansible 192.168.0.187]# ansible all -m service -a "name=nginx state=started enabled=true"
7.yum模块
安装软件包的模块
常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present' or
installed',latest')表示安装, (
absent' or `removed') 表示删除
[root@ansible 192.168.0.187]# ansible all -m yum -a "name=net-tools state=installed"