Ansible初识以及安装

1. Ansible应用简述:

        Ansible基于python语言实现,由Paramiko和PyYAML两个关键模块构建。具有独特的设计理念:

        1)安装部署简单

        2)管理主机便捷,支持多主机并行管理

        3)避免在被管理主机上安装客户端代理,打开额外端口,采用无代理方式,只是利用了现有的ssh后台进

        4)支持非root用户管理操作,支持sudo

2. Ansible架构模式:

        Ansible维护模式通常由控制机和被管机组成。控制机是用来安装ansible工具软件,执行维护指令的机器,是ansible维护的核心。被管机是运行业务服务的机器,由控制机通过ssh来进行管理。

        2.1 Ansible的管理架构

        Ansible是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用ssh进行连接。

        Ansible管理系统由控制主机和一组被管节点组成。控制主机直接通过ssh控制被管节点,被管节点通过Ansible的资源清单(inventory)来进行分组管理。

        2.2 Ansible的系统架构

        Ansible是基于模块工作的,本身没有批量以的能力。真正有能力的是Ansible运行的模块,Ansible只是提供了框架。

核心引擎:Ansible

核心模块(core modules):这些都是Ansible自带的模块,Ansible模块资源分发到远程节点使其执行特性任务或者匹配一个特定的状态。Ansible遵循“batteries included”哲学,所以你可以有各种各样任务的核心模块。

自定义模块(custom modules):如果核心模块不足以完成某种功能,可以添加自定义模块。

插件(plugins):完成模块功能的补充,借助插件完成记录日志、邮件等功能。

剧本(playbook):定义Ansible任务的配置文件,可以将多个任务定义在一个剧本中,由Ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。

连接插件(connectior plugins):Ansible基于连接插件连接到各个主机,负责和被控节点实现通信。虽然Ansible是使用的ssh连接到各个被管节点,但是也支持其他方法,所以需要有链接插件。

主机清单(host inventory):定义Ansible管理的主机策略,默认是在Ansible的hosts配置文件中定义被管节点,同时也支持自定义动态主机清单和指定配置文件的位置。

        2.3 任务执行模式

        Ansible系统由控制主机对被管节点的操作可以分为两类,即ad-hoc和playbook:

        ad-hoc模式使用单个模块,支持批量执行单条命令。

        playbook模式是ansible的主要管理方式,通过多个task集合完成一类功能,可以把playbook理解为通过组合多条ad-hoc操作的配置文件。

        ansible执行过程流程如下:

3.Ansible的安装:

        3.1 yum安装

[root@k8s-master ~]# yum install -y ansible
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile* base: mirrors.ustc.edu.cn* extras: mirrors.ustc.edu.cn* updates: mirrors.ustc.edu.cn
base                                                                                                                                                                                                              | 3.6 kB  00:00:00     
docker-ce-stable                                                                                                                                                                                                  | 3.5 kB  00:00:00     
epel                                                                                                                                                                                                              | 4.7 kB  00:00:00     
extras                                                                                                                                                                                                            | 2.9 kB  00:00:00     
kubernetes                                                                                                                                                                                                        | 1.4 kB  00:00:00     
updates                                                                                                                                                                                                           | 2.9 kB  00:00:00     
(1/2): epel/x86_64/updateinfo                                                                                                                                                                                     | 1.0 MB  00:00:01     
(2/2): epel/x86_64/primary_db                                                                                                                                                                                     | 7.0 MB  00:00:11     
Resolving Dependencies
.......
Running transactionInstalling : python2-httplib2-0.18.1-3.el7.noarch                                                                                                                                                                                  1/7 Installing : python-babel-0.9.6-8.el7.noarch                                                                                                                                                                                       2/7 Installing : python2-jmespath-0.9.4-2.el7.noarch                                                                                                                                                                                   3/7 Installing : python-paramiko-2.1.1-9.el7.noarch                                                                                                                                                                                    4/7 Installing : python-markupsafe-0.11-10.el7.x86_64                                                                                                                                                                                  5/7 Installing : python-jinja2-2.7.2-4.el7.noarch                                                                                                                                                                                      6/7 Installing : ansible-2.9.27-1.el7.noarch                                                                                                                                                                                           7/7 Verifying  : python-markupsafe-0.11-10.el7.x86_64                                                                                                                                                                                  1/7 Verifying  : ansible-2.9.27-1.el7.noarch                                                                                                                                                                                           2/7 Verifying  : python-paramiko-2.1.1-9.el7.noarch                                                                                                                                                                                    3/7 Verifying  : python2-jmespath-0.9.4-2.el7.noarch                                                                                                                                                                                   4/7 Verifying  : python-babel-0.9.6-8.el7.noarch                                                                                                                                                                                       5/7 Verifying  : python2-httplib2-0.18.1-3.el7.noarch                                                                                                                                                                                  6/7 Verifying  : python-jinja2-2.7.2-4.el7.noarch                                                                                                                                                                                      7/7 Installed:ansible.noarch 0:2.9.27-1.el7                                                                                                                                                                                                          Dependency Installed:python-babel.noarch 0:0.9.6-8.el7  python-jinja2.noarch 0:2.7.2-4.el7  python-markupsafe.x86_64 0:0.11-10.el7  python-paramiko.noarch 0:2.1.1-9.el7  python2-httplib2.noarch 0:0.18.1-3.el7  python2-jmespath.noarch 0:0.9.4-2.el7 Complete!

        3.2 目录结构

        我们先tree下看看有哪些文件

[root@k8s-master ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles

        ansible.cfg:文件,ansible配置文件

        hosts:文件,存放主机信息

        roles:目录,存放roles信息

        其中还有两个我们后面会用到的

        host_vars:目录,存放主机变量

        group_vars:目录,存放主机组变量

        3.3 ansible.cfg配置详解

        ansible.cfg主要配置分类:

[defaults]:通用配置项
[inventory]:与主机清单相关的配置项
[privilege_escalation]:特权升级相关的配置项
[paramiko_connection]:使用paramiko连接的相关配置项,Paramiko在RHEL6以及更早的版本中默认使用的ssh连接方式
[ssh_connection]:使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式
[persistent_connection]:持久连接的配置项
[accelerate]:加速模式配置项
[selinux]:selinux相关的配置项
[colors]:ansible命令输出的颜色相关的配置项
[diff]:定义是否在运行时打印diff(变更前与变更后的差异)

        具体配置示例:

[defaults]
inventory     = /etc/ansible/hosts     # ansible inventory文件路径
library       = /usr/share/my_modules/ # ansible模块文件路径
module_utils  = /usr/share/my_module_utils/ #模块文件存放目录
remote_tmp    = ~/.ansible/tmp         # ansible远程主机脚本临时存放目录
local_tmp     = ~/.ansible/tmp         # ansible管理节点脚本临时存放目录
forks         = 5     # ansible执行并发数
poll_interval = 15    # ansible异步任务查询间隔
sudo_user     = root  # ansible sudo用户
ask_sudo_pass = True  # 运行ansible是否提示输入sudo密码
ask_pass      = True  # 运行ansible是否提示输入密码
transport     = smart # ansible远程传输模式,需要优化执行速度的时候可以修改这个参数
remote_port   = 22    # 远程主机SSH端口
module_lang   = C     # ansible模块运行默认语言环境
gathering     = smart # facts信息收集开关定义
timeout       = 10    # ansible SSH连接超时时间
remote_user   = root  # ansible远程认证用户
roles_path    = /etc/ansible/roles     # ansible role存放路径
log_path      = /var/log/ansible.log   # ansible日志记录文件
executable    = /bin/sh        # ansible命令执行shell
module_name   = command        # ansible默认执行模块
module_set_locale  = False     # 设置本地环境变量,默认false
host_key_checking  = False     # ansible第一次连接客户端是是否要检查ssh密钥
hash_behaviour     = replace   # ansible主机变量重复处理方式
fact_caching       = memory    # 定义ansible facts缓存方式
private_role_vars = yes    # 默认情况下,角色中的变量将在全局变量范围中可见, 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量    yesvault_password_file                 # 指定vault密码文件路径,默认无
ansible_managed = Ansible managed   # 定义的一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中    
display_skipped_hosts = True        # 开启显示跳过的主机
error_on_undefined_vars = False     # 开启错误,或者没有定义的变量
#action_plugins           # ansible action插件路径,默认无
#cache_plugins            # ansible cache插件路径,默认无
#callback_plugins         # ansible callback插件路径,默认无
#connection_plugins       # ansible connection插件路径,默认无
#lookup_plugins           # ansible lookup插件路径,默认无
#inventory_plugins        # ansible inventory插件路径,默认无
#vars_plugins             # ansible vars插件路径,默认无
#filter_plugins           # ansible filter插件路径,默认无
#terminal_plugins         # ansible terminal插件路径,默认无
#strategy_plugins         # ansible strategy插件路径,默认无
#fact_caching_connection  # 定义ansible facts缓存路径,默认无## 特权升级相关的配置项
[privilege_escalation]
become          = True   # 是否开启become模式
become_method   = sudo   # 定义become方式
become_user     = root   # 定义become方式
become_ask_pass = False  # 是否定义become提示密码## accelerate缓存加速
[accelerate]
accelerate_port            = 5099  # 加速连接端口5099
accelerate_timeout         = 30    # 命令执行超过时间,单位为s
accelerate_connect_timeout = 5.0   # 上一个活动连接的时间,单位为min
accelerate_daemon_timeout  = 30    # 允许多个私钥被加载到daemon
accelerate_multi_key       = yes   # 任何客户端想要连接daemon都要开启这个选项

4.Ansible的简单测试:

        4.1 控制主机和被管节点做互信

        

#1.生成密钥
[root@ansible01 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:GtEwqzua31adtJZoLAy3ycMVdDhu8ddUj/HMenpsx/0 root@ansible01
The key's randomart image is:
+---[RSA 2048]----+
|      o....   ...|
|       ==.    .*.|
|      o..=   o. =|
|    ....+ o . .. |
|    .*.*S+ =  . .|
|     .Oo= *    =.|
|    o .= .    . B|
|   o o.        oo|
|  o....         E|
+----[SHA256]-----+
#2.将公钥copy到被控主机上
[root@ansible01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.19
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.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
root@11.0.1.19's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@11.0.1.19'"
and check to make sure that only the key(s) you wanted were added.

        4.2 主机连通性测试

[root@ansible01 ~]# ansible 11.0.1.19 -m ping
11.0.1.19 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

下一章会对组件进行说明。

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

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

相关文章

SpringBoot集成Sharding-jdbc(水平分表)

SpringBoot集成Sharding-jdbc(水平分表) 1.Sharding-jdbc的应用场景2.实际使用2.0 项目层级2.1 导入依赖2.2 application.yml配置2.3 dao层2.4 对应的mybatis的xml文件2.5 Service层2.6 pojo2.7 controller2.8 多线程配置 1.Sharding-jdbc的应用场景 其…

【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏78】MBB大型城投集团核心能力建设分析报告 【格式】PDF版本 【关键词】战略规划、商业分析、管理咨询、MBB顶级咨询公司 【强烈推荐】 这是一套…

什么是CPU与GPU,它们之间有什么关系

什么是CPU与GPU,它们之间有什么关系一、CPU1. 核心功能2. 工作原理3. 组成部分4. 发展历程5. 性能指标6. 架构种类7. 发展趋势8. 应用领域 二、GPU三、CPU与GPU的关系 什么是CPU与GPU,它们之间有什么关系 一、CPU CPU,全称是“Central Proc…

吃鸡游戏msvcp140.dll丢失的解决方法

msvcp140.dll 是一个与 Microsoft Visual C Redistributable 相关的动态链接库(DLL)文件,是 Windows 操作系统中众多应用程序正常运行所必需的关键组件之一。以下是对 msvcp140.dll 文件的总体介绍和msvcp140.dll丢失的多个解决方案分享。 *…

ROS仿真小车(一)—— urdf模型+rviz可视化

文章目录 前言一、创建功能包二、urdf文件三、launch文件四、图形化显示五、RVIZ可视化总结参考文献 前言 ROS学习过程记录,从零开始仿真一辆小车,之后会实现运动控制、雷达、相机等 部分代码已上传至本人的GitHub,如果需要请自行下载&…

算法题解记录18+++搜索二维矩阵Ⅱ

本题可以说是运用二分查找的典例,即使是面对矩阵,只要是它保持“排序好”这样的结构,就一定能采用二分查找法。【你知道的,对于排序好的数组,二分查找几乎是最优秀的算法】 当然,答案提供的是“Z字形查找法…

实在Agent:超自动化智能体的革命(附导引指南)

在自动化技术的浪潮中,实在智能推出了实在Agent(智能体),一款基于大语言模型和屏幕语义理解技术的超自动化智能体。它通过自然对话交互,将复杂工作简化为一句话指令,自动规划并执行工作任务,极大…

C++奇迹之旅:深入理解赋值运算符重载

文章目录 📝赋值运算符重载🌠 运算符重载🌉特性 🌠 赋值运算符重载🌠传值返回:🌠传引用赋值:🌉两种返回选择🌉赋值运算符只能重载成类的成员函数不能重载成全…

unity学习(86)——细节优化

东西已经做出来了,现在需要的是优化,说得简单,做起来难。 1.122包的优化,避免重复创建! 2.为何会出现一边动,一边不动的情况。重复登录后依旧是unity可以看到移动,但是exe那边看不到移动&#…

关于图像YUV格式分类和排布方式的全学习

【学习笔记】关于图像YUV格式分类和排布方式的全学习_yuv图像-CSDN博客 下图是将多个yuv420p图像(A和B),拼接成一个画面的思路 A大小:416*64 B大小:416*208 将A和B合并到一个416*416的尺寸上,代码如下 //整合char * ptd;ptd (char * ) malloc (416*41…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

矽塔SA8321 单通道 2.7-12.0V 持续电流 3.0A H 桥驱动芯片

描述 SA8321是为消费类产品,玩具和其他低压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。此器件能够驱动一个直流无刷电机,由一个内部电荷泵生成所需的栅极驱动电压电路和4个功率 NMOS组成H桥驱动,集成了电机正转/反…

2024上海国际半导体制造设备材料与核心部件展览会

2024上海国际半导体制造设备材料与核心部件展览会 2024 Shanghai International Semiconductor Manufacturing Equipment Materials and Core Components Exhibition 时间:2024年11月18日-20日 地点:上海新国际博览中心 详询主办方陆先生 I38&#…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx,选择【File】->【New Project】,进入芯片选择界面,搜索到蓝桥杯官方的芯片型号,并点击收藏,下次直接点击收藏就…

【LeetCode: 39. 组合总和 + 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

比特币减半倒计时:NFT 生态将受到怎样的影响?

BTC 减半倒计时仅剩不到 1 天,预计在 4 月 20 日迎来减半。当前区块奖励为 6.25 BTC,减半后区块奖励为 3.125 BTC,剩余区块为 253。比特币减半无疑是比特币发展史上最重要的事件之一,每当这一事件临近,整个加密社区都充…

Linux下SPI设备驱动实验:测试读取ICM20608设备中数据是否正常

一. 简介 前面文章实现了 SPI设备的读写功能,也对ICM20608设备中(即SPI设备)寄存器里的数据进行了读取。文章如下: Linux下SPI设备驱动实验:读取ICM20608设备的数据-CSDN博客 本文对驱动功能进行测试,即…

大数据平台搭建2024(二)

二:Hive安装 只在node01上操作 1 安装MySQL 8.0 最小化安装需要安装这个 yum install -y wget1-1 下载MySQL的yum源 wget http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm检查是否安装成功 rpm -qpl mysql80-community-release-el7-7.n…

c++使用spdlog库打日记

打日记 打日志的本质就是多输出,c没有自带的日志库,只能使用第三方库实现,当然,直接cout输出也可以,但是一般日志库都进行了优化,比我们使用cout输出的效率更高,同时效果也更好,这里…

vue3【详解】 vue3 比 vue2 快的原因

使用 Proxy 实现响应式 vue3使用的 Proxy 在处理属性的读取和写入时,比vue2使用的defineProperty 有更好的性能(速度加倍的同时,内存还能减半!) 更新类型标记 Patch Flag 在编译模板时(将vue语法转换为js描…