Ansible自动化安装部署及使用
最佳答案 问答题库628位专家为你答疑解惑
目录
前言
一、环境概况
修改主机名(可选项)
二、安装部署
1.安装epel扩展源
2.安装Ansible
3.修改Ansible的hosts文件
4.生成密钥
三、Ansible模块使用介绍
Command模块
Shell模块
User模块
Copy模块
File模块
Hostname模块
Yum模块
Service和System模块
Setup 模块
前言
Ansible 是一种开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它采用简单易懂的 YAML 语法和基于 SSH 协议的远程执行,能够实现快速、可靠的自动化配置和部署。
Ansible 的一些主要特点和功能:
-
简单易用: Ansible 使用 YAML 格式的声明性语言,使得编写和阅读 Playbooks(Ansible 的配置文件)变得非常直观和易于理解。无需编写复杂的脚本或程序代码,就可以完成大部分配置和部署任务。
-
无代理架构: Ansible 采用基于 SSH 的无代理架构,不需要在目标主机上安装任何额外的代理或客户端软件。这简化了部署和管理过程,并提供了更强的安全性。
-
模块化: Ansible 提供了丰富的模块库,用于执行各种操作,如包管理、文件操作、服务管理、用户管理等。模块化的设计使得用户可以轻松地扩展和定制 Ansible,以满足特定的自动化需求。
-
剧本化: Ansible 使用 Playbooks 来描述配置和部署任务。Playbooks 是用 YAML 编写的文本文件,可以定义一系列任务和主机组,以及执行这些任务的顺序和条件。这使得用户可以将复杂的配置和部署过程分解为可管理的、可重用的剧本。
-
多平台支持: Ansible 可以在多种操作系统和云平台上运行,包括 Linux、Windows、macOS、VMware、AWS、Azure、Google Cloud 等。这使得 Ansible 成为一个通用的自动化工具,可用于管理多样化的 IT 环境。
-
可扩展性: Ansible 可以集成到现有的工具链和流程中,并与其他自动化和编排工具(如 Jenkins、Kubernetes)进行集成。此外,Ansible 还具有丰富的插件和扩展机制,可以根据需要进行功能定制和扩展。
一、环境概况
192.168.159.128 ------------> Ansible服务端(管理端)
192.168.159.129 ------------> 客户端(受控端)
修改主机名(可选项)
修改Ansible服务端的主机名,客户端不修改
hostnamectl set-hostname ansible.serverhostname ansible.serverreboot后永久生效
二、安装部署
1.安装epel扩展源
yum install -y epel-release
2.安装Ansible
yum install -y ansible
3.修改Ansible的hosts文件
cd /etc/ansible/ tree . ├── ansible.cfg #ansible的配置文件,默认即可 ├── hosts #ansible的主机清单,用于存储需要管理的远程主机的相关信息,需要编辑 └── roles/ #公共角色目录,默认即可
vim hosts#webservses行取消注释,添加被控端IP [webservers] ## alpha.example.org ## beta.example.org 192.168.159.129 ## 192.168.1.110
4.生成密钥
Ansible 的工作原理是通过 SSH 连接到远程主机,在目标主机上执行预定义的任务或命令,所以需要配置免密
ssh-keygenssh-copy-id root@192.168.159.129
三、Ansible模块使用介绍
现在开始ansible就已经可以开始使用了
- 查看Ansible版本
[root@ansible ansible]# ansible --version ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Jun 20 2023, 11:36:40) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] [root@ansible ansible]#
- 查看
ping
和
telnet
模块的简要描述和摘要ansible-doc -s ping ansible-doc -s telnet
- 用于查看有关
telnet
模块的文档,类似于man手册ansible-doc telnet
Command模块
格式
ansible <hosts> -m command -a "<command>"
ansible webservers -m command -a "free -h" ansible 192.168.159.129 -m command -a "free -h" ansible all -m command -a "free -h" ansible webservers -a "uname -a"
<hosts>可以使用以上三种方式指定
- webservers:hosts配置文件中的【webservers】组执行某些命令
- 实际IP:指定IP运行某些命令
- all:代表所有hosts主机,包含hosts配置文件中的【dbservers】组
Shell模块
格式
ansible <hosts> -m shell -a "<command>"
ansible all -m shell -a "for i in {1..5}; do touch \$i.txt;done && ls -la *.txt"
1.上述示例当中的touch命令部分为什么在$符号前面要加上转义符?
ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print $6}'"ansible webservers -m shell -a "df -hT|grep '/$' | awk '{print \$6}'"
2.上述示例当中的awk命令部分为什么在$符号前面要加上转义符?
解释:为了确保 $6 不被解释为命令行变量,而是作为字符串的一部分传递给远程主机执行,需要使用转义符 \ 进行转义。\$6 的目的是将 $6 这个字符串传递给远程主机而不被本地 Shell 解释为变量
所以正确写法是这样的:
ansible all -m shell -a "for i in {129,130}; do ping -c 1 192.168.159.\$i; done"
!!!错误写法示范:
User模块
格式
ansible <hosts> -m user -a "<options>"
<hosts>: 指定要管理用户的目标主机,可以是单个主机或者主机组的名称。 -m user: 通过 -m 参数指定要使用的模块为 user。 -a "<options>": 使用 -a 参数传递模块的选项。选项可以是创建用户、修改用户属性或删除用户等操作。user 模块的常用选项包括:name: 指定用户的名称。password: 指定用户的密码(已加密)。state: 指定用户的状态,present表示创建,absent表示删除。groups: 指定用户所属的组。shell: 指定用户的登录 Shell。system=yes|no: 是否为系统账号。uid: 用户uidmove_home=yse|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动password: 用户的密码,建议使用加密后的字符串comment: 用户的注释信息remove=yes|no: 当state=absent时,是否删除用户的家目录comment: 指定用户的注释信息。
ansible webservers -m user -a 'name="wang" state=present password=123456 groups=root shell="/sbin/nologin"' ansible webservers -m command -a 'grep "wang" /etc/shadow'
Copy模块
格式:
ansible <hosts> -m copy -a "<options>"
<hosts>: 指定要复制文件的目标主机,可以是单个主机或者主机组的名称。 -m copy: 通过 -m 参数指定要使用的模块为 copy。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括源文件路径、目标文件路径、权限等。copy 模块的常用选项包括:src: 指定源文件或目录的路径。可以是绝对路径或相对路径。dest: 指定目标文件或目录的路径。可以是绝对路径或相对路径。mode: 指定目标文件的权限模式,例如 0644。owner: 指定目标文件的所有者。group: 指定目标文件的所属组。backup: 指定是否创建备份文件。force: 指定是否强制复制,即使目标文件已经存在。
ansible webservers -m copy -a 'src="/root/shdir/xin.sh" dest="/root/xin_bak.sh" owner=root group=root mode=777' ansible webservers -m shell -a "bash /root/xin_bak.sh"
File模块
格式:
ansible <hosts> -m file -a "<options>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。 -m file: 通过 -m 参数指定要使用的模块为 file。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。file: 模块的常用选项包括:path: 指定要操作的文件或目录的路径。可以是绝对路径或相对路径。mode: 指定文件的权限模式,例如 0644。owner: 指定文件的所有者。group: 指定文件的所属组。state: 指定文件的状态,可以是 file(文件存在)、directory(目录存在)或 absent(文件不存在)。recurse: 指定是否递归地应用更改到目录及其子目录。follow: 指定是否跟随符号链接进行更改。
ansible webservers -m file -a 'path="/root/xin_bak.sh" owner=root group=root mode=755 state=file' ansible webservers -m command -a "ls -la /root/xin_bak.sh"
Hostname模块
格式:
ansible <hosts> -m copy -a "<options>"
ansible webservers -m hostname -a "name=test" ansible webservers -m command -a "hostname"
Yum模块
格式:
ansible <hosts> -m yum -a "name=<package_name> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file: 通过 -m 参数指定要使用的模块为 file。
-a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。yum: 模块的常用选项包括:name: 要安装的包的名字state: present(安装)、absent(卸载)或 latest(更新为最新版本)。update_cache: 是否刷新 YUM 缓存。默认情况下为 yes,表示会自动更新缓存。设置为 no 则不刷新缓存。 disable_gpg_check: 是否禁用 GPG 检查。默认为 no,表示会进行 GPG 检查。设置为 yes 则禁用 GPG 检查。enablerepo 和 disablerepo: 控制仓库的启用和禁用。可以指定要启用或禁用的仓库名称。多个仓库以逗 号分隔。installroot: 指定要安装软件包的根目录路径。conf_file: 指定要使用的 YUM 配置文件路径。vars: 用于传递额外的变量给 Ansible。
ansible webservers -m yum -a 'name=dnsmasq state=present'
ansible webservers -m shell -a "systemctl restart dnsmasq && systemctl enable dnsmasq && systemctl status dnsmasq"
Service和System模块
格式:
ansible <hosts> -m service -a "name=<service name> enabled=<yes/no> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。 -m file: 通过 -m 参数指定要使用的模块为 file。 -a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。service: 模块的常用选项包括:name: <服务名称>state: <服务状态>,started|stopped|restartedenabled: <是否自启动>,yes|nopattern: <进程匹配模式>.(点): 匹配任意单个字符。*: 匹配前一个字符的零次或多次重复。+: 匹配前一个字符的一次或多次重复。?: 匹配前一个字符的零次或一次重复。^: 匹配字符串的开始位置。$: 匹配字符串的结束位置。[]: 用于定义字符集,匹配其中的任意一个字符。(): 创建捕获组,用于分组匹配。sleep: <等待时间>timeout: <超时时间>runlevel: <运行级别>args: <额外参数>system: 模块命令格式:name: <项名称>state: <系统状态>value: <要设置的值>,started|stopped|restartedenabled: <是否自动加载>,yes|noregenerate: <是否重新生成>system_file: <系统文件路径>runtime_file: <运行时文件路径>config_file: <配置文件路径>
Setup 模块
格式:
ansible <hosts> -m setup -a "name=<service name> enabled=<yes/no> state=<state>"
<hosts>: 指定要操作文件的目标主机,可以是单个主机或主机组的名称。
-m file: 通过 -m 参数指定要使用的模块为 file。
-a "<options>": 使用 -a 参数传递模块的选项。选项包括要操作的文件路径、属性变更等。setup: 模块的常用选项包括:gather_subset: 指定要收集的子集信息的列表。默认情况下,会收集所有可用的信息。可以使用 hardware, network, virtual, ohai, facter, ohai_timed, puppet, vagrant 或 all 来指定子集。fact_path: 用于指定自定义信息(facts)路径的列表。Ansible 会搜索这些路径以查找自定义事实。filter: 过滤已收集的信息(facts),仅返回匹配指定模式的结果。gather_timeout: 设置收集事实的超时时间,单位为秒。gather_timeout_multiplier: 用于调整超时时间的倍数,默认为 1。gather_timeout_retry: 在超时后重试的次数,默认为 1。cache_valid_time: 设置缓存的有效时间,单位为秒。fact_caching: 启用或禁用缓存功能,可以是 memory、jsonfile、json、yaml 或 text。
ansible webservers -m setup -a "gather_subset=hardware"
ansible webservers -m setup -a "filter=*device_link*"
99%的人还看了
相似问题
- go语言实现高性能自定义ip管理模块(ip黑名单)
- 【Django使用】4大模块50页md文档,第4篇:Django请求与响应和cookie与session
- 【python学习】基础篇-常用模块-pickle模块:序列化和反序列化
- #gStore-weekly | gAnswer源码解析 调用NE模块流程
- 【前端知识】Node——events模块的相关方法
- 使用Python的turtle模块绘制玫瑰花图案(含详细Python代码与注释)
- 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
- SpringBoot学习笔记-配置MySQL与实现注册登录模块(中)
- 一个奇怪的蓝牙模块分析记录
- 前端JS模块化对外暴露的三种方法
猜你感兴趣
版权申明
本文"Ansible自动化安装部署及使用":http://eshow365.cn/6-32548-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: java实现socket编程
- 下一篇: 华为分享---手机往电脑发送失败的处理