Ansible自动化运维

1 ansible介绍和架构

1.1 什么是ansible

       ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

        ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

1.2 ansible功能

  • 批量执行远程命令,可以对远程的多台主机同时进行命令的执行
  • 批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务
  • 编排高级的企业级复杂的IT架构任务,Ansible的Playbook和role可以轻松实现大型的IT复杂架构
  • 提供自动化运维工具的开发API,有很多运维工具,如jumpserver就是基于ansible实现自动化管理功能

1.3 ansible特性

  • 基于Python语言实现
  • 模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块
  • 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)
  • 安全,基于OpenSSH
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对
  • 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构
  • 较强大的多层解决方案 role

1.4 ansible架构

        组合INVENTORY、API、MODULES、PLUGINS的绿框,为ansible命令工具,其为核心执行工具。

  • INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
  • MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
  • PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等
  • API:供第三方程序调用的应用程序编程接口

2 ansible安装和入门

2.1 ansible安装

2.1.1 基础配置

(三个节点均进行相同操作)

#修改主机名称
[root@localhost ~]# hostnamectl set-hostname ansible
[root@ansible ~]#
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]#
[root@localhost ~]#  hostnamectl set-hostname node2
[root@node2 ~]#
#关防火墙和selinux
[root@ansible ~]# setenforce 0
[root@ansible ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@ansible ~]# systemctl stop firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@ansible ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#配置yum源
[root@node1 ~]# mkdir /opt/centos
[root@ansible ~]# mount CentOS-7-x86_64-DVD-1804.iso /opt/centos/
mount: /dev/loop0 is write-protected, mounting read-only
[root@ansible ~]# mv /etc/yum.repos.d/* /media
[root@ansible ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@ansible ~]# yum clean all && yum repolist
Loaded plugins: fastestmirror
Cleaning repos: centos
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
Loaded plugins: fastestmirror
Determining fastest mirrors
centos                                                   | 3.6 kB     00:00
(1/2): centos/group_gz                                     | 166 kB   00:00
(2/2): centos/primary_db                                   | 3.1 MB   00:00
repo id                              repo name                            status
centos                               centos                               3,971
repolist: 3,971
[root@ansible ~]# yum install -y wget
[root@ansible ~]# wget -O /etc/yum.repos.d/CentOS-Base-epel.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.1.2 ansible安装

(三个节点均进行相同操作)

#修改主机名称
[root@localhost ~]# hostnamectl set-hostname ansible
[root@ansible ~]#
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]#
[root@localhost ~]#  hostnamectl set-hostname node2
[root@node2 ~]#
#关防火墙和selinux
[root@ansible ~]# setenforce 0
[root@ansible ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@ansible ~]# systemctl stop firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@ansible ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#配置yum源
[root@node1 ~]# mkdir /opt/centos
[root@ansible ~]# mount CentOS-7-x86_64-DVD-1804.iso /opt/centos/
mount: /dev/loop0 is write-protected, mounting read-only
[root@ansible ~]# mv /etc/yum.repos.d/* /media
[root@ansible ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@ansible ~]# yum clean all && yum repolist
Loaded plugins: fastestmirror
Cleaning repos: centos
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
Loaded plugins: fastestmirror
Determining fastest mirrors
centos                                                   | 3.6 kB     00:00
(1/2): centos/group_gz                                     | 166 kB   00:00
(2/2): centos/primary_db                                   | 3.1 MB   00:00
repo id                              repo name                            status
centos                               centos                               3,971
repolist: 3,971
[root@ansible ~]# yum install -y wget
[root@ansible ~]# wget -O /etc/yum.repos.d/CentOS-Base-epel.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.2 ansible相关文件

2.2.1 配置文件
  • /etc/ansible/ansible.cfg  主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文件
  • /etc/ansible/hosts  主机清单
  • /etc/ansible/roles/  存放角色的目录
2.2.2 主配置文件

        ansible配置文件可以放在多个不同的地方,优先级从高到低顺序如下:

ANSIBLE_CONFIG  #环境变量
./ansible.cfg   #当前目录下的ansible.cfg
~/.ansible.cfg  #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg  #系统默认配置文件

        Ansible的默认配置文件/etc/ansible/ansible.cfg,其中大部分的配置内容无需进行修改

[defaults]
#inventory= /etc/ansible/hosts  #主机列表配置文件
#library=/usr/share/my_modules/  #库文件存放目录
#remote_tmp= $HOME/.ansible/tmp  #临时py命令文件存放在远程主机目录
#local_tmp= $HOME/.ansible/tmp  #本机的临时命令执行目录
#forks=5  #默认并发数
#sudo_user= root  #默认sudo 用户
#ask_sudo_pass = True  #每次执行ansible命令是否询问ssh密码
#ask_pass=True
#remote_port=22
#host_key_checking = False  #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log  #日志文件,建议启用
#module_name =command  #默认模块,可以修改为shell模块[privilege_escalation]  #普通用户提权配置
#become=True
#become method=sudo
#become_user=root
#become ask pass=False

        Eg:当前目录下的ansible配置文件优先生效

[root@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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
[root@ansible ~]# cp /etc/ansible/ansible.cfg .
[root@ansible ~]# ansible --version
ansible 2.9.27config file = /root/ansible.cfg    #注意配置文件路径configured 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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

 

2.2.3 inventory主机清单文件

        ansible的主要功能用在于批量主机操作,为了便携地使用其中的部分主机,;可以在inventory file中将其分组命名

        默认的inventory file为/etc/ansible/hosts

        inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

        注意:生产建议在每个项目目录下从创建项目独立的hosts文件

主机清单文件格式

        inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中

        此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

[root@ansible ~]# vi /etc/ansible/hosts
[websrvs]
192.168.20.[11:12][dbsrvs]
192.168.20.11
192.168.20.13[testsrvs:children]   #定义testsrvs组中包括其余两个分组,实现组嵌套
websrvs
dbsrvs
#查看组
[root@ansible ~]# ansible all --list-hostshosts (3):192.168.20.11192.168.20.12192.168.20.13
[root@ansible ~]# ansible websrvs --list-hostshosts (2):192.168.20.11192.168.20.12
[root@ansible ~]# ansible dbsrvs --list-hostshosts (2):192.168.20.11192.168.20.13
[root@ansible ~]# ansible testsrvs --list-hostshosts (3):192.168.20.11192.168.20.12192.168.20.13

2.3 ansible相关工具

利用ansible实现管理的主要方式:

        Ansible Ad-Hoc 即利用ansible命令,主要用于临时命令使用场景

        Ansible playbook 主要用于长期规划好的,大型项目的场景,需要有前期的规划过程

ansible 使用前准备

        ansible 相关工具大多数是通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能建议:使用此工具前,先配置ansible主控端能基于密钥认证的方式联系各个被管理节点

2.3.1 ansible-doc

        此工具用来显示模块帮助,相当于man

        语法格式:ansible-doc 参数 模块

参数说明:

  • -l:列出可用模块
  • -s:显示指定模块的playbook片段
ansible-doc -l  #列出所有模块
ansible-doc ping  #查看指定模块帮助用法
ansible-doc-sping  #查看指定模块帮助用法

查看模块数量

[root@ansible ~]# date
Tue Jul 30 00:35:58 CST 2024
[root@ansible ~]# ansible --version
ansible 2.9.27config file = /root/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, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
[root@ansible ~]# ansible-doc -l|wc -l
3387

2.3.2ansible

ansible Ad-Hoc的执行方式的主要工具就是ansible

语法格式:

ansible 主机列表 参数 模块

参数说明:

--version  #显示版本

-m  #指定模块,默认为command

--list-hosts  #显示主机列表,可简写--1ist

-C  #检查,并不执行

-T  #执行命令的超时时间,默认10S

-k  #提示输入ssh连接密码,默认Key验证

-u  #执行远程执行的用户,默认root

-b  #指定sudo的runas用户,默认为root

-K  #提示输入sudo时的口令

-f FORKS  #指定并发同时执行ansible任务的主机数

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

ansible的执行状态

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且对目标主机做变更

红色:执行失败

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

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

相关文章

玩FPGA不乏味

玩FPGA不乏味 Hello,大家好,之前给大家分享了大约一百多个关于FPGA的开源项目,涉及PCIe、网络、RISC-V、视频编码等等,这次给大家带来的是不枯燥的娱乐项目,主要偏向老的游戏内核使用FPGA进行硬解,涉及的内…

工商业光伏系统踏勘、设计、施工全流程讲解

随着全球能源结构的转型和环保意识的提升,光伏发电作为一种清洁、可再生的能源形式,正越来越受到工商业领域的青睐。商场、学校、医院、各类工厂等地,安装光伏发电系统不仅能降低运营成本,还可以为企业树立良好的环保形象。 一、前…

mongo开启慢日志及常用命令行操作、数据备份

mongo开启慢日志及常用命令行操作、数据备份 1.常用命令行操作2.mongo备份3.通过命令临时开启慢日志记录4.通过修改配置开启慢日志记录 1.常用命令行操作 连接命令行 格式:mongo -u用户名 -p密码 --host 主机地址 --port 端口号 库名; 如:连…

Vue跨标签通讯(本地存储)(踩坑)

我司有一个需求【用户指引】 需求是根标签有一个用户指引总开关,可以控制页面所有的用户指引是否在页面进入后初始是否默认打开,但是有些页面会新开标签这就设计到跨标签通讯了 我采取的方案是本地存储 重点:首先本地存储在页面是同源(即域名协议端口三…

Scrapy解析JSON响应v

在 Scrapy 中解析 JSON 响应非常常见,特别是当目标网站的 API 返回 JSON 数据时。Scrapy 提供了一些工具和方法来轻松处理 JSON 响应。 1、问题背景 Scrapy中如何解析JSON响应? 有一只爬虫(点击查看源代码),它可以完美地完成常规的HTML页面…

机器学习生物医学

Nature与Science重磅!AI与生物医药迎来百年来最重磅进展!https://mp.weixin.qq.com/s/Vw3Jm4vVKP14_UH2jqwsxA 第一天 机器学习及生物医学中应用简介 1. 机器学习及生物医学中应用简介 2. 机器学习基本概念介绍 3. 常用机器学习模型介绍&#xff0…

ISIS五

L1路由器的次优路径问题 路由渗透 可以打标签 等价路由上面下面都把骨干区域引入非骨干 强制ATT位不置位为1 attached-bit advertise never 在AR2上禁止ATT置位为1 在AR3没有禁止呀还是有默认路由 ISIS选路机制: L1的路由优于L2的路由 星号bit 叫DU-bit 知道…

BFC的理解

BFC的理解 BFC是什么?BFC如何触发?BFC的作用问题解决Margin重叠问题Margin塌陷问题高度塌陷 BFC是什么? BFC是块级格式上下文(Block Formatting Context),是CSS布局的一个概念,在BFC布局里面的…

C++入门基础

一、C的第一个程序 C兼容C语⾔绝大多数的语法&#xff0c;所以C语言实现的hello world依旧可以运行&#xff0c;C中需要把定义⽂件 代码后缀改为.cpp&#xff0c;vs编译器看到是.cpp就会调⽤C编译器编译&#xff0c;linux下要⽤g编译&#xff0c;不再是gcc #include<stdio.h…

VMware 安装国产操作系统UOS过程

VMware是一个虚拟化的平台&#xff0c;在这个平台上能训练操作系统&#xff08;客户端版本和服务器端版本&#xff09;&#xff0c;在真机的条件下虚拟出更多的应用场景。&#xff08;如果你的硬件设备足够强悍&#xff0c;可以通常这个平台虚拟出256个终端&#xff08;可能会更…

仿蝠鲼软体机器人实现高速多模态游动

近期&#xff0c;华南理工大学周奕彤老师研究团队最新成果"Manta Ray-Inspired Soft Robotic Swimmer for High-speed and Multi-modal Swimming"被机器人领域会议 IEEE/RSJ International Conference on Intelligent Robots and Systems&#xff08;IROS 2024&#…

稀土阻燃剂:电子设备的安全守护者

稀土阻燃剂是一类以稀土元素为基础的阻燃材料&#xff0c;广泛应用于电子设备中&#xff0c;主要用于提高材料的阻燃性能和热稳定性&#xff0c;以满足现代电子设备对安全性和可靠性的要求。稀土阻燃剂在电子设备中的应用具有以下特点&#xff1a; 1. 电路板&#xff1a;稀土阻…

Issue id: AppLinkUrlError 应用intent-filter 配置深链接 URL 问题分析 | AndroidManifest

AndroidManifest.xml 配置文件中&#xff0c;对 activity 组件进行声明的时候&#xff0c;独立应用在 IDE 显示 intent-filter 报错&#xff0c;但不影响实际编译&#xff0c;因为是系统应用&#xff0c;肯定会有此 URL 的存在。 AOSP 源码&#xff1a; <activity android:…

QT 中 sqlite 数据库使用

一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …

扫二维码进小程序的指定页面

草料二维码解码器 微信开发者工具 获取二维码解码的参数->是否登陆->跳转 options.q onLoad: function (options) {// console.log("options",options.q)if (options && options.q) {// 解码二维码携带的链接信息let qrUrl decodeURIComponent(optio…

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…

Apache Dolphinscheduler可视化 DAG 工作流任务调度系统

Apache Dolphinscheduler 关于 一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 DolphinScheduler 的主要特性如下&#xff1a; 易于部署&#xff0c;提供四种部署方式&am…

“原批教育家”原批之星鲁健的杰作——原批俱乐部

伟大的原批教育家——原批之星&#xff0c;名为鲁健&#xff0c;是一位在南京邮电大学智能科学与技术专业中崭露头角的杰出人物。他不仅以其卓越的黑客技术和对网络正义的执着而闻名&#xff0c;更是“远古四神”之一&#xff0c;以其对原批之力的深刻理解和不同见解&#xff0…

github深度学习项目复现教程

如何找感兴趣的项目&#xff1f; 使用github或papers with code搜索关键词“deep learning”等&#xff0c;最受欢迎的是stars数最多的 查看readme 是否清晰地描述了项目目标、使用的技术、安装步骤和运行方法 是否包含依赖项、所需数据集和训练模型等信息 1、准备环境 如…

在玩“吃鸡”的时候游戏崩溃要如何解决?游戏运行时崩溃是什么原因?

“吃鸡”游戏崩溃问题深度解析与解决方案&#xff1a;原因、修复与预防 在紧张刺激的“吃鸡”&#xff08;即《绝地求生》&#xff09;游戏中&#xff0c;突然遭遇游戏崩溃无疑会让玩家倍感沮丧。作为一名经验丰富的软件开发从业者&#xff0c;我深知游戏崩溃可能由多种因素引…