首页 > 其他分享 >自动化工具ansible部署和实践

自动化工具ansible部署和实践

时间:2024-12-19 14:28:16浏览次数:8  
标签:部署 1.41 自动化 -- ansible 模块 172.16 root

1 介绍和部署

1.1 介绍

  1. ansible的功能
    我爱你在当今的IT自动化领域,Ansible无疑是一个无法被忽视的重要角色。其便利性和高效性受到了广大开发者和系统管理员的一致好评,成为了配置管理和应用部署的首选工具。然而,对于一些初学者来说,Ansible的概念和架构可能会显得有些复杂和难以理解。因此,我打算通过一系列深入解析Ansible的博文,帮助大家更好地理解和使用这一工具。基于ssh协议实现远程管理,可以实现多种批量管理操作.

  • 批量系统配置

  • 批量软件部署

  • 批量文件拷贝

  • 批量运行命令

2.ansible的角色
  • 管理端:不需要启动任何服务,默认服务端不需要任何的配置

  • 受控端:基于ssh免秘钥,没有客户端软件需要安装

3.ansible命令

        Ansible 命令是一种强大的自动化工具,它允许系统管理员和开发者在多台机器上自动执行任务。其中,Ad-Hot模式是一个概念性的名称,它与编写Ansible playbook的概念相似,类似于直接在命令行输入shell命令与编写shell scripts之间的关联。
具体而言,Ansible命令由以下三个主要部分组成:

  1. 1. Ansible 匹配的资产主机:这是你希望在其上执行任务的目标机器或一组机器。
  2. 2. 使用的模块 -m:这是你希望执行的具体动作或任务,Ansible提供了许多预定义的模块以供选择。
  3. 3. 模块的参数 -a:这允许你为特定模块传递参数,以便进一步定制其行为。

Ad-Hoc 命令的基本格式如下:

ansible [pattern] -m [module] -a '[module arguments]' [options]

其中:

  • [pattern]:用来匹配目标主机或主机组的模式。

  • -m [module]:指定要使用的模块。

  • -a '[module arguments]':指定模块的参数。

  • [options]:其他可选参数。
     

详细解释一些常用的选项:

  • -a 'Arguments', --args='Arguments'

    指定模块的参数。

  • -m NAME, --module-name=NAME

    指定要执行的模块名。默认使用 command 模块,所以如果只是执行单一命令,可以省略 -m 参数。

  • -u Username, --user=Username

    指定执行远程命令的用户,默认使用当前用户。

  • -U, --sudo-user=SUDO_User

    sudo 到哪个用户,默认为 root。

  • -k, --ask-pass

    提示输入 SSH 密码,而不是假设基于密钥的验证。

  • -K, --ask-sudo-pass

    提示输入 sudo 密码。

  • -s, --sudo

    使用 sudo 运行命令。

  • -S, --su

    使用 su 命令运行命令。

  • -f NUM, --forks=NUM

    指定并行任务数,默认为 5。

  • --private-key=PRIVATE_KEY_FILE

    指定私钥文件的路径,用于 SSH 连接验证。

  • -v, --verbose

    输出详细信息。

  • all

    针对 hosts 文件中定义的所有主机执行命令。

  • -M MODULE_PATH, --module-path=MODULE_PATH

    指定模块的搜索路径。

  • -o, --one-line

    压缩输出,尝试将输出信息压缩到一行中显示。

  • -B SECONDS, --background=SECONDS

    在后台运行命令,并指定超时时间。

  • -P NUM, --poll=NUM

    在后台模式下,每隔多少秒检查一次作业状态。

  • -T SECONDS, --timeout=SECONDS

    设置命令执行的超时时间。

  • -c CONNECTION, --connection=CONNECTION

    指定连接类型,如 paramiko (SSH)、sshlocal

  • --tags=TAGS

    只执行指定标签的任务。

  • --list-hosts

    只打印将执行 playbook 的主机列表,并不真正执行 playbook。

  • --list-tasks

    列出 playbook 中所有将被执行的任务。

  • -C, --check

    只测试命令会改变什么内容,而不会真正执行。

  • --syntax-check

    检查 playbook 的语法,但不执行。

  • -l SUBSET, --limit=SUBSET

    进一步限制所选主机或主机组。

  • --skip-tags=SKIP_TAGS

    跳过标签匹配的任务。

  • -e EXTRA_VARS, --extra-vars=EXTRA_VARS

    设置额外的变量。

1.2 ansible软件安装部署

  1. 环境规划

主机名IP地址用途
master0110.0.0.61管理段
backup10.0.0.41受控端
nfs0110.0.0.31受控端
web0110.0.0.7受控端
  1. 免秘钥配置
    生成秘钥对

ssh-keygen -t dsa

分发秘钥

sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.7
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.31
sh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.41

免交互批量分发秘钥参考我的批量免秘钥分发脚本
3) 口令登录方式配置[备选]
如果企业限制不允许使用ssh免秘钥方式,也可以使用在ansible的主机配置中,制定远程主机用户名和密码的方式

[root@xxxx ~]# vim /etc/ansible/hosts
[noah]
172.16.1.7
172.16.1.31 ansible_user=root ansible_password=123456
172.16.1.41

要先按装了ansibl软件,才会有该配置文件

  1. 安装ansible
    软件安装

yum install -y ansible

若受控主机有启用selinux,会影响ansible链接,在不能禁用的情况下,客户机可以安装以下程序

yum install -y libselinux-python
  • 主机列表创建

cp /etc/ansible/hosts{,.bak}
cat >/etc/ansible/hosts <<"EOF"
[noah]
172.16.1.7
172.16.1.31
172.16.1.41
EOF

1.3 用法说明

  1. 语法

ansible 主机信息  -m 模块名称 -a "相关模块参数""

主机信息:远程主机IP地址,主机组名称,all代表所有主机
-m:指定使用哪个模块
-a:模块中的参数和功能

  ping模块

[root@xxxx ~]# ansible all -m ping
172.16.1.41 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
172.16.1.7 | SUCCESS => {
"changed": false, 
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
"changed": false, 
"ping": "pong"
}

        ping模块没有参数,不用跟-e
2) 返回颜色
ansible会根据返回结果的类型不同,显示不同的颜色

  • 绿色:查看远程主机信息,不会对远程主机系统做任何修改

  • 红色:执行操作出现异常错误

  • 黄色:对远程主机系统进行修改操作

  • 粉色:警告或者忠告信息

其它示例

        以 root 用户身份对所有主机执行 df -h 命令:

ansible all -m command -a "df -h" --become --become-user root

        使用 yum 模块安装 nginx,并提示输入密码:

ansible webservers -m yum -a "name=nginx state=present" -k

        以 john 用户身份对 appservers 主机组执行 uptime 命令,并限制并发数为 5:

ansible appservers -m command -a "uptime" -u john -f 5

        重启 testhosts 组的所有机器,每次重启 10 台:

ansible testhosts -a "/sbin/reboot" -f 10

        使用额外的变量执行 playbook:

ansible-playbook update.yml --extra-vars "hosts=vipers user=admin"

        只对这个两个 IP 执行任务:

ansible [pattern] -m [module] -a '[module arguments]' --limit=192.168.0.10,192.168.0.11

ansible常用命令解释

ansible-doc

# ansible-doc -h Usage: ansible-doc [options] [module...]

该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:

//列出所有已安装的模块 # ansible-doc -l //查看具体某模块的用法,这里如查看command模块 # ansible-doc -s command

ansible-galaxy

# ansible-galaxy -h Usage: ansible-galaxy [init|info|install|list|remove] [--help] [options] ...

ansible-galaxy指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip

ansible-playbook

通过读取playbook 文件后,执行相应的动作,

ansible-pull

该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;

ansible-vault

ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。具体该部分可以参看官网

2 命令类常用模块

ansible模块列表
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

2.1 command[命令模块]

  1. 官方链接:
    http://docs.ansible.com/ansible/latest/modules/command_module.html
    说明:该模块与shell模块类似,但不能识别特殊符号

  2. 常用参数:

free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行某个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  1. 举例

  • chdir参数

[root@xxxx ~]# ansible 172.16.1.31 -m command -a "chdir=/tmp/ pwd"
172.16.1.31 | SUCCESS | rc=0 >>
/tmp
  • creates参数

[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.conf exists
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "creates=/etc/rsyncd.123456 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
  • removes参数

[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.conf hostname"
172.16.1.41 | SUCCESS | rc=0 >>
backup
[root@xxxx ~]# ansible 172.16.1.41 -m command -a "removes=/etc/rsyncd.1212213123 hostname"
172.16.1.41 | SUCCESS | rc=0 >>
skipped, since /etc/rsyncd.1212213123 does not exist

2.2 shell[万能模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module
    说明:shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息 < > | ;

  2. 常用参数

free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行莫个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  1. 举例

[root@xxxx ~]# ansible 172.16.1.41 -m shell -a "hostname;pwd"
172.16.1.41 | SUCCESS | rc=0 >>
backup
/root

可以使用该名模,执行所有linux的命令,所以叫万能模块

2.3 script[脚本模块]

  1. 官方连接
    https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module

  2. 常用参数

free_form	[必须]表示执行command模块时,必须要有linux合法命令信息,如ls
chdir		在执行莫个命令前,先切换目录
creates		判断一个文件是否存在,如果已经存在了,后面的命令就不会执行
removes		判断一个文件是否存在,如果不存在,后面的命令就不会执行
  1. 举例

  • 先查看脚本

[root@xxxx ~]# cat /server/scripts/mk.sh
#!/bin/sh
mkdir -p /root/abc/def
touch  /root/abc/123.txt
ls -lh /root/abc/*
  • 在调用这个脚本远程执行

[root@xxxx ~]# ansible 172.16.1.7 -m script -a "/server/scripts/mk.sh"
172.16.1.7 | SUCCESS => {
"changed": true, 
"rc": 0, 
"stderr": "Shared connection to 172.16.1.7 closed.\r\n", 
"stdout": "-rw-r--r-- 1 root root    0 6月  18 17:05 /root/abc/123.txt\r\n\r\n/root/abc/def:\r\n总用量 0\r\n", 
"stdout_lines": [
"-rw-r--r-- 1 root root    0 6月  18 17:05 /root/abc/123.txt", 
"", 
"/root/abc/def:", 
"总用量 0"
]
}

3 文件类常用模块

3.1 copy[复制模块]

  1. 官方链接:
    https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

  2. 常用参数

backup	对数据信息进行备份
src		定义要推送数据信息
dest	[必须]定义将数据推送到远程主机什么目录中
owner	设置复制后的文件属主权限
group	设置复制后的文件属组权限
mode	设置复制后的文件权限(600 755)
  1. 举例

  • backup参数

ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/ backup=yes"
  • src,dest参数

ansible 172.16.1.41 -m copy -a "src=/tmp/01.txt dest=/tmp/"

3.2 file[文件操作模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

  2. 常见参数

src		定义要推送数据信息
dest	[必须]定义将数据推送到远程主机什么目录中
owner	设置文件属主权限
group	设置文件属组权限
mode	设置文件权限(600 755)
state	用于指定创建目录或文件
  1. 举例

  • 权限参数

ansible 172.16.1.7 -m file -a "dest=/tmp/01.txt owner=oldboy group=oldboy mode=600"
  • state创建文件

ansible 172.16.1.41 -m file -a "dest=/tmp/02.txt state=touch"
  • state创建目录

ansible 172.16.1.41 -m file -a "dest=/tmp/01dir state=directory"

4 包管理.系统服务管理.定时任务模块

4.1 yum[包管理模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/yum_module.html#yum-module

  2. 常用参数

name	[必须]执行要安装软件的名称,以及软件的版本
state	installed安装  absent(卸载)
list	指定软件名称,查看软件是否可以安装,以及是否安装过
  1. 举例

ansible 172.16.1.41 -m yum -a "name=iftop state=installed"
ansible 172.16.1.41 -m yum -a "name=iftop state=absent"
ansible 172.16.1.41 -m yum -a "list=iftop"

4.2 service[系统服务管理模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module

  2. 常用参数

name	[必须]指定要管理的服务名称(管理的服务一定在chkconfig中可以看到)
state	stopped started restarted reloaded
enabled	yes表示服务开机自启动 no表示服务开机不要自动启动
  1. 举例

ansible 172.16.1.41 -m service -a "name=crond state=started enabled=yes"

4.3 cron[定时任务模块]

  1. 官方链接
    https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module

  2. 常用参数

minute	分,写法同系统定时任务,如[0-59] [*] [*/n]   
hour	时,写法同上
day		日,写法同上
month	月,写法同上
weekday	周,写法同上
job		执行命令,如job='/bin/sh /server/scripts/test.sh &>/dev/null'
  1. 举例

  • 添加定时任务

ansible 172.16.1.41 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null'"
  • 删除定时任务

ansible 172.16.1.41 -m cron -a "name=oldboy02 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' state=absent"
ansible 172.16.1.41 -m cron -a "name=oldboy01 state=absent"
  • 注释定时任务

ansible 172.16.1.41 -m cron -a "name=oldboy01 minute=0 hour=0 job='/bin/sh /server/scripts/test.sh &>/dev/null' disabled=yes"a
ansible 172.16.1.41 -m cron -a "name=oldboy01 job='/bin/sh /server/scripts/test.sh &>/dev/n

标签:部署,1.41,自动化,--,ansible,模块,172.16,root
From: https://blog.csdn.net/a1010256340/article/details/144500073

相关文章

  • Springboot家政服务信息管理系统的设计与实现xx5fl(程序+源码+数据库+调试部署+开发环
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,员工,服务项目,预约信息,订单信息,服务评价开题报告内容一、研究背景与意义随着现代社会的快速发展和生活节奏的加快,家政服务已成为许多家庭生活中不可或......
  • Springboot家政服务公司网站b8fk1(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,员工,公司简介,家庭保洁,保洁订单,月嫂信息,月嫂预约,同城搬家,搬家订单,家电卫士,维修订单,服务评价,人才招聘开题报告内容一、选题背景与意义随着城市化......
  • Springboot家有余香鲜花网0r95n(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,类别,鲜花信息开题报告内容一、研究背景与意义随着互联网的普及和电子商务的蓬勃发展,网上购物已成为人们日常生活的一部分。鲜花作为表达情感、美化生活的......
  • 面试革命:RPA自动化如何让招聘流程飞起来?
    一、面试时间协调方面根据面试官和候选人的时区自动调整面试时间。举例:如果面试官在不同时区,RPA可以自动计算出合适的面试时间,避免时间冲突。分析面试官和候选人的日程安排,找出最佳的面试时间窗口。例如,优先选择双方都有较长连续空闲时间的时段进行面试安排。对于紧急......
  • RV1126平台下的MobileSeg量化指南:高效部署低算力硬件
    1引言MobileSeg系列模型采用编解码架构,并以轻量级模型作为骨干网络,专为低算力硬件(如BPU、NPU、ARMCPU等)设计。这使得MobileSeg在边缘设备和移动端应用中表现出色,具备高效能和灵活性。本文将以MobileSeg分割模型为例,详细讲解如何在RV1126平台上进行模型量化操作,最大化发挥......
  • 基于java的SpringBoot/SSM+Vue+uniapp的大学校园防疫与服务系统的详细设计和实现(源码
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • ssm高校学生宿舍管理系统0dh5y(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景高校学生宿舍作为学生学习与生活的重要场所,其管理效率与质量直接影响到学生的校园生活体验。然而,传统的人工管理方式存在诸多不足,如信......
  • ssm高校学生学业预警系统6lc3u程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着高等教育的普及,高校学生人数激增,学业问题日益突出。为及时发现并解决学生的学业困难,预防学业失败,我们计划开发“高校学生学业预警......
  • Dinky 玩起来如何(部署篇)?
    Dinky玩起来如何(部署篇)?前面文章聊过了streampark,这不,应广大网友邀请,这次咱再来看看Dinky(之前也叫Dink),同样是另一款号称流式计算的开发管理平台。对于这块软件的介绍,官网描述的相对更加简单朴素,从提供的信息来看,目前用户可以使用和下载的版本,只有0.6和0.7。从官网能......
  • TensorRT-LLM 调整和部署 LoRA
    TensorRT-LLM调整和部署LoRANVIDIA开发者计划想要了解有关NIM的更多信息?加入NVIDIA开发者计划,即可免费访问任何基础设施云、数据中心或个人工作站上最多16个GPU上的自托管NVIDIANIM和微服务。加入免费的NVIDIA开发者计划后,您可以随时通过NVIDIAAPI目......