Ansible快速入门

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主要配置文件如下

Snipaste_2024-03-21_10-18-07

  • 主配置文件的默认配置:

/etc/ansible/ansible.cfg

Snipaste_2024-03-21_10-55-47

· 主机清单配置方式,默认全部都是注释的

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的解释,用于在目标主机上执行命令。

Snipaste_2024-03-21_13-39-22

  • 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文件夹,如果不存在将会绿色显示不存在。

  • 其它

Snipaste_2024-03-21_14-12-27

Snipaste_2024-03-21_14-16-23

5.3 shell 模块

​ shell模块和command模块是一样的,都是在目标主机上执行命令,但是它比command强大,它比command好在支持grep、>、*等等,但是它也不支持vi、vim。

Snipaste_2024-03-21_14-31-02

Snipaste_2024-03-21_14-39-20

Snipaste_2024-03-21_14-56-00

5.4 script

  • script模块用于远程执行脚本,脚本存放在ansible主机本地即可,不需要拷贝到远程主机。

  • 常用参数:

    提示:shell模块中的chdir、creates、removes参数的作用与command中的作用都是相同的,不在例举。

示例:

有如下脚本:

[root@Master ~]# cat /root/hello.sh
#!/bin/bash
echo "hello"

在远程主机上执行:

Snipaste_2024-03-21_15-02-51

这个主要考验执行脚本的编写能力,它不用拷贝到其它主机上,执行之后会被其它主机调用。

5.5 copy 模块

[root@Master ~]# ansible node -m copy -a 'src=/root/hello.sh dest=/root'

src指定本地文件路径,dest指定目标路径。

Snipaste_2024-03-21_15-08-53

Snipaste_2024-03-21_15-09-59

posted @   国杰响当当  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示