Ansible初识以及安装

news2024/10/7 12:27:33

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 transaction
  Installing : 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得任务可以看到角色变量    yes

vault_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: 1

Now 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.coloradmin.cn/o/1610897.html

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

相关文章

小红书情感博主暴力玩法,流量巨大,客单300+

这个项目的盈利核心在于提供情感咨询服务,每笔交易的利润通常在200到300元之间,这种方式比撰写大量情感内容来吸引流量要简单得多,可以说是一种快速超车的策略。 项 目 地 址 : laoa1.c n 我们以男性的视角提供感情建议&a…

Vitis AI 环境搭建 KV260 PYNQ 安装 要点总结

目录 1. 环境 2. 工具及版本介绍 2.1 工具版本兼容性 2.2 DPU结构 2.3 DPU命名规则 3. Vitis AI 配置要点 3.1 配置安装 Docker 库 3.2 Install Docker Engine 3.3 添加 Docker 用户组并测试 3.4 克隆 Vitis AI 库 3.5 构建 Docker (直接抓取&#xff09…

【网络编程】TCP流套接字编程(TCP实现回显服务器)

一.TCP流套字节相关API. Socket(既能给客户端使用,也能给服务器使用) 构造方法 基本方法: ServerSocket(只能给服务器使用) 构造方法: 基本方法: 二.TCP实现回显服务器. 客户端代码示例: package Demo2;import java.io.IOException; import java.io.InputStream; import j…

sketchup创建3D打印机的模型

查了一下,这玩意有几个版本,其中一个sketchup free是免费的,到官网上看看 下载 SketchUp | 免费试用 3D 建模软件 | SketchUp 是个在线网页版,然后可以再这个网站上注册一个账号 弄个邮箱试试看 创建好进入后,里面就…

项目实践---贪吃蛇游戏的实现

上一章,我们已经分析了贪吃蛇的具体内容,包括它是如何实现的,怎样完成这个项目的,其中就提到了 贪吃蛇有三个代码:一个是测试代码,一个是头文件代码,还有一个是主函数代码。那么今天我们就来讲一…

tensor是pytorch的核心,那torch.tensor和torch.Tensor区别是?

本文重点 从本节课程开始我们将正式开启pytorch的学习了,在深度学习框架中有一个重要的概念叫做张量,它是pytorch的基本操作单位,要想创建tensor有很多的方式,但是有两个torch.tensor和torch.Tensor容易混淆,本节课程…

2024年适用于 Android 的最佳免费数据恢复应用程序

无论是系统崩溃、软件升级、病毒攻击还是任何其他故障,这些软件问题都可能导致手机上的数据丢失。可以使用免费的数据恢复应用程序修复数据故障并检索丢失或删除的文件。 数据恢复应用程序旨在从另一个存储设备中检索丢失或无法访问的数据。这些工具扫描 UFS 并尝试…

销售经理(多继承/虚基类)

根据下图类之间的继承关系,以及main和输出定义,定义Staff类、Saleman类、Manager类和SaleManager类。 Staff类包含的数据成员有编号(num),姓名(name),基本工资(basicSale)。Saleman类…

算法打卡day52|单调栈篇03| 84.柱状图中最大的矩形

算法题 Leetcode 84.柱状图中最大的矩形 题目链接:84.柱状图中最大的矩形 大佬视频讲解:84.柱状图中最大的矩形视频讲解 个人思路 这题和接雨水是相似的题目,原理上基本相同,也是可以用双指针和单调栈解决,只是有些细节不同。…

MT3023 歌词中找单词

1.暴力 10/12 #include <bits/stdc.h> using namespace std; int n; string a[10005]; int main() {cin >> n;for (int i 0; i < n; i)cin >> a[i];string ll;cin >> ll;for (int i 0; i < n; i){string u a[i];int num 0;int j 0;for (in…

使用Python进行自动化测试

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 如何使用Python进行自动化测试&#xff1a;测试框架的选择与应用 自动化测试是软件开发过程…

【JavaSE进阶】10-网络编程 11-Lambda表达式 12-Stream API 13-Java新特性

10 网络编程 10.1 网络编程概述 10.2 网络编程三要素 10.3 网络编程基础类 package com.powernode.javase.net;import java.net.InetAddress;/*** ClassName: InetAddressTest* Description:* java.net.IntAddress类用来封装计算机的IP地址和DNS&#xff08;没有端口信息&…

增强现实(AR)开发框架

增强现实&#xff08;AR&#xff09;开发框架为开发者提供了构建AR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统和网络功能。以下是一些流行的AR开发框架。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

椭圆曲线密码学(ECC)基本介绍和总结

背景 ECC英文全称"Elliptic Curve Cryptography"&#xff0c;其背后的密码学原理或者说安全性&#xff0c;是基于椭圆曲线离散对数问题&#xff08;Elliptic Curve Discrete Logarithm Problem&#xff0c;ECDLP&#xff09;。ECC密码学被普遍认为是RSA密码系统的接…

prometheus+grafana可视化监控

prometheus监控 一、用二进制安装 1、安装Prometheus 打开官方网址:https://prometheus.io/download/ wget https://github.com/prometheus/prometheus/releases/download/v2.45.4/prometheus-2.45.4.linux-amd64.tar.gz下载完成后解压一下安装包 tar vxf prometheus-2.45.…

基于注解配置bean

文章目录 1.基本使用1.基本介绍2.快速入门1.引入jar包2.MyComponent.java3.UserAction.java3.UserDao.java4.UserService.java5.beans05.xml6.断点查看bean对象是否创建7.测试 3.注意事项和细节 2.自己实现spring注解1.需求分析2.思路分析图3.编写自定义注解ComponentScan4.编写…

【Linux 杂货铺】进程间通信

1.进程为什么要通信呢&#xff1f; ①&#x1f34e; 为了进程之间更好的协同工作&#xff0c;举个例子&#xff0c;在学校&#xff0c;学院的管理人员给教师安排课程的时候&#xff0c;必须事先知道该教师平常的上课情况&#xff0c;不然会将教师的课程安排到一起造成麻烦&…

皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

(2022级)成都工业学院数据库原理及应用实验六: SQL DML(增、删、改)

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 在实验三的基础上完成下列查询&#xff1a; 1、在科室表…

【在线OJ系统】自定义注解实现分布式ID无感自增

实现思路 首先自定义参数注解&#xff0c;然后根据AOP思想&#xff0c;找到该注解作用的切点&#xff0c;也就是mapper层对于mapper层的接口在执行前都会执行该aop操作&#xff1a;获取到对于的方法对象&#xff0c;根据方法对象获取参数列表&#xff0c;根据参数列表判断某个…