自动化运维—ansible

news2024/11/15 13:29:15

一、 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上准备一个脚本
master# vim /tmp/1.sh
#!/bin/bash
mkdir /tmp/haha
touch /tmp/haha/{1..10}

在group1的远程机器里都执行master上的/tmp/1.sh脚本(此脚本不用给执行权限)
ansible group1 -m script -a '/tmp/1.sh'

(十二)command与shell模块

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

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

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

 ansible -m command group1 -a "useradd user2"

ansible -m command group1 -a "id user2"

ansible -m command group1 -a "cat /etc/passwd |wc -l"        --报错

ansible -m shell group1 -a "cat /etc/passwd |wc -l"        --成功

ansible -m command group1 -a "cd $HOME;pwd"      --报错

ansible -m shell  group1 -a "cd $HOME;pwd"      --成功

五、playbook

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

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

(一)YMAL格式

  • 以.yaml或.yml结尾

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

  • 以#号开头为注释

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

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

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

(二)playbook实例

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

master# mkdir /etc/ansible/playbook

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

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

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

# vim /etc/ansible/playbook/example.yaml
---
- hosts: group1
  remote_user: root
  tasks:  
  - 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.conf
    
    notify:
    - restart apache
    
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
    
  handlers: 
    - name: restart apache
      service: name=httpd state=restarted

第4步: 执行写好的palybook

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

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

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

(三)Playbook常见语法

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

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

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

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

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

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

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

案例: playbook编排vsftpd

(四)playbook编排多个hosts任务

案例: 编排nfs搭建与客户端挂载

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

既是管理又是执行者,如何清晰地进行工作总结呢?

摘要&#xff1a;作为管理者和执行者&#xff0c;清晰地进行工作总结对于提高效率和推动团队发展至关重要。本文将探讨一些技巧和方法&#xff0c;帮助管理者清晰地进行工作总结。 正文&#xff1a; 工作总结对于管理者来说是一项关键任务&#xff0c;它可以帮助回顾工作进展…

selenium自动化测试过程中接口的调用信息

在上一篇中我也给自己提出一个需求&#xff1a;如果记录在测试过程中接口的调用情况&#xff1f;提出这个需求&#xff0c;我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题&#xff0c;比如&#xff1a;web某个页面一直在刷进度条&#xff0c;导致你定位元素失败…

kubernetes 之 minikube折腾记

参考官网教程&#xff0c;链接&#xff1a; https://minikube.sigs.k8s.io/docs/start/ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube安装完启动minikube&#xff1a;…

超高真空度精密控制解决方案设计中百度“文心一言”的具体应用

摘要&#xff1a;本文采用国产版本ChatGPT百度“文心一言”作为一种辅助工具&#xff0c;针对超高真空度精密控制装置的开发进行了初期的技术路线设计&#xff0c;对话调研的重点是了解可调节式微流量进气阀门和可用于连接非线性输出信号型真空计的PID控制器。总体而言&#xf…

【容器vs虚拟机】

容器vs虚拟机 为什么用虚拟机什么是容器容器vs虚拟机 Docker被称为是轻量级的虚拟化。 首先&#xff0c;一般开发所需要的都是Linux环境&#xff0c;但我们大多数人的电脑都是Windows系统。所以要安装虚拟机&#xff0c;目的是为了在我们当前所使用的Windows上面安装上Linux环境…

韶音耳机是哪个国家的品牌,韶音骨传导耳机值得入手吗

有很多小伙伴们在后台私信我&#xff0c;问我韶音耳机是哪个国家的品牌&#xff0c;以及韶音骨传导耳机值不值得入手等问题&#xff0c;其实韶音在国内的影响力也可以说是挺高的&#xff0c;下面我将针对这几个问题来给大家解析一下。 韶音耳机是哪个国家的品牌&#xff1f; 韶…

05-JVM内存分配机制深度剖析

上一篇&#xff1a;04-JVM对象创建深度剖析 1.对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配&#xff0c;当对象没有被引用的时候&#xff0c;需要依靠GC进行回收内存&#xff0c;如果对象数量较多的时候&#xff0c;会给GC带来较大压力&#xff…

经典神经网络介绍-面试必备(持续更新...

一、RCNN系列 1、RCNN RCNN是用于目标检测的经典方法&#xff0c;其核心思想是将目标检测任务分解为两个主要步骤&#xff1a;候选区域生成和目标分类。 候选区域生成&#xff1a;RCNN的第一步是生成可能包含目标的候选区域&#xff0c;RCNN使用传统的计算机视觉技术&#x…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(一)

文章目录 TASK系列解析文章前言PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER功能介绍PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER相关配置PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER流程确定优化变量定义目标函数定义约束ProcessSetUpStatesAndBoundsOptimizeByQPCheckSpeedLimitF…

六种线程状态转换大汇总

五种线程状态 or 六种线程状态 五种状态这是从 操作系统 层面来描述的 六种状态这是从 Java API 层面来描述的 六种线程状态转换 假设有线程 Thread t 情况 1 NEW --> RUNNABLE 当调用 t.start() 方法时&#xff0c;由 NEW --> RUNNABLE 情况 2 RUNNABLE <-->…

达梦数据库-锁表

查询锁表语句 select * from v$sessions where trx_id in (select trx_id from V$LOCK) and user_name 用户名称 order by create_time desc;关闭会话 sp_close_session(上面语句查询到的sess_id);

【LangChain系列 4】Model I/O——Prompts概述

原文地址&#xff1a;【LangChain系列 4】Model I/O——Prompts概述 本文速读&#xff1a; Prompt模版 样本选择器 Prompts简单来讲就是一组指令或文本输入&#xff0c;语言模型理解它的意思后&#xff0c;给出一个输出响应。 LangChain提供了一些模块可以让我们更方便地使…

【机器视觉】揭秘机器视觉在锂电池生产中的应用

随着环保意识的日益增强和新能源汽车市场的快速发展&#xff0c;新能源锂电池的需求量也在不断攀升。而在锂电池生产的全过程中&#xff0c;机器视觉技术正发挥着越来越重要的作用。那么&#xff0c;机器视觉到底能在哪些环节大显身手呢?本文将带您揭秘机器视觉在锂电池生产中…

2023 年全国大学生数学建模D题目-圈养湖羊的空间利用率

D题目应该是专科题目&#xff1f;&#xff1f;&#xff1f;不确定了 感觉类似一个细胞分裂问题一样&#xff0c;1&#xff0c;2&#xff0c;4&#xff0c;8&#xff0c; 题目1中规中矩 按照前面说的分配方法&#xff0c;一步一步计算进行 缺口的问题考虑反推回去&#xff0c…

最强的AI视频去码图片修复模型:CodeFormer

目录 1 CodeFormer介绍 1.1 CodeFormer解决的问题 1.2 人脸复原的挑战 1.3 方法动机 1.4 模型实现 1.5 实验结果 2 CodeFormer部署与运行 2.1 conda环境安装 2.2 运行环境构建 2.3 模型下载 2.4 运行 2.4.1 人脸复原 ​编辑​编辑 2.4.2 全图片增强 2.4.3 人脸颜色…

小程序 target 与 currentTarget(详细)

小程序中关于事件对象 e 的属性中有两个特别重要的属性:target与currentTarget属性:对于这两个属性,官方文档上的解释是: target:事件源组件对象currentTarget:当前组件对象由于官方解释太过精炼,下面仔细讲讲其中的含义,先看一段代码: <view id="outter&quo…

自动提词器有哪些?这几款收藏好

自动提词器有哪些&#xff1f;自动提词器是一种非常实用的工具&#xff0c;无论是在翻译还是整理工作中&#xff0c;都可以帮助我们快速、准确地完成各种繁琐的任务。市面上有很多种自动提词器的应用&#xff0c;那么今天就来给大家介绍几款好用的自动提词工具。 【书单视频助手…

nowcoder NC10 大数乘法

题目链接&#xff1a; https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571?tpId196&tqId37177&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficultyundefined&judgeStatusundefined&tags&tit…

解决VSCode下载速度特别慢的问题

一、下载VSCode 1.打开VSCode官网 https://code.visualstudio.com 2.download下载 3.下载特别慢 二、解决VSCode下载速度特别慢 1.单击右下角全部显示 我是用chrome浏览器&#xff0c;点击右下角的全部显示按钮&#xff0c;可以跳转到下载内容页面。 如果你是用其他浏览器…

OpenCV(二十八):连通域分割

目录 1.介绍连通域分割 2.像素领域介绍 3.两遍法分割连通域 4.连通域分割函数 1.介绍连通域分割 连通域分割是一种图像处理技术&#xff0c;用于将图像中的相邻像素组成的区域划分为不同的连通域。这些像素具有相似的特性&#xff0c;如相近的灰度值或颜色。连通域分割可以…