Ansible快速入门
一、介绍
Ansible
是一款简单的运维自动化工具,只需要使用ssh
协议连接就可以来进行系统管理,自动化执行命令,部署等任务。
Ansible的特点
1、ansible不需要单独安装客户端,也不需要启动任何服务
2、ansible是python中的一套完整的自动化执行任务模块
3、ansible playbook 采用yaml配置,对于自动化任务执行过一目了然
Ansible组成结构
- Ansible
是Ansible
的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。 - Ansible Playbook
任务剧本(又称任务集),编排定义Ansible
任务集的配置文件,由Ansible
顺序依次执行,yaml
格式。 - Inventory
Ansible
管理主机的清单,默认是/etc/ansible/hosts
文件。 - Modules
Ansible
执行命令的功能模块,Ansible2.3
版本为止,共有1039
个模块。还可以自定义模块。 - Plugins
插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。 - API
提供给第三方程序调用的应用程序编程接口。
二、环境准备
IP | 系统 | 主机名 | 描述 |
---|---|---|---|
172.16.1.3 | CentOS7 | Master | ansible管理节点 |
172.16.1.4 | CentOS7 | Node1 | 被管理节点1 |
172.16.1.5 | CentOS7 | Node2 | 被管理节点2 |
- 管理节点关闭防火墙和SElinux
[root@Master ~]# systemctl stop firewalld
[root@Master ~]# systemctl disable firewalld
[root@Master ~]# setenforce 0
[root@Master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@Master ~]# egrep "^SELINUX=" /etc/selinux/config
SELINUX=disabled
- 管理节点修改/etc/hosts文件实现本地解析
[root@Master ~]# cat >>/etc/hosts<<'EOF'
172.16.1.4 Node1
172.16.1.5 Node2
EOF
之后使用ping域名方式是否解析正常。
- 管理节点实现免密登录被管理节点
#生成公钥私钥ssh-keygen->回车->回车->回车
[root@Master ~]# ssh-keygen
#传递公钥到被管理节点
[root@Master ~]# for i in localhost Node1 Node2; do ssh-copy-id $i; done
完成后测试看看是否可以免密登录。
三、安装Ansible软件包
- 安装ansible软件包,由于ansible需要epel源,这里选用阿里epel源。可以把Base源也加上:
[root@Master ~]# yum -y install wget
[root@Master ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@Master ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@Master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- 安装ansible软件包
[root@Master ~]# yum -y install ansible
- 查看软件包版本
[root@Master ~]# ansible --version
四、定义被管理主机的清单文件
- ansible主要配置文件如下
- 主配置文件的默认配置:
/etc/ansible/ansible.cfg
· 主机清单配置方式,默认全部都是注释的
4.1 清单定义
[root@Master ~]# mv /etc/ansible/hosts /etc/ansible/hosts-default
可以直接把要管理的主机IP或者主机名写入,写主机名的前提是之前有本地配置了解析。
例如:
172.16.1.1
172.16.1.2
...
Node1
Node2
...
分组方式:
[webserver]
172.16.1.1
node2
...
[dbserver]
172.16.1.3
node3
...
假设这里要安装k8s集群就可以配置如下,如果主机非常多,有Node1、Node2、···、Node100,可以简写成:
[kubernetes]
localhost
Node[1:2]
[node]
Node[1:2]
4.2 清单查看方法
- 查看所有主机清单
[root@Master ~]# ansible all --list-host
- 查看某个组的主机清单
[root@Master ~]# ansible kubernetes --list-host
五、常用使用模块
命令格式:ansible 组名/主机 [-m 模块名] [-a 具体操作]
- 查看主机清单
[root@Master ~]# ansible all --list-host
- 查看某个组内的主机清单
[root@Master ~]# ansible kubernetes --list-host
- ansible-doc命令介绍:
· 常用选项
-l:列出所有模块列表
-s:查看模块帮助信息
[root@Master ~]# ansible-doc -l
[root@Master ~]# ansible-doc -s ping
5.1 ping模块测试连通性
[root@Master ~]# ansible node -m ping
- ansible返回结果颜色表示:
5.2 command模块
使用文档命令查看使用帮助:
[root@Master ~]# ansible-doc -s command
可以看到该模块--name的解释,用于在目标主机上执行命令。
- chdir:切换目录之后执行
[root@Master ~]# ansible node -m command -a 'chdir=/root ls -l'
表示切换到/root目录之后执行ls -l命令。
- create:如果文件不存在将创建
[root@Master ~]# ansible node -m command -a 'creates=/data mkdir /data'
在/目录下创建data目录,如果存在将会绿色提示已经存在。
[root@Master ~]# ansible node -m command -a 'creates=/data/hello.txt touch /data/hello.txt'
在/data目录下新建hello.txt文件,如果存在会绿色提示文件存在。
- removes:如果文件存在将删除它
[root@Master ~]# ansible node -m command -a 'removes=/data/hello.txt rm -rf /data/hello.txt'
删除/data下的hello.txt文件,如果不存在将会绿色显示不存在。
[root@Master ~]# ansible node -m command -a 'removes=/data rm -rf /data'
删除/data文件夹,如果不存在将会绿色显示不存在。
- 其它
5.3 shell 模块
shell模块和command模块是一样的,都是在目标主机上执行命令,但是它比command强大,它比command好在支持grep、>、*等等,但是它也不支持vi、vim。
5.4 script
-
script模块用于远程执行脚本,脚本存放在ansible主机本地即可,不需要拷贝到远程主机。
-
常用参数:
提示:shell模块中的chdir、creates、removes参数的作用与command中的作用都是相同的,不在例举。
示例:
有如下脚本:
[root@Master ~]# cat /root/hello.sh
#!/bin/bash
echo "hello"
在远程主机上执行:
这个主要考验执行脚本的编写能力,它不用拷贝到其它主机上,执行之后会被其它主机调用。
5.5 copy 模块
[root@Master ~]# ansible node -m copy -a 'src=/root/hello.sh dest=/root'
src指定本地文件路径,dest指定目标路径。
标签:入门,快速,ansible,Ansible,Master,模块,主机,root From: https://www.cnblogs.com/luguojie/p/18562821