Ansible安装与入门

发布于:2025-07-29 ⋅ 阅读:(31) ⋅ 点赞:(0)

目录

Ansible

ansible任务执行模式

ansible执行流程

ansible命令执行过程(背会)

ansible的安装方式

ansible的程序结构(yum安装为例)

ansible的配置文件查找顺序(背会)

核心配置文件

ansible的配置文件

Ansible常用命令

ansible-doc命令

部署ansible管理集群

实验环境

实验步骤

        安装ansible

        核心配置文件

        添加主机清单

        ansible的主机清单

免密设置

ansible配置公私钥

        配置公私钥

        copy一份公私钥给web主机

主机连通性测试

命令测试是否正常

Ansible常用模块


Ansible

ansible任务执行模式
  • ansible系统由控制主机被管节点的操作方式可以分为两类,即adhoc和playbook

  • ad-hoc模式(点对点模式)

使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell

  • playbook模式(剧本模式)

剧本模式是Ansible的主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task(任务)集合完成一类功能,比如web服务的安装部署、数据库服务的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件

ansible执行流程
  • 简单理解就是Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回结果。

ansible命令执行过程(背会)
  • 加载自己的配置文件,默认为/etc/ansible/ansible.cfg;

  • 查找对应的主机配置文件,找到要执行的主机或者组;

  • 加载自己对应的模块文件,如command;

  • 通过ansible将模块或者命令生成对应的py文件(python脚本),并且将该文件传输到远程服务器;

  • 对应执行用户的家目录.ansible/tmp/xxx/xxx.py文件;

  • 给文件添加执行权限;

  • 执行并且返回结果;

  • 删除临时的py文件, sleep 0退出;

ansible的安装方式

使用yum安装

yum安装是我们比较熟悉的安装方式。我们需要先安装一个epel-release包,然后再安装ansible即可。

yum install epel-release -y
yum install ansible -y
[root@localhost ~]# yum -y install epel-release
[root@localhost ~]# yum install ansible -y
ansible的程序结构(yum安装为例)
  • 配置文件目录:/etc/ansible/

  • 执行文件目录:/usr/bin/

  • Lib库依赖目录:/usr/lib/pyhtonX.X/site-packages/ansible/

  • Help文档目录:/usr/share/doc/ansible-X.X.X/

  • Man文档目录:/usr/share/man/man1/

ansible的配置文件查找顺序(背会)
  • ansible与我们其他的服务在这一点上又很大的不同,这里的配置文件查找是从多个地方找的,顺序如下:

1.检查环境变量 ANSIBLE_CONFIG 指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg);

2. ~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;

3./etc/ansible.cfg检查etc目录的配置文件。

核心配置文件

        可用文件里命令生成一个

[root@localhost ~]# cd /etc/ansible/
[root@localhost ansible]# ls
ansible.cfg  hosts  roles
[root@localhost ansible]# vim ansible.cfg 

[root@localhost ansible]# ansible-config init --disabled -t all > ansible.cfg

[root@localhost ansible]# ansible-config init --disabled -t all > ansible.cfg
[root@localhost ansible]# vim ansible.cfg 

ansible的配置文件
  • ansible的配置文件路径是/etc/ansible/ansible.cfg,ansible许多参数,下面我们列出一些常见的参数:

vim  /etc/ansible/ansible.cfg
inventory = /etc/ansible/hoste    #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible    #指向存放ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就行。
 
fbrks = 5    #并发连接数,默认为5
sudo_user = root    #设置默认执行命令的用户 ,2.14版本中是:become_user=root
remote_port = 22    #指定连接被管理节点的端口,默认为22端口,为安全考虑,建议修改
host_key_checking = False    #设置是否检查SSH主机的密钥,值为True/False,关闭后第一次连接不会提示配置实例
timeout = 60    #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.cfg    #指定一个存储ansible日志的文件(默认不记录日志)
[defaults]
inventory = /etc/ansible/hosts #主机清单文件路径。Ansible 通过此文件定义目标主机/组。
library = /usr/share/ansible/modules #Ansible 内置模块的搜索路径。若需加载自定义模块,可添加路径
modules_dir = /usr/share/ansible/modules #与 library 类似,但仅用于查找模块
remote_user = root #远程主机的登录用户。默认以 root 身份登录目标主机(生产环境建议改为普通用户,配合 become 提权)。
ask_pass = False ## 是否提示输入登录密码。若 remote_user 非免密登录,设为 True 会交互式询问密码(不安全,推荐用 SSH 密钥免密)。
private_key_file = None ##SSH 私钥文件路径。用于免密登录(如 private_key_file = ~/.ssh/id_rsa)。
remote_port = 22 ## 远程 SSH 端口。若目标主机 SSH 非默认端口(如 2222),需修改此值(remote_port = 2222)。
timeout=10  #SSH 连接超时时间(秒)。网络不稳定时可调大(如 timeout = 30)。
log_path=None #Ansible 操作日志路径。设为 /var/log/ansible.log 可记录详细执行日志(需确保文件可写)。
module_name = command #未指定模块时的默认模块。例如 ansible host -m shell 可省略 -m shell(不推荐,易混淆)。
executable=	/bin/sh #命令执行的 Shell 解释器。若目标主机默认 Shell 非 /bin/sh(如 /bin/bash),可修改(executable = /bin/bash)
prompt=	\# ##特权用户提示符匹配规则。用于判断是否已提权(如 prompt = \$ 可识别 $ 或 #)。
fact_caching=False #是否启用事实缓存(Facts Caching)。设为 True 可缓存主机信息(如 fact_caching = jsonfile,配合 fact_caching_connection 指定存储路径
fact_caching_timeout=86400 #事实缓存过期时间(秒)。默认 24 小时(86400 秒),可根据需求调整(如 fact_caching_timeout = 3600 缓存 1 小时)。
deprecation_warnings=True #是否显示已弃用警告。生产环境可设为 False 减少冗余输出(deprecation_warnings = False)。
display_skipped_hosts=True #是否显示跳过的主机。若任务因条件不满足跳过某些主机,设为 False 可隐藏这些主机的输出(display_skipped_hosts = False)。
host_key_checking=True #是否检查 SSH 主机密钥。首次连接新主机时会提示确认指纹,设为 False 可跳过(生产环境不建议,存在中间人攻击风险)。
inventory_ignore_extensions=['.pyc', '.pyo', '.swp', '.swo'] # 忽略的清单文件扩展名。避免误加载临时文件(如 inventory_ignore_extensions = ['.bak'])。
action_plugins=/usr/share/ansible/plugins/action # Action 插件搜索路径。自定义 Action 插件可添加至此(如 action_plugins = /opt/my_plugins/action)。
callback_plugins=/usr/share/ansible/plugins/callback #Callback 插件搜索路径。用于自定义输出格式(如集成 Jenkins、Slack 等)。
filter_plugins=/usr/share/ansible/plugins/filter # Filter 插件搜索路径。自定义变量过滤逻辑(如 filter_plugins = /opt/my_plugins/filter)
test_plugins= /usr/share/ansible/plugins/test # Test 插件搜索路径。用于测试变量或文件(如 test_plugins = /opt/my_plugins/test)
vars_plugins = /usr/sha
Ansible常用命令
[root@localhost ansible]# ls /usr/bin/| grep ansible
ansible
ansible-community
ansible-config
ansible-connection
ansible-console
ansible-doc
ansible-galaxy
ansible-inventory
ansible-playbook
ansible-pull
ansible-vault
#### ansible命令集解释

*   /usr/bin/ansible,Ansible AD-Hoc临时命令执行工具,常用于临时命令的执行
*   /usr/bin/ansible-doc,Ansible模块功能查看工具(document)
*   /usr/bin/ansible-galaxy,下载上传优秀的代码或者Roles模块的官网平台,基于网络的
*   /usr/bin/ansible-playbook,Ansible定制自动化的任务集编排工具
*   /usr/bin/ansible-pull,Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维架构能力要求高)
*   /usr/bin/ansible-vault,Ansible文件加密工具
*   /usr/bin/ansible-console,Ansible基于Linux Consoble界面可与用户交互的命令执行工具
ansible-doc命令

ansible-doc命令常用于获取模板块信息及其适用帮助,一般用法如下:

ansible-doc -l    ##获取全部模块信息
ansible-doc -s MOD_NAME    #获取指定模块的使用帮助

部署ansible管理集群

全程是只需要,在ansible上面操作就行!!!

实验环境
主机名 IP地址 安装包
ansible 192.168.158.164 epel-release、ansible
node1 192.168.158.159 -
node2 192.168.158.160 -
实验步骤
        安装ansible
[root@localhost ~]# hostnamectl set-hostname ansible
[root@localhost ~]# su
[root@ansible ~]# yum install epel-release -y
[root@ansible ~]# yum install ansible -y
        核心配置文件

        可用文件里命令生成一个

[root@localhost ~]# cd /etc/ansible/
[root@localhost ansible]# ls
ansible.cfg  hosts  roles
[root@localhost ansible]# vim ansible.cfg 

[root@localhost ansible]# ansible-config init --disabled -t all > ansible.cfg
        添加主机清单
[root@ansible ~]# cd /etc/ansible/
[root@ansible ansible]# ls
ansible.cfg  hosts  roles
[root@ansible ansible]# vi hosts 
 
[web]        ##添加到最后一行
192.168.158.159
192.168.158.160
        ansible的主机清单
  • 在配置文件中,我们提到了资源清单,这个清单就是主机清单,里面保存的是一些ansible需要连接管理的主机列表。

  • 如下是ansible主机清单的定义方式:

  • vim /etc/ansible/hosts

(直接在末尾添加)

例如:

1.直接指明主机地址或者主机名:
#green.example.com#
#bule.example.com#
# 192.168.115.101
# 192.168.115.102
 
2.定义一个主机组(组名)把地址或者主机名加进去
[mysql_test]
192.168.115.101
192.168.115.102
192.168.115.103
  • 需要注意的是,这里的组成员可以使用通配符来匹配,这样对于一些标准化管理就比较方便。我们可以根据实际情况来配置我们的主机列表,具体的操作如下:

vi /etc/ansible/hosts  #定义一组web主机组
 
[web]
192.168.158.159
192.168.158.160

免密设置

ansible配置公私钥
        配置公私钥
        copy一份公私钥给web主机
[root@localhost ansible]# ssh-keygen -N '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/fwy5SFyKfwKf61esKQk57v7ok2gruFMyf1tncudYKA root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|                 |
|         .       |
|        S.= o.   |
|   . o . B+*+oo  |
|    = o E +***.. |
|   + o . *o+B=o. |
|    +.. ooOO*=+  |
+----[SHA256]-----+
[root@localhost ansible]# ssh-copy-id 192.168.158.159
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.158.159 (192.168.158.159)' can't be established.
ED25519 key fingerprint is SHA256:T18Ri2Kqfht/W/As6DBvSPOqvDBUhgWq5aORE9E4CPQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.158.159's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.158.159'"
and check to make sure that only the key(s) you wanted were added.

[root@localhost ansible]# ssh-copy-id 192.168.158.160
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.158.160 (192.168.158.160)' can't be established.
ED25519 key fingerprint is SHA256:T18Ri2Kqfht/W/As6DBvSPOqvDBUhgWq5aORE9E4CPQ.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: 192.168.158.159
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.158.160's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.158.160'"
and check to make sure that only the key(s) you wanted were added.
主机连通性测试
命令测试是否正常
[root@localhost ansible]# ansible 192.168.158.159 -m ping 
192.168.158.159 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[root@localhost ansible]# ansible 192.168.158.160 -m ping 
192.168.158.160 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

Ansible常用模块

    • ​**command & shell:​**​ (执行命令)
      • 作用:​​ 让你的“小机器人”在被管服务器上运行命令。就像你打开服务器的命令行窗口输入指令一样。
      • 区别:​
        • command:只运行简单命令,不支持管道符(|)、重定向(> <)、环境变量($HOME)这些复杂操作。
        • shell:可以运行任何你在命令行能运行的复杂命令,支持管道、重定向、变量。 ​注意:​​ 能用 command 就用 command,更安全、结果更稳定;实在需要复杂操作再用 shell
    • ​**copy & fetch:​​ (文件传输) - ​方向相反!​**​
      • ​**copy:​​ 作用是把你本地的文件或者Playbook目录下的文件**,​复制到被管服务器上。就像你让管家把你电脑里的文件A拿到服务器B上去放好。
      • ​**fetch:​​ 作用是从被管服务器上把文件拉取(下载)到你运行Playbook的电脑**​(控制节点)。就像你让管家去服务器B上把某个重要的日志文件C拿回来给你看。
    • ​**file:​**​ (文件/目录管理)
      • 作用:​​ 操作文件和目录本身(不是内容)。让管家去创建文件、目录、设置权限(读、写、执行)、更改所有者、创建软链接/硬链接等。比如:在服务器上创建目录 /data,权限设为 755,所有者是 www-data
    • ​**fetch:​**​ (上面已介绍)
    • ​**cron:​**​ (定时任务)
      • 作用:​​ 让管家在服务器上设置(添加、修改、删除)定时任务(cron job)​。就像配置“服务器上的闹钟”,让它定期执行某个命令或脚本(比如每天凌晨备份数据库)。
    • ​**yum (CentOS/RHEL) / apt (Ubuntu/Debian):​​ (软件包管理) - ​图片是 yum,注意你的系统!​**​
      • 作用:​​ 让管家在服务器上安装、更新、卸载、查看软件包。就像用手机上的“应用商店”装/卸载APP一样。
    • ​**service:​**​ (服务管理)
      • 作用:​​ 让管家启动、停止、重启、重新加载、查看系统服务的状态。比如启动Nginx网站服务(nginx)、停止MySQL数据库服务(mysqld)。
    • ​**user & group:​**​ (用户/组管理)
      • 作用:​
        • user:让管家创建、修改、删除用户账号,设置密码、家目录、Shell、所属组等。
        • group:让管家创建、修改、删除用户组,管理组成员。
    • ​**script:​**​ (运行脚本)
      • 作用:​​ 让管家把你写在本地的Shell脚本、Python脚本等复制到被管服务器上去执行。比如你写了一个 backup.sh 的备份脚本,用这个模块传到服务器上并运行它。
    • ​**setup (或 gather_facts):​**​ (收集信息)
      • 作用:​​ Ansible管家在执行任何任务前,会自动收集被管服务器的各种信息(主机名、IP地址、操作系统版本、内存大小、磁盘空间等)。你可以在任务中直接使用这些信息(称为 facts),实现更智能的自动化(比如根据内存大小设置不同的软件参数)。这个模块就是负责收集这些信息的,默认会自动运行。

        


网站公告

今日签到

点亮在社区的每一天
去签到