Ansible自动化运维以及模块使用

ansible的作用

  1. 远程操作主机功能

  2. 自动化运维(playbook剧本基于yaml格式书写)

ansible是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起

ansible能够批量配置、部署、管理上千台主机。类似于Xshell的一键输入工具。不需要每次都切换主机操作。只要有一台ansible主机,就可以对所有节点操作

ansible不需要agent,客户端。只需要一台主机配置了ansible即可。

ansible基于模块进行工作,只是提供了一种运行的架构。执行操作和辩证的是ansible的模块来实现的。例如:copy模块、service模块

ansible默认是通过ssh的密钥队实现通信(可以自定义,但是一般不更改)

Ansible的特点:所有模块都是幂等性

所谓幂等性指的是多次操作或者多次执行对系统资源的影响是一致的。

例如:

systemctl stop firewalld之后再执行一次这个命令。只要发现要停止的目标服务已经停止了,后续同样的停止操作,不会改变任何结果。

但是systemctl restart firewalld这样的命令每一次操作都会先停止再启动。所以它不属于幂等性。

http的get这样的命令也属于幂等性

post不属于幂等性。即便多次执行相同的post可以创建多个相同的资源。虽然数据相同,但是也创建了不同的资源。

ansible的幂等性决定了可以重复执行某个任务,绝大多数情况下不会对结果产生任何影响(不绝对)

Ansible的四大组件

1、 lnventory主机清单:又叫主机组。定义ansible可以远程操作的服务器。可以理解为声明哪些机器是ansible可以操作的。

2、 模块:常用的模块有13个。通过这些模块可以实现远程的配置和操作。

3、 Plugins插件

4、 Playbook剧本:可以理解为shell脚本。但是格式是yaml格式。

Ansible的优缺点

优点:

1、 部署很简单,主要在控制主机部署即可。被控制的主机需要有ssh和python2.5以上版本。基本上Linux都是自带的。

2、 ansible只能控制Linux系统,无法控制Windows系统。是专门为Linux系统打造的。

3、基于模块工作。可以使用任意语言开发模块(二次开发,底层架构)

ansible的命令格式

语法:

ansible 组名/ip -m 模块名称 -a '参数列表(执行的命令)'

ansible的模块

1、 command模块

在远程主机上执行Linux的命令,不支持管道符,重定向输出。只能在目标主机上执行一般的Linux命令

ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令

如果不加-m也就是不声明使用的模块。那么默认就是使用command模块只能执行一般的命令。不支持管道和重定向

ansible 20.0.0.20 -a 'date'
#只能执行一般的命令。不支持管道和重定向

2、 shell模块

在远程主机执行命令,相当于在执行shell命令,支持管道符和重定向

ansible 20.0.0.20 -m shell -a 'useradd test'
#远程创建用户
ansible 20.0.0.20 -m command -a 'cat /etc/password'
ansible 20.0.0.20 -m shell -a 'echo 123456 | passwd --stdin test'
#给test用户创建密码
ansible 20.0.0.20 -m shell -a "echo $(ifconfig ens33 | awk 'NR==2{print $2}')"

ansible无法执行交互的命令

在Ansible当中多个引号之间要做隔离

ansible 20.0.0.30 -m shell -a 'touch /opt/123 && echo 123 > /opt/123 && ls /opt/ && cat /opt/123'

多个命令可以使用&&连接在一起只限于shell模块

这里&&表示逻辑且:前一个命令执行成功才会执行后一个命令

ansible 20.0.0.30 -m shell -a 'touch 456 ; echo zyg > /opt/456 ; cat /opt/456'

这里;表示逻辑或:前一个命令执行成功与否,后面的命令都会执行。

3、 cron模块

远程给主机设置定时任务

两种状态:

present:表示添加(默认就是添加,可以省略)

absent:表示移除。absent在整个ansible的语法中都表示移除

分:minute

时:hour

日:day

月:mounth

周:weekday

job:任务执行的命令

name:任务计划的名称

ansible 20.0.0.20 -m cron -a 'minute="*/5" job="ls /opt/" name="test1"'
ansible 20.0.0.20 -a 'crontab -l'

远程删除定时任务

ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="test1" state=absent'
#state=absent:声明状态为删除
ansible 20.0.0.20 -a 'crontab -l'
ansible 20.0.0.20 -m cron -a 'name="None" state=absent'
#如果名字是None直接删除None
#如果有多个None会都被删除

多个计划任务,如果不给名字都是None,一旦删除None,会全部删除。所以不删除(最好是指定一个不重复的名字)

4、 user模块

用户管理模块

常见参数:

name:指定用户名,必须要有

两种模式state:present absent

创建用户可以不加present,但是删除一定要加absent

system=yes | no:标记用户是否是一个程序用户。如果是yes表示是程序用户

还需要使用shell=yes声明程序用户使用的shell

uid:用户的唯一标识

group:用户的所在组

create_home=yes | no:替换用户的家目录。yes表示替换。如果不需要替换用户家目录可以不写

password:创建用户的密码

comment:用户的注释信息。可有可无

remove=yes | no:当删除用户时,加上rmove=yes表示删除用户的家目录。可以理解为userdel -r 如果不需要删除家目录,可以不写。

ansible 20.0.0.20 -m user -a 'name=zygg system=yes'
ansible 20.0.0.20 -a "cat /etc/passwd"

在创建用户时虽然声明了是一个程序用户,但是默认的登录shell如果没有额外声明,还是默认的/bin/bash。但是uid会按照程序用户指定。

ansible 20.0.0.20 -m user -a 'name=zygg1 shell=/sbin/nologin'
#声明用户的shell

使用ansible的user模块创建用户时,如果创建普通用户,可以不加system=no,指定shell类型也可以不加,默认就是/bin/bash。如果创建的是程序用户,一定要声明system=yes同时声明shell的类型shell=/sbin/nologin。

也可以指定uid的方式给用户分配一个uid

ansible 20.0.0.20 -m user 'name=zygg2 uid=1010 password="123456" home=/opt/test1'
ansible 20.0.0.20 -a 'cat /etc/passwd'
ansible 20.0.0.20 -m user -a 'name=zygg2 home=/home/zygg2 create_home=yes'
#home=/home/zygg2:声明跟新后家目录的位置
#create_home=yes:表示需要更改

删除指定用户

ansible 20.0.0.20 -m user -a 'name=zygg2 remove=yes state=absent'
#声明删除用户且一并删除家目录可以理解为userdel -r

5、 group模块

用户组管理模块

name:指定名称必须要有

gid:设置组id

ansible 20.0.0.30 -m group -a 'name=zyg gid=306 system=yes'
#创建一个组而不是用户
ansible 20.0.0.30 -a 'cat /etc/group'

添加用户时候指定组

ansible 20.0.0.30 -m user -a 'name=zygg uid=1011 group=zyg'
#创建用户并指定组
ansible 20.0.0.30 -a 'cat /etc/passwd'

5、 ping模块

检测主机的连通性

ping

6、 ping模块

远程测试主机的连通性

ping

ansible 20.0.0.20 -m ping

只有在ansible主机内的/etc/ansible/hosts声明过的主机,ansible的服务端才可以远程操作

7、 hostname模块

设定管理远程主机的主机名

ansible 20.0.0.30 -m hostname -a 'name=test3'

8、 copy模块

用于复制指定的主机文件到远程主机的命令

常用的参数:

dest:指出要复制的文件在哪。必须使用绝对路径。如果源目标是目录那么指目标也得是目录。如果目标文件存在会覆盖原有内容

src:复制文件的源。最好使用绝对路径。源目标是目录,那么指目标也得是目录。

owner:指出文件的所有者

group:指定文件的所在组

content:从主机复制指定的内容到目标主机。使用了content就不能使用src了。作用相当于替代了src

mode:指定复制之后的文件权限

ansible 20.0.0.20 -m copy -a 'src=/opt/123 dest=/opt/123.txt owner=zyg mode=655'
#src=/opt/123:原文件
#dest=/opt/123.txt:目标文件
#owner=zyg:所有者
#mode=655:文件权限

复制目录时,还是复制完整的目录,即目录当中不能为空。目录内最终要有一个文件

ansible 20.0.0.20 -m copy -a 'content="hello world" dest=/opt/hello.txt'
#指定内容复制,使用content。可以理解为echo命令
#使用了content就不需要使用src了
​
ansible 20.0.0.30 -a 'mv /opt/hello.txt /opt/zyg.txt'
#mv使用command模块即可实现

9、 file模块

管理文件属性,属于文件模块,跟目录无关

owner:所有者

group:所在组

mode:权限

state=link:创建连接文件

state=touch:创建文件

state=absent:删除文件

path:声明文件路径

ansible 20.0.0.30 -m file -a 'path=/opt/zyg.txt state=touch'
#path=/opt/zyg.txt:声明客户机的路径和文件名称
#state=touch:类型为创建文件
ansible 20.0.0.30 -m file -a 'owner=zyg group=zyg1 mode=777 path=/opt/zyg.txt'

设置连接文件

ansible 20.0.0.30 -m file -a 'path=/opt/ky32.link src=/opt/ky32.txt state=link'

远程删除文件

ansible 20.0.0.30 -m file -a 'path=/opt/fstab.link state=absent'

10、yum模块

在远程主机上安装、卸载软件包

ansible 20.0.0.20 -m yum -a 'name=httpd'

在目标主机上的操作都是后台运行,不影响其他用户使用

远程卸载软件包

ansible 20.0.0.20 -m yum -a 'name=tree state=absent'

远程开启服务

11、 service/systemd模块

name:设定管理服务的名称

state=started | stopped | restarted:启动、停止和重启。三种管理动作

enabled=true:是否设置开机自启。如果不加默认就是不自动启动

runlevel:配合enabled的。如果设置开机自启,可以设置运行级别。在命令行设置,但是不生效,一般不在命令行操作

ansible 20.0.0.20 -m service -a 'enabled=true name=httpd state=restarted'

安装nginx服务,设置为开机自启,设置访问页面this is nignx

ansible 20.0.0.20 -m shell -a 'echo "this is nginx" > /usr/local/nginx/html/index.html'
#设置nginx服务的页面
ansible 20.0.0.20 -m service -a 'enabled=true name=nginx state=restarted'
#启动nginx服务并设置为开机自启
ansible 20.0.0.20 -a 'curl 20.0.0.20'
#终端访问测试一下

12、 script模块

运行本地脚本,然后把结果输出到i目标主机

vim test1.sh
echo "hello world" > /opt/test2.txt
chmod 777 test1.sh
ansible all -m script -a 'test1.sh'
ansible all -a 'cat test2.txt'

13、 setup模块

setup查看目标主机的环境系统(facts),目标节点的系统信息。

*:表示所有

filter:用于过滤。查看IP地址

ansible 20.0.0.20 -m setup
ansible all -m setup -a 'filter=*ipv4'
ansible all -m setup -a 'filter=model'
ansible all -m setup -a 'filter=ansible_mem*'
#过滤查找包含内存的信息
ansible all -m setup -a 'filter=ansible_proc*'
#过滤查找包含内核的信息
ansible all -m setup -a 'filter=*os*'
#过滤查找os信息底层信息
ansible all -m setup -a 'filter=*system*'
#过滤查找系统信息
ansible all -m setup -a 'filter=*dev*'
#过滤查找查看硬盘

管理主机清单

快速声明多个主机

vim /etc/ansible/hosts
20.0.0.6[1:3]
#声明主机范围。表示声明20.0.0.61-63主机

取消密钥队免密登录

ansible_host:声明连接时的IP地址

ansible_port:声明对方的连接端口。默认是ssh的默认端口

ansible_user:指定连接时使用对方主机的用户名。不指定表示主机执行ansible的用户即为使用目标主机的用户名

ansible_password:指定连接ssh时的密码。这里是目标主机的用户密码

ansible_become:提升用户权限。也可以改变用户的身份

例如:ansible_become root。需要声明用户的密码

ansible_become-password:指定切换用户的密码。基于免密钥登录实现。

vim /etc/ansible/hosts
#声明主机清单管理组当中的变量名
20.0.0.40 ansible_port=22 ansible_user=root ansible_password=123
vim /etc/ansible/ansible.cfg
---71行取消注释---
host_key_checking = False
#表示取消ssh的密钥队验证
ansible 20.0.0.40 -m ping
​
声明组变量
[webservers:vars]
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22
​
声明所有的主机都是用相同的用户名密码和端口
[all:vars1]
ansible_user=root
#所有主机用户都是root
ansible_password=123
#所有主机密码都是123
ansible_port=22
#所有主机端口都是22

实现组之间的嵌套

声明一个组可以放入多个组

vim /etc/ansible/hosts
[webs:children]
#:children:变量名称可以自定义,但是不能重复
dbservers
webservers
#表示这两个组都在wes这个组里面
ansible webs -m ping

Ansible部署

实验准备

管理端:20.0.0.10  ansible
被管理端1:20.0.0.20
被管理端2:20.0.0.30
被管理端(备用):20.0.0.40
yum -y install epel-release
#安装ansible必须安装epel源
yum -y install ansible
#安装ansible主程序
cd /etc/ansible
ansible.cfg
#ansible的配置文件。一般无需修改
hosts
#主机组。声明可以被控制的主机
roles
#公共角色目录vim /etc/ansible/hosts
配置主机有两种方式:
1.直接声明主机的IP地址
2.声明主机名。需要提前在/etc/hosts/里做映射
cd /opt/
ssh-keygen -t rsa
#创建密钥队
ansible 20.0.0.20 -m command -a 'date'
ansible 20.0.0.30 -m command -a 'date'
#先运行ansible的命令
sshpass -p '123' ssh-copy-id root@20.0.0.20
sshpass -p '123' ssh-copy-id root@20.0.0.30
#再将密钥队传给20和30
ansible 20.0.0.20 -m command -a 'date'
#测试是否可以运行
tail -f /var/log/messages
#可以查看记录
ansible webservers -m command -a 'ls /opt'
#webservers:针对组。这个组内所有的主机都会执行这个命令
ansible all -m command -a 'ls /opt'
#all:表示所有组内所有主机都会执行这个命令

配置主机有两种方式:

1、 直接声明主机的IP地址

2、 声明主机名。需要提前在/etc/hosts/里做映射

 

需要先使用ansible 20.0.0.20 -m command -a 'date'命令建立连接再将密钥队传给备用主机

会执行但是不会显示只能在本地日志查看到

ansible的常用参数

chdir:在远程主机上运行命令,提前进入目录

ansible all -m command -a 'chdir=/home ls'
#表示所有主机先进入home目录在执行ls这个命令

creates:判断指定文件是否存在,如果存在,不执行后续操作

ansible all -m command -a 'creates=/opt/123 ls /opt/'

removes:判断指定文件是否存在,如果存在,执行后续操作

ansible all -m command -a 'removes=/opt/123 ls /opt/'

总结

1、 command模块:只能执行基础命令操作,不支持管道符和重定向。只有command模块可以不加-m

2、 shell模块:支持管道符和重定向,多个命令可以写在一起

&&:逻辑且。前一个命令执行成功才能只能下一个命令

;:逻辑或。前一个命令执行失败,也可以执行下一个命令

3、 cron模块:远程给主机设置定时任务

4、user模块:添加用户

5、 group模块:添加组

6、 ping模块

7、 hostname模块

8、 copy模块

9、 file模块

10、 yum模块

11、 service/systemd模块

12、 script模块

13、 setup模块

管理主机清单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/221225.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控k8s controller和scheduler,创建serviceMonitor以及Rules

目录 一、修改kube-controller和kube-schduler的yaml文件 二、创建service、endpoint、serviceMonitor 三、Prometheus验证 四、创建PrometheusRule资源 五、Prometheus验证 直接上干货 一、修改kube-controller和kube-schduler的yaml文件 注意:修改时要一个节…

MATLAB - 最优控制(Optimal Control)

系列文章目录 前言 - 什么是最优控制? 最优控制是动态系统满足设计目标的条件。最优控制是通过执行以下定义的最优性标准的控制律来实现的。一些广泛使用的最优控制方法有: 线性二次调节器 (LQR)/线性二次高斯 (LQG) 控制 模型预测控制 强化学习 极值…

K8s攻击案例:RBAC配置不当导致集群接管

01、概述 Service Account本质是服务账号,是Pod连接K8s集群的凭证。在默认情况下,系统会为创建的Pod提供一个默认的Service Account,用户也可以自定义Service Account,与Service Account关联的凭证会自动挂载到Pod的文件系统中。 …

Golang(壹)

爱情不需要华丽的言语,只需要默默的行动。 简介 应用领域: 下载vscode 使用vscode Go下载 - Go语言中文网 - Golang中文社区 下载sdk 解压到文件中,打开sdk解压文件 穿插dos操作系统知识点: 测试go语言环境 看到vscode 的目录结…

urllib2 HTTP头部注入

文章目录 注入原理例题 [SWPU 2016]web7 注入原理 参考文章 应用场景是具有SSRF漏洞,结合CRLF注入 我们以redis数据库为例,当存在SSRF时我们伪造以下请求 http://127.0.0.1%0d%0aCONFIG%20SET%20dir%20%2ftmp%0d%0aCONFIG%20SET%20dbfilename%20evil%…

ABAP与HANA集成 2:ABAP调用HANA存储过程或SQL语句

作者 idan lian 如需转载备注出处 需求 虽然是做BW模块,但是最近项目上种种,都需要给ABAP人员或者前台用户提供能供他们使用的表,就稍微研究了下ABAP和HANA的集成问题,因为我们BW更擅长的还是HANA,而且HANA的运行效…

C++学习笔记(十二)------is_a关系(继承关系)

你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 提示:以下是本篇文章正文内容,下面案例可供参考 文章目录 前言 一、继承关系…

元宇宙3d展厅全景导览系统为现代展会的举办带来了全新的可能性和机遇。

3D元宇宙展会搭建平台的亮点 随着科技的不断进步,3D元宇宙展会搭建平台已经成为了现代展会的新趋势。这种全新的展会形式不仅给人们带来了前所未有的视觉体验,还具备许多亮点和优势,让展会的举办更加高效、便捷和创新。 一、突破时空限制 3D元…

长短期记忆(LSTM)神经网络-多输入分类

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

fastjson1.2.24 反序列化漏洞(CVE-2017-18349)分析

FastJson在< 1.2.24 版本中存在反序列化漏洞&#xff0c;主要原因FastJson支持的两个特性&#xff1a; fastjson反序列化时&#xff0c;JSON字符串中的type字段&#xff0c;用来表明指定反序列化的目标恶意对象类。fastjson反序列化时&#xff0c;字符串时会自动调用恶意对…

Python 正则表达式入门:轻松掌握字符串匹配的艺术

Python 正则表达式入门&#xff1a;轻松掌握字符串匹配的艺术 引言&#xff1a;什么是正则表达式&#xff1f;基础知识&#xff1a;正则表达式的语法和规则Python中的正则表达式&#xff1a;re模块的使用实战应用&#xff1a;常见的正则表达式案例最佳实践与常见错误结语&#…

如何在Ubuntu系统中安装VNC并结合内网穿透实现远程访问桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

安全运营之安全加固和运维

安全运营是一个将技术、流程和人有机结合的复杂系统工程&#xff0c;通过对已有安全产品、工具和服务产出的数据进行有效的分析&#xff0c;持续输出价值&#xff0c;解决安全问题&#xff0c;以确保网络安全为最终目标。 安全加固和运维是网络安全运营中的两个重要方面。 安全…

wsl kafka的简单应用

安装并配置单机版kafka所需环境 wsl2 环境可用性较高&#xff0c;如下介绍在该环境中安装单机版本kafka的详细过程。 启动命令行工具启动wsl&#xff1a;wsl --user root --cd ~&#xff0c;&#xff08;以root用户启动&#xff0c;进入wsl后当前路径为~“用户主目录”&#…

【Python炫酷系列】祝考研的友友们金榜题名吖(完整代码)

文章目录 环境需求完整代码详细分析系列文章环境需求 python3.11.4及以上版本PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度&#xff1f; ✅什么是算子链&#xff1f; ✅什么是任务槽&#xff08;Task Slots&#xff09;&#xff1f; ✅任务槽和并行度的关系 ✅Flink作…

临近2024年,你还不知道用模板做小程序吗

2024年即将到来&#xff0c;别担心 &#xff0c;作为一款稳定的服务商&#xff0c;乔拓云提供了小程序模板和模板编辑器。 通过使用乔拓云平台&#xff0c;你可以轻松搭建一个自带营销工具的小程序&#xff0c;无需投入大量的时间和成本&#xff0c;实现前后端一体化高效研发&a…

开源IPad Pro应用IDE:使用SSH远程连接服务器进行云端编程开发

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

2023年中国法拍房用户画像和数据分析

法拍房主要平台 法拍房主要平台有3家&#xff0c;分别是阿里、京东和北交互联平台。目前官方认定纳入网络司法拍卖的平台共有7家&#xff0c;其中阿里资产司法拍卖平台的挂拍量最大。 阿里法拍房 阿里法拍房数据显示2017年&#xff0c;全国法拍房9000套&#xff1b;2018年&a…

MyBatis——MyBatis的CRUD(增删改查)

1.MyBatis的CRUD 创建工程&#xff1a; 1.1.查询 1.1.1.单个参数绑定 //单个参数传递public User findUserById(Integer id);<!--parameterType:指定输入参数的类型resultType&#xff1a;指定数据结果封装的数据类型#{id}&#xff1a;它代表占位符&#xff0c;相当于原来…