自动化运维—ansible

一、 Ansible 介绍

Ansible 是一种 IT 自动化工具。它可以配置管理,部署软件以及协调更高级的 IT 任务, 例如持续部署,滚动更新。 Ansible 适用于管理企业 IT 基础设施,从 几十台到上百台的服务器环境。Ansible 也是一种简单的自动化语言,可以完美 地描述 IT 应用程序基础结构。

官方文档:https://docs.ansible.com

二、特点

简单 – 减少学习成本

•    易读的描述语言

•    无需特殊编码技能

•    任务按顺序执行

强大 – 协调应用程序生命周期

•    应用部署

•    配置管理

•    工作流程编排

无代理 – 可预测,可靠和安全

•    无代理架构

•    使用 OpenSSH 通信

•    没有代理维护成本

架构:

核心组件:

•    Inventory:Ansible 管理的主机信息,包括 IP 地址、 SSH 端口、账号、密码 等;

•    Modules:任务均有模块完成,也可以自定义模块,例如经常用的脚本;

•    Plugins:使用插件增加Ansible 核心功能,自身提供了很多插件, 也可以自定义插件。例如 connection 插件, 用于连接目标主机。 callback 插件可以将 结果输出到其他地方。vars 插件将定义的比变量注入到Ansible 中运行。

•    Playbooks:“剧本”,模块化定义一系列任务,供外部统一调用。Ansible 核心功能。

三、 Ansible 安装与配置

1)ansible环境搭建

实验准备:三台机器,一台管理,两台被管理

master 192.168.115.3

hd1 192.168.115.4

hd2 192.168.115.5

配置/etc/hosts文件

master

hd1

hd2

2)master安装ansible

1、确认和配置yum源(需要epel源)

2、安装ansible

3、实现master对agent的免密登录,只在master上做。(如果这一步不做,则在后面操作agent时都要加-k参数传密码;或者在主机清单里传密码)

4、在master上定义主机组,并测试连接性

vim /etc/ansible/hosts

ansible -m ping group1

四、ansible模块

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

查看所有支持的模块

ansible-doc -l

(一)hostname模块

hostname模块用于修改主机名(**注意**: 它不能修改/etc/hosts文件)

将其中一远程机器主机名修改为agent1.cluster.com

ansible 192.168.115.4  -m hostname -a 'name=agent1.cluster.com'

192.168.115.4查看

(二)file模块

file模块用于对文件相关的操作(创建, 删除, 软硬链接等)

创建一个目录

ansible group1 -m file -a 'path=/test state=directory'

192.168.115.4查看

192.168.115.5查看

创建一个文件

ansible group1 -m file -a 'path=/test/111 state=touch'

192.168.115.4查看

192.168.115.5查看

删除目录 absent 缺席的(连同目录里的所有文件)

 ansible group1 -m file -a 'path=/test state=absent'

192.168.115.4查看

192.168.115.5查看

删除文件

ansible group1 -m file -a 'path=/test/111 state=absent'

192.168.115.4查看

192.168.115.5查看

(三)stat模块

stat模块类似linux的stat命令,用于获取文件的状态信息

获取/etc/fstab文件的状态信息

ansible group1 -m stat -a 'path=/etc/fstab'

192.168.115.4查看

192.168.115.5查看

(四)copy模块

copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)

在master上准备一个文件,拷贝此文件到group1的所有机器上

echo master > /tmp/222

ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333'

192.168.115.4查看

192.168.115.5查看

使用content参数直接往远程文件里写内容(会覆盖原内容)

ansible group1 -m copy -a 'content="ha ha\n" dest=/tmp/333'

192.168.115.4查看

192.168.115.5查看

使用force参数控制是否强制覆盖

如果目标文件已经存在,则不覆盖

ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333 force=no'

192.168.115.4查看

192.168.115.5查看

如果目标文件已经存在,则会强制覆盖

ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333 force=yes'

192.168.115.4查看

192.168.115.5查看

使用backup参数控制是否备份文件

ansible group1 -m copy -a 'src=/etc/fstab dest=/tmp/333 backup=yes owner=daemon group=daemon mode=1777'

192.168.115.4查看

192.168.115.5查看

(五)fetch模块

fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。

第1步: 在两台被管理机上分别创建一个同名文件(但内容不同)

hd1#echo agent1 > /tmp/1.txt

hd2#echo agent2 > /tmp/1.txt

第2步: 从master上fecth文件(因为group1里有2台机器,为了避免同名文件文件冲突,它使用了不同的目录)

ansible group1  -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

查看

第3步: 先删除上面fetch过来的, 然后尝试只fetch其中一台机器的,也会使用名称来做子目录区分

rm /tmp/192.168.115.* -rf

ansible 192.168.115.4  -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

查看

**注意**: fetch模块不能从远程拷贝目录到本地

(六)user模块

user模块用于管理用户账号和用户属性。

创建aaa用户,默认为普通用户,创建家目录

 ansible group1 -m user -a'name=aaa state=present'

192.168.115.4查看

192.168.115.5查看

创建bbb系统用户,并且登录shell环境为/sbin/nologin

 ansible group1 -m user -a'name=bbb state=present system=yes shell="/sbin/nologin"'

192.168.115.4查看

192.168.115.5查看

创建ccc用户, 使用uid参数指定uid, 使用password参数传密码

echo 123456 | openssl passwd -1 -stdin

$1$9vW7qhvp$a93DgktaPTqmIsSMFZjQH/

下一句命令注意一下格式,密码要用双引号引起来,单引号的话验证时会密码不正确

ansible group1 -m user -a ‘ name=ccc uid=2000 state=present password=“ $1$9vW7qhvp$a93DgktaPTqmIsSMFZjQH/”’

192.168.115.4查看

192.168.115.5查看

删除aaa用户,但家目录默认没有删除

ansible group1 -m user -a 'name=aaa state=absent'

192.168.115.4查看

192.168.115.5查看

删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录

ansible group1 -m user -a 'name=bbb state=absent remove=yes'

192.168.115.4查看

192.168.115.5查看

(七)group模块

group模块用于管理用户组和用户组属性。

创建组

ansible group1 -m group -a 'name=groupa gid=3000 state=present'

192.168.115.4查看

192.168.115.5查看

删除组(如果有用户的gid为此组,则删除不了)

ansible group1 -m group -a 'name=groupa state=absent'

192.168.115.4查看

192.168.115.5查看

(八)cron模块

cron模块用于管理周期性时间任务

创建一个cron任务,不指定user的话,默认就是root(因为我这里是用root操作的)。 如果minute,hour,day,month,week不指定的话,默认都为*

ansible group1 -m cron -a 'name="test cron1" user=root job="touch /tmp/111" minute=*/2' 

192.168.115.4查看

192.168.115.5查看

删除cron任务

ansible group1 -m cron -a 'name="test cron1" state=absent'

192.168.115.4查看

192.168.115.5查看

(九)yum模块

yum模块用于使用yum命令来实现软件包的安装与卸载。

使用yum安装一个软件(前提:group1的机器上的yum配置都已经OK)

ansible group1 -m yum -a 'name=vsftpd state=present'

192.168.115.4查看

192.168.115.5查看

使用yum安装httpd,httpd-devel软件,state=latest表示安装最新版本

 ansible group1 -m yum -a 'name=httpd,httpd-devel state=latest'

192.168.115.4查看

192.168.115.5查看

使用yum卸载httpd,httpd-devel软件

ansible group1 -m yum -a 'name=httpd,httpd-devel state=absent'

192.168.115.4查看

192.168.115.5查看

(十)service模块

service模块用于控制服务的启动,关闭,开机自启动等。

启动vsftpd服务,并设为开机自动启动

ansible group1 -m service -a 'name=vsftpd state=started enabled=on'

192.168.115.4查看

192.168.115.5查看

关闭vsftpd服务,并设为开机不自动启动

ansible group1 -m service -a 'name=vsftpd state=stopped enabled=false'

192.168.115.4查看

192.168.115.5查看

(十一)script模块

script模块用于在远程机器上执行本地脚本。

在master上准备一个脚本
vim /root/1.sh
#!/bin/bash
mkdir /tmp/haha
touch /tmp/haha/{1..10}在group1的远程机器里都执行master上的/tmp/1.sh脚本(此脚本不用给执行权限)
ansible group1 -m script -a '/root/1.sh'

192.168.115.4查看

192.168.115.5查看

(十二)command与shell模块

两个模块都是用于执行linux命令的,这对于命令熟悉的工程师来说,用起来非常high。

shell模块与command模块差不多(command模块不能执行一些类似$HOME,>,<,|等符号,但shell可以)

注意: shell模块并不是百分之百任何命令都可以,比如vim或ll别名就不可以。不建议大家去记忆哪些命令不可以,大家只要养成任何在生产环境里的命令都要先在测试环境里测试一下的习惯就好。

 ansible -m command group1 -a "useradd user2"

192.168.115.4查看

192.168.115.5查看

ansible -m command group1 -a "id user2"

五、playbook

playbook(剧本): 是ansible用于配置,部署,和管理被控节点的剧本。用于ansible操作的编排。

使用的格式为yaml格式(saltstack,elk,docker,docker-compose,kubernetes等也都会用到yaml格式)

(一)YMAL格式

  • 以.yaml或.yml结尾

  • 文件的第一行以 "---"开始,表明YMAL文件的开始(可选的)

  • 以#号开头为注释

  • 列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格)

  • 一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格)

  • ==注意: 写这种文件不要使用tab键,都使用空格==

(二)playbook实例

第1步: 创建一个存放playbook的目录(路径自定义)

mkdir /etc/ansible/playbook

第2步: 准备httpd配置文件,并修改成你想要的配置

yum install httpd -y​
按需要修改你想要的配置(为了测试可以随意改动标记一下)
vim /etc/httpd/conf/httpd.conf

第3步: 写一个playbook文件(后缀为.yml或.yaml)

vim /etc/ansible/playbook/example.yaml
---
- hosts: group1remote_user: roottasks:  - name: ensure apache is at the latest version    yum: name=httpd,httpd-devel state=latest- name: write the apache config file      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.confnotify:- restart apache- name: ensure apache is running (and enable it at boot)service: name=httpd state=started enabled=yeshandlers: - name: restart apacheservice: name=httpd state=restarted

第4步: 执行写好的palybook

  • 会显示出执行的过程,并且执行的每一步都有ok,changed,failed等标识

  • 执行如果有错误(failed)会回滚,解决问题后,直接再执行这条命令即可,并会把failed改为changed(幂等性)

# ansible-playbook /etc/ansible/playbook/example.yaml

192.168.115.4查看

192.168.115.5查看

(三)Playbook常见语法

hosts: 用于指定要执行任务的主机,其可以是一个或多个由冒号分隔主机组.

remote_user: 用于指定远程主机上的执行任务的用户.

tasks: 任务列表, 按顺序执行任务.

  • 如果一个host执行task失败, 整个tasks都会回滚, 修正playbook 中的错误, 然后重新执行即可.

handlers: 类似task,但需要使用notify通知调用。

  • 不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次.

  • handlers最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.

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

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

相关文章

上海控安SmartRocket系列产品推介(六):SmartRocket PeneX汽车网络安全测试系统

产品概述 上海控安汽车网络安全测试系统PeneX&#xff08;Penetrator X&#xff09;是一款支持对整车及车辆零部件及子系统实施网络安全测试的系统&#xff0c;其包含硬件安全、软件系统安全、车内通信及车外通信四大安全测试系统&#xff1b;支持合规性测试&#xff0c;包含国…

LLMs之Falcon 180B:Falcon 180B的简介、安装、使用方法之详细攻略

LLMs之Falcon 180B&#xff1a;Falcon 180B的简介、安装、使用方法之详细攻略 导读&#xff1a;2023年9月7日(北京时间)&#xff0c;TII重磅发布Falcon-180B模型&#xff0c;它是Falcon系列的升级版本&#xff0c;是一个参数规模庞大、性能优越的开放语言模型&#xff0c;适用于…

Jetsonnano B01 笔记7:Mediapipe与人脸手势识别

今日继续我的Jetsonnano学习之路&#xff0c;今日学习安装使用的是&#xff1a;MediaPipe 一款开源的多媒体机器学习模型应用框架。可在移动设备、工作站和服务 器上跨平台运行&#xff0c;并支持移动 GPU 加速。 介绍与程序搬运官方&#xff0c;只是自己的学习记录笔记&am…

云原生Kubernetes:kubectl管理命令

目录 一、理论 1.K8S资源管理方法 2.kubectl 管理命令 3.项目的生命周期 二、实验 1.kubectl 管理命令 2.项目的生命周期 三、总结 一、理论 1.K8S资源管理方法 &#xff08;1&#xff09;管理K8S资源的三种基本方法&#xff1a; ① 陈述式资源管理方法-使用cli工具进…

【web开发】2、css基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、CSS是什么&#xff1f;二、使用步骤2.1.css的存放位置2.2.选择器2.3.常用CSS样式介绍与示例 一、CSS是什么&#xff1f; 层叠样式表(英文全称&#xff1a;Casc…

文献阅读:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

文献阅读&#xff1a;Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 1. 文章简介2. 具体方法3. 实验结果 1. 数学推理 1. 实验设计2. 实验结果3. 消解实验4. 鲁棒性考察 2. 常识推理 1. 实验设计2. 实验结果 3. 符号推理 1. 实验设计2. 实验结果 4.…

单片机-蜂鸣器

简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电 蜂鸣器主要分为 压电式蜂鸣器 和 电磁式蜂鸣器 两 种类型。 压电式蜂鸣器 主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成&#xff0c;当接通电源后&…

Excel VSTO开发7 -可视化界面开发

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 7 可视化界面开发 前面的代码都是基于插件启动或者退出时&#xff0c;以及Excel Application的相关事件&#xff0c;在用户实际操作…

maven管理android项目

maven管理android项目 1.安装maven-android-sdk-deployer&#xff0c;下载地址&#xff1a;https://github.com/mosabua/maven-android-sdk-deployer 2.解压缩大英文路径文件夹 3.在压缩后的根目录执行mvn clean install -P 2.3.3&#xff08;2.3.3指的是android版本号&#x…

创建数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: create database 数据库名称 charset 字符集; 其中: create: 创建 database: 数据库 charset: 字符集 说明: 常见的字符集:utf8(最常用…

leetcode 925. 长按键入

2023.9.7 我的基本思路是两数组字符逐一对比&#xff0c;遇到不同的字符&#xff0c;判断一下typed与上一字符是否相同&#xff0c;不相同返回false&#xff0c;相同则继续对比。 最后要分别判断name和typed分别先遍历完时的情况。直接看代码&#xff1a; class Solution { p…

docker介绍和安装

docker安装 下载Docker依赖组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker的镜像源为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo 安装Docker服务 yum -y install docker-ce 安…

CSS 斜条纹进度条

效果&#xff1a; 代码&#xff1a; html: <div class"active-line flex"><!-- lineWidth&#xff1a;灰色背景 --><div class"bg-line"><div v-for"n in 30" class"gray"></div></div><div…

手写数据库连接池

数据库连接是个耗时操作.对数据库连接的高效管理影响应用程序的性能指标. 数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配,管理和释放数据库连接.它允许应用程序重复使用一个现有的数据路连接,而不需要每次重新建立一个新的连接,利用数据库连接池将明显提升对数…

非结构化数据之XPath学习

1、XPath语法 XPath 是一门在 XML 文档中查找信息的语言。 XPath 可用来在 XML 文档中对元素和属性进行遍历。 <?xml version"1.0" encoding"ISO-8859-1"?> <bookstore> <book><title lang"eng">Harry Potter</t…

【excel】万字长文,一些实用excel技巧,金融财务行业巨实用(最后有干货,配合chatgpt让你成为excel大佬)

本文主要记录一些在工作中经常能用到的excel技巧&#xff0c;能够帮助我们提高工作效率。在文章的最后还会通过几个实战例子来加深大家的理解。建议把本文作为备查文&#xff0c;不需要在阅读本文的当下就将这些技巧掌握&#xff0c;只需了解&#xff0c;哪些东西通过excel是能…

ComfyUI 安装

背景&#xff1a; stable diffussion XL最先适配&#xff0c;专业性强的SD操作界面 安装步骤&#xff1a; git clone GitHub - comfyanonymous/ComfyUI: A powerful and modular stable diffusion GUI with a graph/nodes interface. 1、pip install torch torchvision torc…

【CUDA OUT OF MEMORY】【Pytorch】计算图与CUDA OOM

计算图与CUDA OOM 在实践过程中多次碰到了CUDA OOM的问题&#xff0c;有时候这个问题是很好解决的&#xff0c;有时候DEBUG一整天还是头皮发麻。 最近实践对由于计算图积累导致CUDA OOM有一点新的看法&#xff0c;写下来记录一下。包括对计算图的一些看法和一个由于计算图引发…

【小沐学NLP】Python使用NLTK库的入门教程

文章目录 1、简介2、安装2.1 安装nltk库2.2 安装nltk语料库 3、测试3.1 分句分词3.2 停用词过滤3.3 词干提取3.4 词形/词干还原3.5 同义词与反义词3.6 语义相关性3.7 词性标注3.8 命名实体识别3.9 Text对象3.10 文本分类3.11 其他分类器3.12 数据清洗 结语 1、简介 NLTK - 自然…

python的包管理

要在 mypackage 包外使用 mypackage 包里的 speak.py 文件以及 newpackage 包里的 jump.py 文件&#xff0c;你需要确保以下几个步骤&#xff1a; 确保目录结构正确&#xff0c;如下所示&#xff1a; mypackage/__init__.pyspeak.pynewpackage/__init__.pyjump.py在 speak.py…