ansible 的学习

news2024/11/22 8:48:57

目录

ansible学习思路:

ansible是什么?

官网:Ansible is Simple IT Automation

ansible的组成:    

参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客

ansible操作体验:

1、先在sever和client之间建立单向信任关系,server端产生密钥对,上传公钥到client上

2、安装ansible,在管理节点上

3、打开ansible,并配置主机清单

ansible 常用模块

参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客

1、copy模块

 2、shell模块

3、fetch模块

4、file模块

5、yum模块

6、script模块

7、service模块

8、cron模块

playbook的使用

1、playbook的核心元素

2、通过playbook安装管理redis服务

3、带配置文件的安装管理redis


ansible学习思路:

ssh - 批量管理10台服务器思路

ansible是什么?

ansible 一款自动化运维工具的名称(Ansible is Simple IT Automation)

ansible是自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

批量的去完成日常运维的工作

日常linux运维工作:
    1.安装软件
    2.启动服务
    3.运行脚本
    4.修改配置
    5.升级软件
    6.备份复制文件

    等

官网:Ansible is Simple IT Automation

目的是:提升效率、降低人力成本

ansible的组成:    

ansible的组成:
    1.host inventory   主机清单 --》可以控制的其他的电脑的名单
    2.playbook   剧本(配置文件) --》让主机清单里的主机去批量完成的任务 --》脚本
    3.module  模块  实现一个个功能的程序
    4.plugins  插件 :依附于ansible的一个小软件,实现某个小功能。

ansible就是让什么主机使用什么工具做什么事情 --》自动化运维工具,批量部署,批量操作运维

参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客

host inventory模块:主机清单

写明控制的机器的信息,例如ip地址、ssh端口号、域名、用户名和密码

[webservers]
192.168.0.190
192.168.0.191
[dbservers]
192.168.0.192:22  ansible_ssh_user='cali' 
[nfs]
192.168.0.139:2233  ansible_ssh_user='root' ansible_ssh_pass='123456'

指定用户名和密码的配置,需要连接一次,获取对方服务器的公钥到know_hosts文件

playbook 模块:剧本(配置文件) --》让主机清单里的主机去批量完成的任务 --》脚本

module 模块:模块  实现一个个功能的程序

plugins 模块:插件 依附于ansible的一个小软件,实现某个小功能。

ansible操作体验:

准备两台服务器

server:172.20.10.9 Centos7.9

client:  172.20.10.7 Centos7.9

1、先在sever和client之间建立单向信任关系,server端产生密钥对,上传公钥到client上

在server上运行

[root@mysql ~]# ssh-keygen   #生成公钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:                      #无密码
Your identification has been saved in y.
Your public key has been saved in y.pub.
The key fingerprint is:
SHA256:X9/EaTPSTL80kYC/goD7GBsj7tJXXIIm33ig1XCOE5w root@mysql
The key's randomart image is:
+---[RSA 2048]----+
|    . .     ..   |
|     E .   .  . .|
|      X     .  + |
|   . O = .   .+.+|
|    * B S . ...X+|
|   o B = o o o+o=|
|  o . X   . . ...|
| . o + .         |
|  o..            |
+----[SHA256]-----+
[root@mysql ~]# cd /root/.ssh/
[root@mysql .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@mysql .ssh]# 
[root@mysql .ssh]# ssh-copy-id -i id_rsa.pub root@172.20.10.7    #将公钥传递到client机器上去,从而建立免密通道


[root@mysql .ssh]# ssh 'root@172.20.10.7'   #测试免密通道是否建立成功
Last login: Tue Apr 18 18:21:12 2023 from 172.20.10.4
[root@mysql ~]# ls
all_db.sql  anaconda-ks.cfg  mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz  onekey_install_mysql_binary.sh
[root@mysql ~]# exit
登出
Connection to 172.20.10.7 closed.
[root@mysql .ssh]# 

2、安装ansible,在管理节点上

[root@mysql .ssh]# yum install epel-release -y

[root@mysql .ssh]# yum install ansible -y    #安装ansible

3、打开ansible,并配置主机清单

[root@server ~]# cd /etc/ansible/
[root@server ansible]# ls
ansible.cfg  hosts  roles
[root@server ansible]# 
ansible.cfg  是ansible的配置文件
hosts 里面定义主机清单
[root@server ansible]# vim hosts 
[scweb]
172.20.10.7

尝试运行shell命令:

[root@server ansible]# ansible scweb  -m shell -a "ip add"
scweb 表示主机组别
-m 表示模块
-a 表示需要运行的参数

同理可以运行下载模块命令:

[root@server ansible]# ansible all -m yum  -a "name=epel-release state=installed"
[root@server ansible]# ansible all -m yum  -a "name=htop state=installed"
all 表示所有主机
name 表示需要下载的软件名称
state 表示需要进行的状态

ansible-doc 获取帮助信息
ansible模块比较多,可以通过ansible-doc --help 显示帮助信息
ansible doc -l 获取所有当前版本下的可用模块及简要信息
ansible-doc -s 模块名 获取指定模块帮助信息说明``

ansible 常用模块

参考文档:Ansible入门与playbook实战-~学无止境,学以致用 ^ _ ^-51CTO博客

1、copy模块


从本地copy文件分发到目录主机路径

上传/test/while.sh文件到 scweb主机清单里面的主机上的/tmp/目录下,权限为755

参数说明:
src= 源文件路径
dest= 目标路径
注意src= 路径后面带/ 表示带里面的所有内容复制到目标目录下,不带/是目录递归复制过去
content= 自行填充的文件内容
owner 属主
group 属组
mode权限

 2、shell模块

使用shell命令运行刚刚传过去的脚本

后台运行

 

3、fetch模块


从远程主机拉取文件到本地

将客户机上的/etc/passwd文件 拉取到本机的/test文件夹下

4、file模块


设置文件属性(创建文件)

其中属性(state)

touch 空文件

directory 目录

link 软链接文件

hard 硬链接文件

创建文件夹  

常用参数:
path 目标路径
state directory为目录, link为软件链接
group 目录属组
owner 属主
等,其他参数通过ansible-doc -s file 获取

创建空文件 

5、yum模块


故名思义就是yum安装软件包的模块;

[root@mysql ~]# rpm -e tree     #卸载tree命令
[root@mysql ~]# tree
-bash: /usr/bin/tree: 没有那个文件或目录
[root@mysql ~]# 

安装tree命令 

常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present' or installed', latest')表示安装, (absent' or `removed') 表示        

6、script模块


把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;

7、service模块


服务管理模块
常用参数:
name:服务名
state:服务状态
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)       

8、cron模块


通过cron模块对目标主机生成计划任务
常用参数:
除了分(minute)时(hour)日(day)月(month)周(week)外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)

[root@mysql test]# cat backup.sh 
#!/bin/bash

#mkdir /backup
mkdir -p /backup
#backup
tar czf  /backup/passwd.tar.gz  /etc/passwd
[root@mysql test]# 


[root@mysql test]# ansible all -m copy -a "src=backup.sh dest=/tmp"
#将写好的任务脚本发送给client机器

[root@mysql test]# ansible all -m cron -a "minute=30 hour=2 job='bash /tmp/backup.sh' name=backup_passwd state=present "
#在client机器上设置计划任务


在client上查看计划任务是否设置成功
[root@mysql tmp]# crontab -l
#Ansible: backup_passwd
30 2 * * * bash /tmp/backup.sh
[root@mysql tmp]# 

#删除计划任务
ansible all -m cron -a "name=backup_passwd state=absent"

#验证
[root@mysql tmp]# crontab -l 
[root@mysql tmp]# 

playbook的使用

playbook是Ansible的配置,部署和编排的语言。他们可以描述你所希望的远程系统强制执行的政策,或者在一般的IT流程的一组步骤;形象点的说就是:如果ansible的各模块(能实现各种功能)是车间里的各工具;playbook就是指导手册,目标远程主机就是库存和原料对象.
playbook是基于YAML语言格式配置,关于YAML
更多playbook官方说明参考官方说明参考官方说明参考 

1、playbook的核心元素

hosts : playbook配置文件作用的主机
tasks: 任务列表
variables: 变量
templates:包含模板语法的文本文件
handlers :由特定条件触发的任务
roles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等

因此我们可以认为

playbook 是告诉ansible去批量完成工作的文件 --》传参给ansible

2、通过playbook安装管理redis服务

yaml是一种标记语言 与 html相似

[root@mysql /]# mkdir playbook
[root@mysql /]# cd playbook/
[root@mysql playbook]# ls
[root@mysql playbook]# vim redis_first.yaml    #创建 下载并运行redis的playbook脚本
[root@mysql playbook]# cat redis_first.yaml 
#在scweb主机清单对应的分组
- hosts: scweb        #接主机清单名称
  remote_user: root    #执行程序的用户是root用户
  tasks:              #接执行的任务
  - name: install redis    #接任务名称
    yum:  name=redis state=latest      #调用yum模块,安装软件redis,latest表示安装
  - name: start redis      #第二个任务名称
    service: name=redis state=started    #调用service模块,started表示打开redis

[root@mysql playbook]# 

#检查playbook 程序语法是否出现错误
[root@mysql playbook]#  ansible-playbook --syntax-check redis_first.yaml 

playbook: redis_first.yaml
[root@mysql playbook]# 


#执行plybook程序
[root@mysql playbook]# ansible-playbook redis_first.yaml 

PLAY [scweb] ********************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************
ok: [172.20.10.7]

TASK [install redis] ************************************************************************************************************************************************************************
ok: [172.20.10.7]

TASK [start redis] **************************************************************************************************************************************************************************
changed: [172.20.10.7]

PLAY RECAP **********************************************************************************************************************************************************************************
172.20.10.7                : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@mysql playbook]# 

我们能通过在client上检查端口和进程查看playbook是否运行成功

[root@mysql tmp]# ps aux|grep redis
redis      8679  0.0  0.2 143056  2484 ?        Ssl  04:12   0:00 /usr/bin/redis-server 127.0.0.1:6379
root       8693  0.0  0.0 112824   988 pts/0    R+   04:13   0:00 grep --color=auto redis
[root@mysql tmp]# netstat -anpult| grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      8679/redis-server 1 
[root@mysql tmp]# 

3、带配置文件的安装管理redis

redis配置文件目录:/etc/redis.conf

因为redis的配置文件中,只允许本地机器访问redis,因此我们需要修改redis的配置文件

bind 127.0.0.1
修改为
bind 0.0.0.0

方法一:

修改生成一个样本文件(就是redis的配置文件中将bind修改为0.0.0.0)

将样本文件拷贝到宿主机上去

[root@mysql /]# scp /etc/redis.conf root@172.20.10.9:/playbook/

最后使用playbook将样本文件传递到主机清单中的redis中

方法二:

首先复制一个redis.conf到本地并进行修改

#使用fetch拉取redis的配置文件到本地
[root@mysql playbook]# ansible 172.20.10.7 -m fetch -a "src=/etc/redis.conf dest=./"  
172.20.10.7 | CHANGED => {
    "changed": true, 
    "checksum": "c647a110949602d13a3d52429bbb57b563dae47e", 
    "dest": "/playbook/172.20.10.7/etc/redis.conf", 
    "md5sum": "375f2bc6dfa3bdacfbcdd24b29d08daf", 
    "remote_checksum": "c647a110949602d13a3d52429bbb57b563dae47e", 
    "remote_md5sum": null
}
[root@mysql playbook]# ls
172.20.10.7 redis_first.yaml
[root@mysql playbook]# 

将配置文件修改名字,并将bind修改为0.0.0.0
[root@mysql playbook]# mv ./172.20.10.7/etc/redis.conf  redis.conf
[root@mysql playbook]# ls
172.20.10.7  redis.conf  redis_first.yaml
[root@mysql playbook]# vim redis.conf 
[root@mysql playbook]# 

创建redis_secend.yaml,用来传输redis.conf文件

[root@mysql playbook]# vim redis_secend.yaml;
[root@mysql playbook]# ls
172.20.10.7  redis.conf  redis_first.yaml  redis_secend.yaml


#在scweb主机清单对应的分组
- hosts: scweb        #接主机清单名称
  remote_user: root    #执行程序的用户是root用户
  tasks:              #接执行的任务
  - name: install redis    #接任务名称
    yum:  name=redis state=latest      #调用yum模块,安装软件redis,latest表示安装
  - name: copy config file      #任务之复制同步配置文件到远程目标主机
    copy: src=/playbook/redis.conf dest=/etc/redis.conf owner=redis   #动作copy模块执行
    notify: restart redis      #触发的动作
    tags: config file         #任务标记名config file
  - name: start redis        #启动redis
    service: name=redis state=started    #调用service模块,started表示打开redis
  handlers:                     #特定情况下,接收到其他任务的通知时被触发
  - name: restart redis
    service: name=redis state=restarted

运行 redis_secend.yaml

[root@mysql playbook]# ansible-playbook redis_secend.yaml 

PLAY [scweb] ********************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************
ok: [172.20.10.7]

TASK [install redis] ************************************************************************************************************************************************************************
ok: [172.20.10.7]

TASK [copy config file] *********************************************************************************************************************************************************************
ok: [172.20.10.7]

TASK [start redis] **************************************************************************************************************************************************************************
ok: [172.20.10.7]

PLAY RECAP **********************************************************************************************************************************************************************************
172.20.10.7                : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 



#验证
[root@mysql /]# netstat -anpult | grep redis;
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      9794/redis-server 0 
[root@mysql /]# 

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

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

相关文章

机器学习算法(一)KNN近邻算法

一、KNN算法概述 KNN:K-Nearest-Neighbor算法,即K值为邻近。KNN是最简单的分类算法之一,同时,也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法。 二、原理 基于基于iris数据集,具体经历下面四步流程&am…

指南 | OpenAI API对PDF进行总结提炼

前言 本文将针对信息过载阅读搜索难的问题,展示如何利用OpenAI API高效地自动总结PDF,从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践,旨在确保准确且高效地进行文档摘要。另外,本文还将深入探讨运用AI技术…

Cocos Creator3D:发布到 Web 平台

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布,打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板,可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题: Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊:Frontiers in Endocrinology 影响因子:6.055 作者单位:河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC(Inversion of Control)控制反转 (1)什么是控制反转呢? (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目:Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目:重新审视半监督语义分割中的强弱一致性 论文链接:https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求: 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

(1)如何查看db文件Log (2)如何确认线程关系 (3)常见类型 (A)等锁 线程状态为"Blocked",通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展,图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢?本文将为您介绍一些基本概念和示例代码,帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法,经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作,其参数更新是通过下式进行的: 用于衡量决策模型的优劣目标,决策模型的优化目标为寻找最优决策,使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者:Mike Nichols Elastic 推出了 Elastic AI Assistant,这是一款由 ESRE 提供支持的开放式、生成式 AI 助手,旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…

Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

1. 前言 在上一期,我对WebSocket进行了基础及理论知识普及学习,而这一期,我重点是要带着你们进行实战教学,手把手教学如何在springboot架构基础上集成WebSocket及实现前后端通讯功能。具有很好的学习价值,希望大家在学…

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性…

MacOS 高颜值的 数据库客户端工具 Tableplus 简单逆向分析

0x0 navicat 给公司发律师函了, 所以不能白嫖了.. 后来一直在找替代品, 但均感觉略有不足. dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅 mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲 Sequel Ace : 开源免费, 但是只支持mysql,功能简单 最后试了下 Tab…

【手撕MyBatis源码】插件体系

文章目录 概述插件的使用插件代理机制自动分页插件拦截目标分页插件原理 概述 Mybatis作为一个应用广泛的优秀的ORM开源框架,这个框架具有强大的灵活性,在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插…

​如何高效开发一个OA办公系统​?

如何才能高效开发一个OA办公系统?这篇教你使用零代码工具从0-1搭建一个OA办公系统,无需代码基础,只要你懂业务,只需3步即可搭建! 先来看看效果—— 系统模板>> https://www.jiandaoyun.com/ 整个系统包含物资管…

动态规划经典题型:最小路径和、所有路径

题目1:最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:grid [[1,3,1],[1…

计算机网络之链路层和局域网

六.链路层和局域网 6.1 链路层概述 6.1.1 链路层可能提供的服务 成帧、链路接入、可靠交付、差错检测和纠正 6.1.2 链路层在何处实现 下图是一个典型的主机体系结构,链路层的主体部分是在网络适配器实现的,部分链路层是在运行于主机CPU上的软件实现的…