自动化运维ansible
一、Ansible概述:
是一个配置管理系统(configuration management system),当下最流行的批量自动化运维工具之一。
Ansible是一个开源的自动化工具,用于配置管理、应用程序部署和编排等 IT 任务的执行。它专注于简单性和可扩展性,并使用人类可读的 YAML 语言编写自动化脚本。
Ansible 的特点包括:
无需客户端:Ansible 是一种无需在目标系统上安装任何额外软件或代理的代理服务器配置管理工具。它基于 SSH 进行通信,只需要远程系统上的 SSH 服务。
声明性语言:使用 YAML 的声明性语言,可以方便地描述系统的期望状态。这使得 Ansible 任务的编写和理解变得简单。
广泛的模块支持:Ansible 提供了众多的模块,用于执行各种不同的任务,例如文件操作、软件包管理、服务管理等。模块可以轻松地扩展 Ansible 的功能。
Playbook:Ansible 使用 Playbook 文件来组织和描述配置任务。Playbook 可以包含一个或多个任务,这些任务按照定义的顺序执行。Playbook 可以指定目标主机、任务的执行条件以及一些其他选项。
角色和剧本:Ansible 提供了角色和剧本的概念,以帮助组织复杂的配置和部署任务。角色是一组相关任务和配置的集合,而剧本则是包含角色和相关配置的抽象层。
扩展性:Ansible 提供了丰富的插件系统,允许用户编写自定义的模块、插件和回调函数,以满足特定的需求。
社区支持:Ansible 拥有庞大的活跃社区,提供了大量的文档、示例和第三方扩展。这使得用户可以轻松地获取支持和共享最佳实践
Ansible的作用:
批量部署,服务安装,日常备份。
Ansible官方文档:
https://docs.ansible.com/ansible/latest/index.html
Ansible的特性:
无客户端软件,通过ssh远程管理
安装后不需要启动服务
依赖大量的Python模块扩展功能
配置文件:/etc/ansible/ansible.cfg
Ansible基础架构:
连接插件(connecter plugins):用来连接主机,连接被管理端
核心模块(core modules):连接主机,实现操作,依赖于具体模块来执行
自定义模块:用户自己开发的功能模块
剧本(playbook):将多个任务组合成一个剧本,由ansible自动批量执行
主机清单(host inventory):定义ansible管理的客户端主机范围
Ansible的命令格式:
ansible [-f forks] [-m module_name] [-a args]
ansible 主机清单名 -m 调用的模块 -a 动作命令
inventory group name
ip
all
-f forks 并发线程数,默认为5个线程
-m module_name 要使用的模块
-a args 模块特有的参数
-i hosts文件 指定特定的inventory文件,默认为 /etc/ansible/hosts
二、安装
yum -y install ansible
#查看版本
[root@192 ansible]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
三、修改配置文件
/etc/ansible/hosts:主机列表清单,也叫Inventory。
所有被管理的主机都需要定义在该文件中。
如果不想使用默认清单的话可以用-i选项指定自定义的清单文件,防止多人混合使用一个主机清单。
如果没有定义在主机列表文件中,执行命令会提示“No hosts matched”。
/etc/ansible/ansible.cfg:Ansible服务主配置文件,比如并发数控制等在此文件定义。
1、修改hosts文件
[root@192 ansible]# vim k8s-hosts
[master]
192.168.100.15[node]
192.168.100.16
192.168.100.17[harbor]
192.168.100.20[k8s]
192.168.100.21
2、使用ssh免密访问
[root@ansible ~]# ssh-keygen -t rsa //执行后按三次回车键
[root@ansible ~]# ssh-copy-id root@192.168.100.20
[root@ansible ~]# ssh-copy-id root@192.168.100.21
四、ansible模块
调用模块颜色显示:
黄色 更改成功
绿色 没有更改
红色 错误
紫色 警告
列出所有模块
ansible-doc --list
1.command
ansible查看harbor主机的主机名称
[root@192 ansible]# ansible -i k8s-hosts harbor -m command -a "hostname"
[WARNING]: Platform linux on host 192.168.100.20 is using the discovered Python interpreter at /usr/bin/python3, but future
installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
192.168.100.20 | CHANGED | rc=0 >>
yunwei.harbor.com
#ansible创建web主机用户test
[root@192 ansible]# ansible -i k8s-hosts harbor -m command -a "useradd test"
[WARNING]: Platform linux on host 192.168.100.20 is using the discovered Python interpreter at /usr/bin/python3, but future
installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
192.168.100.20 | CHANGED | rc=0 >>
2.shell
command的升级版,支持复杂语句,但不支持别名。正常情况下使用shell就可以了,command可以忽略
[root@192 ansible]# ansible -i k8s-hosts harbor -m shell -a "echo 123 | passwd --stdin test"
192.168.100.20 | CHANGED | rc=0 >>
更改用户 test 的密码 。
passwd:所有的身份验证令牌已经成功更新。
3.yum
harbor主机yum安装nginx服务。
[root@192 ansible]# ansible -i k8s-hosts harbor -m yum -a "name=nginx state=installed"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"msg": "","rc": 0,"results": ["Installed: nginx-mod-mail-1:1.21.5-5.oe2203sp2.x86_64","Installed: nginx-mod-stream-1:1.21.5-5.oe2203sp2.x86_64","Installed: libwebp-1.2.1-4.oe2203sp2.x86_64","Installed: libxslt-1.1.37-1.oe2203sp2.x86_64","Installed: gd-2.3.3-3.oe2203sp2.x86_64","Installed: gperftools-libs-2.10-1.oe2203sp2.x86_64","Installed: libunwind-2:1.6.2-5.oe2203sp2.x86_64","Installed: libXpm-3.5.13-5.oe2203sp2.x86_64","Installed: nginx-1:1.21.5-5.oe2203sp2.x86_64","Installed: nginx-all-modules-1:1.21.5-5.oe2203sp2.noarch","Installed: nginx-filesystem-1:1.21.5-5.oe2203sp2.noarch","Installed: nginx-mod-http-image-filter-1:1.21.5-5.oe2203sp2.x86_64","Installed: nginx-mod-http-perl-1:1.21.5-5.oe2203sp2.x86_64","Installed: nginx-mod-http-xslt-filter-1:1.21.5-5.oe2203sp2.x86_64"]
}
4.copy
复制ansible本地hosts文件到harbor的主机。
[root@192 ansible]# ansible -i k8s-hosts harbor -m copy -a "src=/home/admin/xunjian.sh dest=/home/admin/xunjian.sh mode=755"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"checksum": "edabfe7d12be113132cb753bca4b2257f56729b1","dest": "/home/admin/xunjian.sh","gid": 0,"group": "root","md5sum": "a6c55dfc444995f85d01ef50e444eb53","mode": "0755","owner": "root","size": 9594,"src": "/root/.ansible/tmp/ansible-tmp-1697897996.12-19512-73839827124674/source","state": "file","uid": 0
}注释:src 源文件路径dest 目标文件路径backup 覆盖到目标文件前,是否提前备份content 添加文件内容group 指定属组owner 指定属主mode 指定权限
[root@192 ansible]# ansible -i k8s-hosts harbor -m shell -a "ls /home/admin"
192.168.100.20 | CHANGED | rc=0 >>
harbor
xunjian.sh
5.service(或systemd)
启动harbor主机的nginx服务,实现开机自启
[root@192 ansible]# ansible -i k8s-hosts harbor -m service -a 'enabled=true name=nginx state=started'
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"enabled": true,"name": "nginx","state": "started","status": {"ActiveEnterTimestamp": "n/a","ActiveEnterTimestampMonotonic": "0","ActiveExitTimestamp": "n/a","ActiveExitTimestampMonotonic": "0","ActiveState": "inactive","After": "sysinit.target tmp.mount remote-fs.target -.mount network.target system.slice systemd-journald.socket systemd-tmpfiles-setup.service basic.target nss-lookup.target",
#enabled:是否开机自启动,取值为true或者false。
#name:服务名称
#state:状态,取值有started,stopped,restarted
6.group
(1)在harbor主机上创建组www,gid 666
[root@192 ansible]# ansible -i k8s-hosts harbor -m group -a "name=www gid=666"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"gid": 666,"name": "www","state": "present","system": false
}
(2)在harbor主机删除组www
[root@192 ansible]# ansible -i k8s-hosts harbor -m group -a "name=www gid=666 state=absent"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"name": "www","state": "absent"
}
7.user
1)所有主机创建用户abc
[root@192 ansible]# ansible -i k8s-hosts harbor -m user -a "name=abc"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"comment": "","create_home": true,"group": 1005,"home": "/home/abc","name": "abc","shell": "/bin/bash","state": "present","system": false,"uid": 1005
}
8.file
1)创建backup目录,并赋权,更改属主属组
[root@192 ansible]# ansible -i k8s-hosts harbor -m file -a "path=/backup owner=root group=root recurse=yes mode=777"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"gid": 0,"group": "root","mode": "0777","owner": "root","path": "/backup","size": 4096,"state": "directory","uid": 0
}
(2)创建test.txt文件,file模块可以创建目录又能创建文件
[root@192 ansible]# ansible -i k8s-hosts harbor -m file -a "path=/backup/test.txt owner=root group=root state=touch mode=777"
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"dest": "/backup/test.txt","gid": 0,"group": "root","mode": "0777","owner": "root","size": 0,"state": "file","uid": 0
}
9.ping
[root@192 ansible]# ansible -i k8s-hosts demo -m ping
192.168.100.20 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
192.168.100.21 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
10.script
在ansible上编写测试脚本,指定harbor主机执行。
[root@192 ansible]# ansible -i k8s-hosts harbor -m script -a "/home/admin/dir.sh"
192.168.100.20 | CHANGED => {"changed": true,"rc": 0,"stderr": "Shared connection to 192.168.100.20 closed.\r\n","stderr_lines": ["Shared connection to 192.168.100.20 closed."],"stdout": "","stdout_lines": []
}
11.cron
[root@192 ansible]# ansible -i k8s-hosts harbor -m cron -a 'minute="*/10" job="/bin/echo test" name="test cron job"'
192.168.100.20 | CHANGED => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": true,"envs": [],"jobs": ["test cron job"]
}
12.setup
收集被管理主机的信息,包含系统版本、IP地址、CPU核心数。
[root@192 ansible]# ansible -i k8s-hosts harbor -m setup
192.168.100.20 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses": ["192.168.100.20","172.17.0.1"],"ansible_all_ipv6_addresses": ["fe80::20c:29ff:fe5a:c40d"],"ansible_apparmor": {"status": "disabled"},"ansible_architecture": "x86_64","ansible_bios_date": "11/12/2020","ansible_bios_version": "6.00","ansible_cmdline": {"BOOT_IMAGE": "/vmlinuz-5.10.0-153.12.0.92.oe2203sp2.x86_64","apparmor": "0","cgroup_disable": "files","crashkernel": "512M","rd.lvm.lv": "openeuler/swap","resume": "/dev/mapper/openeuler-swap","ro": true,"root": "/dev/mapper/openeuler-root"},
相关文章:
自动化运维ansible
一、Ansible概述: 是一个配置管理系统(configuration management system),当下最流行的批量自动化运维工具之一。 Ansible是一个开源的自动化工具,用于配置管理、应用程序部署和编排等 IT 任务的执行。它专注于简单性和可扩展性,并…...

记录:Unity脚本的编写4.0
目录 前言导入音乐编写脚本 前言 之前使用脚本对uniry中的模型进行了控制,诸如使用键盘控制对象模型的移动或者使用鼠标对对象模型进行角度的切换(或者是类似的东西),而我们在游戏的过程中,总是伴随着一些好听的bgm&a…...

vue中引入jquery解决跨域问题
1、vue 工程文件 package.json 中 引入 “dependencies”: { “jquery”:“^2.2.4” }, 2、控制台执行命令,当前工程文件夹下 cnpm install 3、修改的vue文件中 加入 import $ from ‘jquery’ 4、调用 ajax请求 $.ajax({url:http://192.168.0.10:9099/strutsJspA…...

车规MCU开发工具之Vector DaVinci Configurator执行arxml合并操作
环境 Step1 导入要合并的arxml 、 Step 2 比较、合并过程 <完>...
数字滚动动效(纯HTML5版和Vue版本)
数字从0到指定数字的滚动动效,直接上代码; H5 <!DOCTYPE html> <html> <head><style>/* 设置数字显示的样式 */.counter {font-weight:700;font-size: 36px;color: #333;}</style> </head> <body><div cl…...

Leetcode—2530.执行K次操作后的最大分数【中等】(C语言向上取整数学公式)
2023每日刷题(五) Leetcode—2530.执行K次操作后的最大分数 向上取整思想 参考了这篇文章 有人肯定会问,这个向上取整为什么是这样来的。接下来我简单讲解一下。 数学式: x y 数学式:\frac{x}{y} 数学式:…...
CMakeList 编写示例
cmake_minimum_required(VERSION 3.8) #指定cmake的最小版本 set(PROJECT_NAME Untitled_1) #初始化变量 project(${PROJECT_NAME} VERSION 1.0) #创建一个project set(CMAKE_AUTOMOC ON) #初始化内置变量, 该变量为Qt工程专属变量 set(CMAKE_AUTORCC ON) set(CMAKE_A…...

OSI笔记
由7层组成,由下自上分别为: 物理层(硬件方面,例如物理网络设备、布线电缆、光纤等), 传输数据主要是比特流0 1 、电信号数据链路层(确定了0 1 的分组方式,通过广播的方式࿰…...
C++之前置声明
在C中,前置声明是一种声明类或函数的方式,但并不定义它们。 前置声明的主要目的是为了解决编译时的依赖性问题,提高编译效率,并允许更灵活的代码组织。 原理 C前置声明可以减少头文件依赖的原理在于,通过前置声明&am…...

用3D扫描生成合成数据
合成数据集(Synthetic Datasets)正在成为计算机视觉模型训练的标准部分。 虽然新工具使合成数据集变得更容易访问,但除了标准机器学习过程之外,许多工具还需要对 3D 建模有基本的了解。 最简单的捷径是从现实世界中获取现有对象并…...
pip安装依赖报错
执行命令时 pip install --upgrade pip 报错: pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。pip install --upgrade pip~~~ Category…...
规范的项目流程图怎么写
编写规范的项目流程图可以遵循以下步骤: 1.明确项目目标:首先,明确项目的目标以及需要实现的结果。这有助于确定项目的范围和要求。 2.识别项目任务:识别和列出所有的任务,这可以包括获得资源、实施动作、收集信息等…...
模型部署笔记--Pytorch-FX量化
目录 1--Pytorch-FX量化 2--校准模型 3--代码实例 3-1--主函数 3-2--prepare_dataloader函数 3-3--训练和测试函数 1--Pytorch-FX量化 Pytorch在torch.quantization.quantize_fx中提供了两个API,即prepare_fx和convert_fx。 prepare_fx的作用是准备量化&#…...

解决XXLJOB重复执行问题--Redis加锁+注解+AOP
基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…...

云安全(1)--初识容器逃逸之特权容器逃逸
文章目录 前言privileged,特权容器逃逸环境配置实际利用实际环境利用计划任务/var/spool/cron/crontabs/ 适用于ubuntu debain/var/spool/cron 适用于centos ld.so.preloadssh 前言 在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛…...

二阶系统时域响应
二阶系统微分方程 二阶系统传递函数 二阶系统单位阶跃响应 过阻尼系统 临界阻尼系统 欠阻尼系统 无阻尼系统 二阶系统阶跃响应仿真 在Matlab中进行仿真,设置不同阻尼比2、1、0.5和0,可以得到结论: 阻尼比越小,系统响应速度越快&…...

mstsc改端口为33389
windows 远程默认端口3389不太安全,改成33389防下小人 把下面的2个文本存在后缀.reg的文件,双击导入注册表,"PortNumber"dword:0000826d 这个就是33389对应的端口号的16进制值,要想自己改成其它的换下值即可 Windows …...

经典算法试题(二)
文章目录 一、岁数1、题目2、思路讲解3、代码实现4、结果 二、打碎的鸡蛋1、题目2、思路讲解3、代码实现4、结果 三、分糖1、题目2、思路讲解3、代码实现4、结果 四、兔子产子1、题目2、思路讲解3、代码实现4、结果 五、矩阵问题1、题目2、思路讲解3、代码实现4、结果 六、谁是…...

Linux——生产者消费者模型
目录 一.为何要使用生产者消费者模型 二.生产者消费者模型优点 三.基于BlockingQueue的生产者消费者模型 1.BlockingQueue——阻塞队列 2.实现代码 四.POSIX信号量 五.基于环形队列的生产消费模型 一.为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生…...
Oracle缓存表
Oracle缓存表(db_buffer_pool)由三部分组成: buffer_pool_defualt buffer_pool_keep buffer_pool_recycle 如果要把表钉死在内存中,也就是把表钉在keep区。相关的命令为: alter table 表名 storage(buffer_pool k…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...