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 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"
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GitBlit】Windows搭建Git服务器详细教程

前言 如果公司或个人想在 Windows 环境下搭建私有的 Git 服务器,那么这个开源的 GitBlit 是一个不错的选择。 Gitblit 是一个开源纯 Java 的用于管理、查看和服务 Git 存储库。它是一个小型的托管集中式存储库工具。支持 SSH、HTTP 和 GIT 协议,开箱即…

通过PyCharm平台开发Django应用程序

学会使用命令行工具开发Django应用程序是基础,不过更多的时候还是要借助平台开发工具。目前,最好的Django应用程序开发工具就是jetBrains公司推出的PyCharm平台了。 借助PyCharm开发平台,可以极大提高开发Django应用程序的效率,同…

静态成员与友元,内部类初识

一.静态成员 1.静态成员变量 (1)定义: 类的定义中以静态声明的变量 (2)写法: static 变量声明 (3)注意: 静态成员变量不在对象中,在静态区&#xff0c…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口(API)是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市,API 是现代移动、SaaS 和 web 应用程序的重要组成部分,可以在面向客 户、面向合作伙伴和内部的应用程…

Xinstall:实现注册后自动绑定,提升用户体验

在移动互联网时代,App的注册与绑定流程对于用户体验至关重要。繁琐的注册步骤和手动绑定操作往往会让用户望而却步,导致用户流失。为了解决这一问题,Xinstall品牌推出了注册后自动绑定功能,极大提升了用户体验。 Xinstall的自动…

手写Java设计模式之抽象工厂模式,附源码解读

接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下: 引入颜色接口: public interface Colour {void fill(); }将颜色与汽车生成品牌…

线性代数基础2矩阵

矩阵是什么 矩阵就是二维数组,下面是一个 m 乘 n 的矩阵,它有 m 行,n 列,每行每列上面都有元素,每个元素都有行标i 和列标 j, a ij 。简称m n矩阵,记作: 注意a11的索引是 A[0,0]。…

Redis入门到通关之数据结构解析-RedisObject

文章目录 ☃️概述☃️源码 ☃️概述 RedisObject 是 Redis 中表示数据对象的结构体,它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中,所有的数据都被存储为 RedisObject 类型的对象。 RedisObject 结构体定义如下(简化版本&#xf…

网络流问题详解

1. 网络最大流 1.1 容量网络和网络最大流 1.1.1 容量网络 设 G(V, E)是一个有向网络,在 V 中指定了一个顶点,称为源点(记为 Vs),以及另一个顶点,称为汇点(记为 Vt);对…

【ds】替换空格

用‘%20’替换空格 var replaceBlank (charArr)> {if (!charArr || charArr.length 0) return var len charArr.lengthlet spaceLen 0for (let i 0; i < len; i) {if (charArr[i] ) {spaceLen}}var extraLen spaceLen * 2 // -> 20% 每一个空格需要增加2个ch…

大型网站系统架构演化实例_4.数据库读写分离

1.数据库读写分离 网站在使用缓存后&#xff0c;使对大部分数据读操作访问都可以不通过数据库就能完成&#xff0c;但是仍有一部分操作&#xff08;缓存访问不命中、缓存过期&#xff09;和全部的写操作都需要访问数据库&#xff0c;在网站的用户达到一定规模后&#x…

Python-VBA函数之旅-getattr函数

目录 一、getattr函数的常见应用场景&#xff1a; 二、getattr函数使用注意事项&#xff1a; 1、getattr函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;https://blog.csdn.net/ygb_1024?spm1010.21…

大模型应用开发基础

AGI 时代&#xff0c;AI 无处不在&#xff0c;形成新的社会分层&#xff1a; AI 使用者&#xff0c;使用别人开发的 AI 产品AI 产品开发者&#xff0c;设计和开发 AI 产品基础模型相关&#xff0c;训练基础大模型&#xff0c;或为大模型提供基础设施 越向下层&#xff0c;重要…

ISP图像处理pipeline简介2

上一篇文章介绍了ISP pipeline中的3A和镜头传感器校正。现在继续介绍pipeline中的其它流程。 上一篇文章主要讲了镜头&#xff0c;sensor相关的处理流程&#xff0c;pipeline接下来的一步是颜色插值。 sensor直接输出的图片是raw格式&#xff0c;需要经过isp处理之后才是平时常…

2024燃动智火-业务视角的中国企业AI+学习发展报告

来源&#xff1a;新华三 学习型组织的数字化转型是众多企业关注的焦点&#xff0c;数字战略需要人才升级&#xff0c;数字 化学习加速人才培养。AI 技术在学习中的运用&#xff0c;为企业学习型组织的数字化转型插 上了飞翔的翅膀。这份报告解码了AI 时代企业的学习发展&#…

k8s安装记录

k8s安装记录 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#xff01;&#xff01;&#xff01; 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#xff01;&#xff01;&#xff01; 如无特别说明&#xff0c;则该步操作指在所有的机器上执行&#…

(C语言入门)数组

目录 什么是数组&#xff1f; 数组&#xff1a; 数组的使用&#xff1a; 数组的初始化&#xff1a; 数组名&#xff1a; 数组案例&#xff1a; 一维数组的最大值&#xff1a; 一维数组的逆置&#xff1a; 数组和指针&#xff1a; 通过指针操作数组元素&#xff1a; …

从技术层面探讨小程序智能名片商城系统中的AI、ERP、OA、SCRM技术应用

随着信息技术的迅猛发展&#xff0c;智能名片商城系统已逐渐成为现代商业运营不可或缺的重要工具。AI、ERP、OA、SCRM等多种技术的融合应用&#xff0c;不仅提升了商城的运营效率和用户体验&#xff0c;更为商家带来了前所未有的商业价值。下面&#xff0c;我们将结合具体案例&…

用栈实现队列(力扣第232题)

#define _CRT_SECURE_NO_WARNINGS 1 #include "assert.h" #include "stdio.h" #include "stdbool.h" #include "stdlib.h" #include "string.h" #define N 10 typedef int STDataType; int data; //静态栈 //typedef struct…

【加密周报】中东“惊雷”炸响币圈!比特币减半成功完成,市场情绪已被提前消化!中美突传USDT重磅消息!

周五(4月19日)&#xff0c;比特币经历惊魂一刻&#xff0c;伊朗核设施所处的中部城市伊斯法罕惊传爆炸&#xff0c;叙利亚与伊拉克也都传来爆炸声响&#xff0c;中东全面战争与核武攻击威胁触发加密市场恐慌情绪。比特币一度下探59600美元。但随后伊朗强调核设施未受损&#xf…