Linux——自动化运维ansibe

news2024/10/6 1:35:13

一、自动化运维定义

自动化--- 自动化运维:

  1. 服务的自动化部署
  2. 操作系统的日常运维:日志的备份、临时文件清理、服务器日常状态巡检、(几乎包括了linux服务管理、linux 系统管理以及在docker 容器课程中涉及的所有内容)
  3. 服务架构的自动化部署: web架构的部署、数据库主从架构的维护
  4. CICD (应用的持续集成持续部署):自动化的任务部署在CICD的整个流程中扮演较为重要的一环

ansible定义

定义:一款开源的自动化运维工具,使用简单易懂且好上手的语言,采用声明式语法编写自动化运维的相关任务,保证所有托管至ansible的节点呈现目标管理状态的工具。

主要作用:

  1. 将运维人员从繁琐复杂且重复性的劳动中解放出来
  2. 在目前的应用开发的趋势之下。,DEVOPS 就是是开发和运维人员的之间的交互逐渐增加,需要一款自动化工具,能够更好地链接开发和运维的工作。
  3. 使用“基础设施既代码”概念,复用性和泛用性更强

架构/ ansible 是如何实现远程节点的控制的?

在ansible的架构中:

所有的节点的角色被划分成两个:控制节点(ansible的核心节点)和被控制节点(自动执行管理任务的节点)

被控制节点(远程节点/托管节点/业务节点等):因为ansible采用了无代理的结构,因此被控制节点无需进行任何额外软件的安装,只需要进行简单的环境检查和配置即可

控制节点:安装ansible的核心软件,ansible软件的核心程序都安装在这个地方。

ansible的软件架构:

竖虚线右边代表的是收管节点

竖虚线的左边代表控制节点

蓝色方框中间(ansible核心程序):

  1. inventory: 资产清单,ansible被控制节点的清单/名单
  2. module: 模块,ansible实际任务的执行由模块来支持
  3. plugins:插件,ansbile一些扩展功能的实现(任务的循环控制,文本数据的预处理)
  4. api:  ansible 可以直接被调用的应用接口,目前暂时不做要求

蓝色方框左边,所用通过箭头指向ansbile核心程序的图标都代表对于ansible的一种调用方式。这里有一个接近实验环境的箭头路径:

users -> ansbile playbook --> ansible  --> hosts(受管节点)

ansible的安装:

ansible 的控制节点以及被控制节点对于python的版本有所要求:

# 此处演示环境使用的操作系统采用最小化安装,默认未安装python环境

目前centos stream 8 自动集成的python环境的版本是: 3.6.8

查看系统python版本

[root@control-ansible ~]# python3 --version

Python 3.11.7

基于不同的linux发行版适用的安装教程

Installing Ansible on specific operating systems — Ansible Community Documentation

首先ansible 本身可以通过类似于python模块的方式完成安装,这种安装方式一般适用于ansible的开发人员,本课程依旧采用二进制包的方式进行安装。

centos stream 需要扩展epel镜像,完成ansible安装。目前提供两个ansbile的安装包:

ansible-core: 仅包括部分ansbile的核心模块和ansible程序。后续需要安装额外的包来扩展模块的数量

ansible: 在ansible核心程序的基础上,集成了大部分模块,后续使用中不太需要安装额外扩展包。

安装教程

[root@control-ansible ~]# dnf config-manager --set-enabled powertools
[root@control-ansible ~]# dnf install epel-release epel-next-release
[root@control-ansible ~]# dnf repolist
repo id                                                          repo name
appstream                                                        CentOS Stream 8 - AppStream
baseos                                                           CentOS Stream 8 - BaseOS
epel                                                             Extra Packages for Enterprise Linux 8 - x86_64
epel-modular                                                     Extra Packages for Enterprise Linux Modular 8 - x86_64
epel-next                                                        Extra Packages for Enterprise Linux 8 - Next - x86_64
extras                                                           CentOS Stream 8 - Extras
extras-common                                                    CentOS Stream 8 - Extras common packages
powertools                                                       CentOS Stream 8 - PowerTools
[root@control-ansible ~]#  dnf install -y  ansible
[root@control-ansible ~]# ansible --version
ansible [core 2.16.2]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.11/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.11.7 (main, Jan 26 2024, 19:22:20) [GCC 8.5.0 20210514 (Red Hat 8.5.0-21)] (/usr/bin/python3.11)
  jinja version = 3.1.2
  libyaml = True

被控制节点的python是满足目前环境的最低要求的,可以不做任何配置就开始后续的使用。

ansible如何连接被控制节点,并执行相关的自动化任务。

清单:必须是一个可以被ansible 解析文件。

今天来简单聊一下ini风格的清单如何进行编写

清单使用的简介:

Building an inventory — Ansible Community Documentationicon-default.png?t=N7T8https://docs.ansible.com/ansible/latest/getting_started/get_started_inventory.html

被控节点在被列入清单时,可以使用任何可以通信名称即可(主机名、FQDN、ip地址)

[root@control-ansible ~]# vim inventory
[root@control-ansible ~]# cat inventory
# 一行代表一个主机(被控节点)
192.168.110.129
192.168.110.134

ansible控制节点和被控制节点之间的通信,通过SSH实现。

  1. 控制节点和被控制节点之间的ssh通信时正常
  2. SSH通信在首次建立连接的时候,需要ssh的客户端,接受并记录服务端的主机指纹,以避免可能发生的中间人攻击等,需要注意在ansible的通信场景下,ansible的控制节点是ssh通信的常规客户端,被控节点才是ssh通信的服务端。
  3. 这个配置可以在ansible的配置文件中覆盖,即跳过主机指纹的检查
[root@control-ansible ~]# ansible all -m ping -i inventory --ask-pass
ansible  			// ansible 自动化程序
all				// 说明命令对应的收管节点都有哪些,all 指主机清单中所有列出主机
-m		// 说明调用的模块  这个命令调用了ping模块,ping模块的作用就是测试连通性
-i		// 指定清单文件的路径 
--ask-pass		// 提供输入ssh身份验证口令的交互式输入接口

ansible 执行环境的优化:

1.设置专门用于ansible管理的普通用户 automation

模块:ansible.builtin.user 实现系统用户账号的管理,作用等同于 useradd /usermod/userdel/passwd

参数:

name : 用户账号名

state: 用户账号是否存在,present 确保用户账号是存在的, absent 确保用户账号被移除

password: 给定用户的密码,ansible 不会自动对口令加密,所以需要调用加密插件完成用户口令的加密。

ansible的核心模块具备幂等性特质,所谓幂等性是一个高数的概念,ansible在这里借用这个概念表示ansible是一个基于状态管理的工具,简而言之,ansible在执行任何管理命令之前,会优先确定目标主机是否已经存在对应的状态,如果目标主机已经存在对应的状态,则不进行任何修改指令,返回任务执行成功的信息,但是目标主机不在指定的状态,则执行对应的指令,并给出执行的结果。

[root@control-ansible ~]# ansible all --ask-pass -i inventory -m ansible.builtin.user -a "name=automation state=present"

[root@control-ansible ~]# ansible all --ask-pass -i inventory -m ansible.builtin.user -a "name=automation state=present uid=1003"

给用户添加uid

设置用户的密码

[root@control-ansible ~]# ansible all --ask-pass -i inventory -m ansible.builtin.user -a "name=automation state=present uid=1003
> password={{ 'redhat' | password_hash('sha512') }}" 

设置密码 为 redhat 密码的格式为 sha512

针对这个普通用户设置ssh免密

[root@control-ansible ~]# ssh-keygen
#ssh-keygen 是一个用于生成、管理和转换 SSH 认证密钥的工具。
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:F84LSphviZov3deY0KhabbHDprCUf/B7b5Wdqgn9Z3Y root@control-ansible
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|                 |
|          .      |
|     o   o .     |
|    o ooS +  o . |
|   ..*o=.+ .o o  |
|  +.o=%..+o. .   |
| ..Bo=+.=.oo. + E|
|  =++..+ o+..+ . |
+----[SHA256]-----+
[root@control-ansible ~]#
[root@control-ansible ~]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts
[root@control-ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub  automation@192.168.110.129
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
automation@192.168.110.129's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'automation@192.168.110.129'"
and check to make sure that only the key(s) you wanted were added.

[root@control-ansible ~]# ssh-copy-id -i .ssh/id_rsa.pub  automation@192.168.110.134
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
automation@192.168.110.134's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'automation@192.168.110.134'"
and check to make sure that only the key(s) you wanted were added.

 设置普通用户的提权配置(su  /sudo)

sudo相关提权配置: /etc/sudoers ;/etc/sudoers.d/*

user    MACHINE=COMMANDS

用户名 执行命令的主机  授权可以获得root管理权限的命令

%wheel  ALL=(ALL)       ALL

%wheel //%开头代表是一个组账号

ALL=(ALL) //可以在所有的主机执行任何命令

ALL //命令可以使用所有的参数

 NOPASSWD: ALL // 和上面的all代表参数使用  NOPASSWD代表普通用户使用sudo提权 跳过输入密码的步骤

[root@control-ansible ~]# cat a-sudo

automation      ALL=(ALL)       NOPASSWD: ALL

[root@control-ansible ~]# ansible all -u root --ask-pass -i inventory  -m ansible.builtin.copy -a "src=a-sudo dest=/etc/sudoers.d/autouser"

#-i inventory: 指定 inventory 文件的路径。Inventory 文件包含 Ansible 需要连接的主机的列表。

#-m ansible.builtin.copy: 指定要使用的模块为 ansible.builtin.copy,这是 Ansible 的内置模块,用于将文件从本地复制到远程主机。-m--module-name 参数用于指定要执行的模块

#-a "src=a-sudo dest=/etc/sudoers.d/autouser": 这是 ansible.builtin.copy 模块的参数。src=a-sudo 指定本地源文件(假设在当前工作目录中有一个名为 a-sudo 的文件),dest=/etc/sudoers.d/autouser 指定远程主机上的目标路径。

[root@control-ansible ~]# ansible all -u automation -i inventory -m user -a "name=test state=present" --become

#--become: 在远程主机上提升权限。这通常意味着命令将在 root 权限下执行,尽管具体提升到的用户可以通过 --become-user 选项来指定(默认为 root

[root@control-ansible ~]# ansible all -u automation -i inventory -m user -a "name=test state=absent"

#删除一个已存在的用户

  • -u automation: 使用 automation 这个用户来连接远程主机。
  • -i inventory: 指定 inventory 文件的路径。
  • -m user: 使用 Ansible 的 user 模块。
  • -a "name=test state=absent": 传递给 user 模块的参数,指定要删除的用户名为 test,并设置状态为 absent(即删除用户)。

提升权限后成功删除

[root@control-ansible ~]# ansible all -u automation -i inventory -m user -a "name=test state=absent" --become

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

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

相关文章

FPGA专项课程即将开课,颁发AMD官方证书

社区成立以来,一直致力于为广大工程师提供优质的技术培训和资源,得到了众多用户的喜爱与支持。为了满足用户需求,我们特别推出了“基于Vitis HLS的高层次综合及图像处理开发”课程。 本次课程旨在帮助企业工程师掌握前沿的FPGA技术&#xff…

谷歌工程师指责OpenAI阻碍AGI研究进展:推迟了5到10年

Google母公司Alphabet的一位软件工程师表示,OpenAI阻碍了人工通用智能(AGI)的发展5到10年。在最近的一次播客访谈中,Google软件工程师弗朗索瓦乔莱特(Franois Chollet )表达了他对AGI研究现状的担忧。这段对…

MySQL----常见的存储引擎

存储引擎 存储引擎就是数据库如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 MySQL存储引擎 M…

【Apollo配置中心】集成springboot自动监听属性变更和动态发布配置

1. 背景 在实际项目中,Spring Boot项目结合使用Apollo配置中心时,经常会遇到需要更新Apollo上的项目的一些配置,比如测试环境或生产环境中,需要修改某个类的属性值,如果我们在Apollo上更新了配置,已经在运…

M41T00串行实时时钟-国产兼容RS4C400

RS4C400是一种低功耗串行实时时钟(RTC)。内置32.768 kHz振荡器(外部晶体控制)和RAM的前8个字节用于时钟/日历功能,并以二进制编码十进制(BCD)格式配置。地址和数据通过双线双向总线串行传输。内…

WPF Prism框架搭建

WPF Prism框架搭建 1.引入Prism框架 在Nuget包管理器中搜索Prism&#xff0c;并添加到项目中 2.在项目中使用prism框架 2.1 修改app.xaml 删除项目中自带的StartupUri 修改Application节点为prism:PrismApplication 引入prism命名空间 <prism:PrismApplication x:C…

2024年中国移动游戏市场研究报告

来源&#xff1a;点点数据&#xff1a; 近期历史回顾&#xff1a; 面向水泥行业的5G虚拟专网技术要求&#xff08;2024&#xff09;.pdf 2024年F5G-A绿色万兆全光园区白皮书.pdf 2024年全球废物管理展望报告.pdf 内容管理系统 2024-2025中国羊奶粉市场消费趋势洞察报告.pdf 20…

MySQL 示例数据库大全

前言&#xff1a; 我们练习 SQL 时&#xff0c;总会自己创造一些测试数据或者网上找些案例来学习&#xff0c;其实 MySQL 官方提供了好几个示例数据库&#xff0c;在 MySQL 的学习、开发和实践中具有非常重要的作用&#xff0c;能够帮助初学者更好地理解和应用 MySQL 的各种功…

糖尿病患者血糖控制困难,4个辅助降糖方法分享。

对于糖尿病患者来讲&#xff0c;血糖控制极为困难&#xff0c;稍不留意就会致使忽高忽低的情况出现&#xff0c;今天我来教你 4 个办法来辅助降糖。 第一&#xff0c;在饮食上可多进食全谷类食物&#xff0c;中医认为谷类食物是脾胃的主食。经常吃这类食物不但能够给脾胃提供充…

DSSA(Domain-Specific Software Architecture)方法论

DSSA&#xff08;Domain-Specific Software Architecture&#xff09;方法论是一种针对特定问题领域的软件架构设计方法。在软件开发中&#xff0c;有些问题在特定领域是共通的&#xff0c;这些问题可以通过通用的抽象和解决方案来处理。DSSA方法论正是利用这一特点&#xff0c…

比 Safari 阅读模式更强大的阅读助手

一、简介 1、一款专为浏览器设计的扩展程序&#xff0c;旨在提供更为简洁、高效的网页阅读体验。它能够对网页内容进行智能提取和排版&#xff0c;自动屏蔽广告和噪音&#xff0c;使读者能够专注于网页的核心内容。此外&#xff0c;Circle 阅读助手还具备多种个性化功能&#x…

Mongodb在UPDATE操作中使用$pull操作

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第68篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

c++实战知识点

c实战知识点 一、概述1.数据2.C11的原始字面量3.数据类型的别名4.const修饰指针5.void关键字6.内存模型7.二级指针8.函数指针和回调函数9.数组10.C风格字符串11.二维数组用于函数的参数行指针&#xff08;数组指针&#xff09; 12.引用引用与const 13.各种形参的使用场景14.重载…

数据结构01 栈及其相关问题讲解

栈是一种线性数据结构&#xff0c;栈的特征是数据的插入和删除只能通过一端来实现&#xff0c;这一端称为“栈顶”&#xff0c;相应的另一端称为“栈底”。 栈及其特点 用一个简单的例子来说&#xff0c;栈就像一个放乒乓球的圆筒&#xff0c;底部是封住的&#xff0c;如果你想…

Druid 参数配置详解

简介 Java 程序很大一部分要操作数据库&#xff0c;为了提高性能操作数据库的时候&#xff0c;又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现&#xff0c;结合了 C3P0、DBCP 等 DB 池的优点&#xff0c;同时加入了日志监控。 Druid 可以很好的…

基础-01-计算机网络概论

一. 计算机网络的发展与分类 1.计算机网络的形成与发展 计算机网络&#xff1a;计算机技术与通信技术的结合 ICTITCT 2.计算机网络标准阶段 3.计算机网络分类1:通信子网和资源子网 通信子网:通信节点(集线器、交换机、路由器等)和通信链路(电话线、同轴电缆、无线电线路、卫…

HashMap第3讲——JDK1.8红黑树细节

上篇文章对HashMap的put方法进行了源码解析&#xff0c;并介绍了其中的两个亮点设计——位运算取代%和扰动计算。其中还有几个细节&#xff0c;比如每次扩容都是2^n是怎么做到的、JDK1.8增加的红黑树结构&#xff0c;由于篇幅原因没有介绍&#xff0c;本节就先来介绍其中的一个…

网络安全 - ARP 欺骗原理+实验

APR 欺骗 什么是 APR 为什么要用 APR A P R \color{cyan}{APR} APR&#xff08;Address Resolution Protocol&#xff09;即地址解析协议&#xff0c;负责将某个 IP 地址解析成对应的 MAC 地址。 在网络通信过程中会使用到这两种地址&#xff0c;逻辑 IP 地址和物理 MAC 地址&…

Stable Diffusion 3 即将开源 引AI界巨大震动;马斯克考虑打造X Phone并威胁禁用苹果设备

&#x1f989; AI新闻 &#x1f680; Stable Diffusion 3 即将开源 引AI界巨大震动 摘要&#xff1a;Stable Diffusion 3有望在明天开源&#xff0c;带来革命性的AI生成图像技术。该版本采用MMDiT全新架构&#xff0c;可能彻底改变AI图像生成格局。尽管Stability AI公司面临财…

国产化替代及现有程序优化

数据库优化 月中、月末程序用的多 数据库慢查询sql 较多&#xff0c;增加数据库服务器内存 现在16G通过内存数据库&#xff0c;中间件缓解数据库压力&#xff0c;热点数据通过内存数据存储客户端不直接连 数据库Sql语句 优化 避免过多join数据库读写分离&#xff0c;甚至分布…