Ansible 部署应用

Ansible

        Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署  变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷

        Ansible 的基本架构六大件

                Ansible core 核心引擎:即 Ansible 本身

                Host Inventory 主机清单用来定义 Ansible 所管理主机, 默认是在 Ansible 的hosts 配置文件中定义被管理主机, 同时也支持自定义动态主机清单和指定其它配置文件的位置

                Connect plugin 连接插件负责和被管理主机实现通信。除支持使用 SSH 连接被管理主机外, Ansible 还支持其它的连接方式, 所以需要有连接插件将各个主机用连接插件连接到 Ansible

                Playbook( yaml, jinjia2) 剧本用来集中定义 Ansible 任务的配置文件, 即将多个任务定义在一个剧本中由 Ansible 自动执行, 可以由控制主机针对多台被管理主机同时运行多个任务

                Core modules 核心模块:是 Ansible 自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态

                Custom modules 自定义模块用于完成模块功能的补充, 可借助相关插件完成记录日志、发送邮件等功能

        Ansible与SaltStack的对比

                (1)Ansible安装部署简单

                (2)SaltStack响应速度快

                (3)Ansible更安全

                (4)对Windows的支持

                (5)Ansible自身运维比较简单

                

部署ansible    

角色

主机名

IP地址

配置

控制主机

ansible-node1

192.168.27.152

2c4g

被管理主机

ansible-node2

192.168.27.153

2c4g

被管理主机

ansible-node3

192.168.27.154

2c4g

        干净的环境,修改主机名

hostnamectl set-hostname ansible-node1
hostnamectl set-hostname ansible-node2
hostnamectl set-hostname ansible-node3

         在第一台机器上安装Ansible

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum install -y ansible#查版本号即为安装成功
ansible --version

        ansible引用配置文件的优先级 

# 优先级最高
ANSIBLE_CONFIG (一个环境变量)

# 优先级次之
ansible.cfg (位于当前目录中)

# 优先级次之
ansible.cfg (当前用户的家目录中)

# 优先级最低
/etc/ansible/ansible.cfg

        配置ansible的主机清单

vi /etc/ansible/hosts 
#写在配置文件最后即可
192.168.27.153
192.168.27.154

        控制主机清单的主机

ansible all -m ping# all 为被控制机器的IP
# -m 操作的命令 
# ping 测试网络是否通过

 设置 SSH 无密码登录

        为了避免 Ansible 下发指令时需要输入被管理主机的密码,可以通过证书签名达到 SSH

无密码登录。使用 ssh-keygen 产生一对密钥,并通过 ssh-copy-id 命令来发送生成的公钥   

#生成密钥对
ssh-keygen -t rsa#连接被控制端的IP
ssh-copy-id 192.168.10.102

         取消密钥对验证

vi /etc/ansible/ansible.cfg

         把密码写进主机清单 省去密码操作

[root@ansible-node1 ~]# cat /etc/ansible/hosts 
192.168.27.153 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.27.154 ansible_ssh_user=root ansible_ssh_pass=123456

常用模块

[root@ansible-node1 ~]# ansible all -a 'hostname'
192.168.27.153 | CHANGED | rc=0 >>
ansible-node2
192.168.27.154 | CHANGED | rc=0 >>
ansible-node3
[root@ansible-node1 ~]# [root@ansible-node1 ~]# ansible all -a 'free -h'
192.168.27.153 | CHANGED | rc=0 >>total        used        free      shared  buff/cache   available
Mem:           3.7G        175M        3.3G         11M        176M        3.3G
Swap:          2.0G          0B        2.0G
192.168.27.154 | CHANGED | rc=0 >>total        used        free      shared  buff/cache   available
Mem:           3.7G        177M        3.3G         11M        176M        3.3G
Swap:          2.0G          0B        2.0G
[root@ansible-node1 ~]# 

        定义组

# 定义组写在主机清单中 例如我创建的两个组规划机器
[root@ansible-node1 ~]# cat /etc/ansible/hosts [master]
192.168.27.153 ansible_ssh_user=root ansible_ssh_pass=123456[node]
192.168.27.154 ansible_ssh_user=root ansible_ssh_pass=123456
#操作组ansible node -m ping

                可省略command模块,其他模块都不可以

                 command是默认命令

                还可以指定shell命令,用来操作Linux命令 (不可省略)

        user模块

                创建用户

ansible all -m user -a 'name=test'

                删除用户

ansible all -m user -a 'name=test state=absent'#present 表示添加 (省略状态时默认使用)
#absent 表示移除。

        group组模块

#被管理组 db里所有主机创建 mysql 组,gid 为 306
ansible db -m group -a 'name=mysql gid=306 system=yes'

        设置周期任务

                添加周期任务计划

ansible all \
-m cron \
-a 'minute="*/10" job="/bin/echo hello" name="test cron job"'# name 周期任务的名字

                列出周期任务

 ansible all -m shell -a 'crontab -l'

        copy 模块

                Ansible 中的 copy 模块用于实现文件复制和批量下发文件。其中使用 src 来定义本地源文件路径;使用 dest 定义被管理主机文件路径;使用 content 则是使用指定信息内容生成目标文件

#将 本 地 文 件/etc/fstab 复 制 到 被 管 理组 db里 的 所 有 主 机上 的/tmp/fstab.ansible,所有者设置为 root,权限设置为 640
ansible all \
-m copy \
-a 'src=/etc/fstab dest=/tmp/fstab.ansible owner=root mode=640'

         修改简单的内容

ansible all \
-m copy \
-a 'content="Hello Ansible Hi Ansible\n" dest=/tmp/test.ansible'

        file模块

#设置被管理组 dbsrvs 里所有主机中/tmp/fstab.ansible 文件的所属主为 mysql, 所属组为 mysql,权限为 644。
ansible all \
-m file \
-a 'owner=mysql group=mysql mode=644 path=/tmp/fstab.ansible'

        script模块

                Ansible 中的 script 模块可以将本地脚本复制到被管理主机上进行运行。需要注意的是使用相对路径指定脚本位置

[root@ansible-node1 ~]# cat test.sh
#!/bin/bash
echo "ok"
[root@ansible-node1 ~]# chmod +x test.sh
[root@ansible-node1 ~]# ansible all -m script -a 'test.sh'

        service模块

                Ansible 中使用 service 模块来控制管理服务的运行状态。其中使用 enabled 表示是否开机自动启动,取值为 true 或者 false;使用 name 定义服务名称;使用 state 指定服务状态,取值有 started、stoped、restarted

ansible all \
-m service \
-a 'enabled=true name=chronyd state=started'ansible all \
-m service \
-a 'enabled=true name=chronyd state=stopped'

        yum 模块

                切换另外两台的yum源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

                安装模块

ansible all -m yum -a 'name=tree'

                卸载模块

ansible all -m yum -a 'name=tree state=absent'

        palybook模块        

[root@ansible-node1 ~]# cat test.yaml
---
- hosts: allremote_user: roottasks:- name: install httpdyum: name=httpd state=latest- name: start httpdservice: name=httpd state=started
ansible-playbook test.yaml

                 更好的移植性(修改一下)

[root@ansible-node1 ~]# cat test.yaml
---
- hosts: allvars:package: httpdremote_user: roottasks:- name: install {{ package }}yum: name={{ package }} state=latest- name: start {{ package }}service: name={{ package  }} state=started
[root@ansible-node1 ~]# 

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

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

相关文章

Python的全局锁GIL解析

Python的全局锁(GIL)是 CPython 解释器实现中的一个机制,用来确保任何时候只有一个线程执行 Python 字节码。这一机制存在于 CPython 中,主要是为了确保线程操作中的数据一致性,但也因此限制了多线程的并行执行效率。尤…

基于vue框架的的考研信息共享平台v0eyp(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:国家政策,用户,院校政策,院校信息,考研资料,资料分类,考研论坛 开题报告内容 基于Vue框架的考研信息共享平台开题报告 一、研究背景与意义 随着考研人数的逐年增长,考研学生对高效、便捷、个性化的信息获取需求愈发强烈。…

抽丝剥茧 分布式服务框架设计 理论设计篇

1、概述 前面几篇文章给大家详细的介绍了Zookeeper的基础概念以及应用的领域,今天我们讨论的话题是如何自研一套分布式服务框架。早些年有很多基于Dubbo和Zookeeper的分布式系统,这篇文章我们就来聊下如何设计一个分布式服务框架。 2、系统间交互 2.1、…

C++STL——list

C教学总目录 list 1、list简介2、构造函数3、迭代器4、访问和容量函数5、修改类函数6、操作类函数 1、list简介 list是带头双向循环链表&#xff0c;也是模板类&#xff0c;使用时要指明类型&#xff0c;包含于头文件<list> 由于list是双向循环链表&#xff0c;在任意位置…

YoloV8改进策略:Block改进|RFE模块,提高小物体的识别精度|即插即用|代码+修改过程

摘要 论文介绍 本文介绍了一种基于YOLOv5的人脸检测方法,命名为YOLO-FaceV2。该方法旨在解决人脸检测中的尺度变化、简单与困难样本不平衡以及人脸遮挡等问题。通过引入一系列创新模块和损失函数,YOLO-FaceV2在WiderFace数据集上取得了优异的表现,特别是在小物体、遮挡和困…

leaflet矢量瓦片vetorgrid显示聚合和图标裁剪显示不全的问题

1、问题现象 使用leaflet显示矢量瓦片会出现图片挤压的问题和图片裁剪显示不全的问题 2、解决办法和思路 1&#xff09;数据抽稀 方法一&#xff1a;在createTile方法通过控制feature在单张瓦片里面显示的数量&#xff0c;在小层级的时候进行筛选过滤&#xff0c;对点数据类…

Gitee push 文件

1、背景 想将自己的plecs仿真放到git中管理&#xff0c;以防丢失&#xff0c;以防乱改之后丢失之前版本仿真。此操作说明默认用户已下载git。 2、操作步骤 2.1 开启Git Bash 在文件夹中右键&#xff0c;开启Git Bash。 2.2 克隆文件 在Git Bash中打git clone git地址&#…

gitee 使用 webhoot 触发 Jenkins 自动构建

一、插件下载和配置 Manage Jenkins>Plugin Manager 搜索 gitee 进行安装 插件配置 1、前往Jenkins -> Manage Jenkins -> System -> Gitee Configuration -> Gitee connections 2、在 Connection name 中输入 Gitee 或者你想要的名字 3、Gitee host URL 中…

【JavaEE初阶 — 多线程】Thread类的属性

目录 Thread类的属性 1.Thread 的常见构造方法 2.Thread 的几个常见属性 2.1 前台线程与后台线程 2.2 setDaemon() 2.3 isAlive() Thread类的属性 Thread 类是JVM 用来管理线程的一个类&#xff0c;换句话说&#xff0c;每个线程都有一个唯一的Thread 对象与之关联&…

yocto是如何收集recipes,如何加入现有的bb文件

yocto通常是如何收集recipes: 在Yocto中&#xff0c;通过以下方式收集recipes&#xff1a; 层&#xff08;Layers&#xff09; Yocto项目使用层来组织recipes。层是包含配置文件、recipes和其他相关文件的目录结构。每个层有自己的目录&#xff0c;其中 recipes-* 目录用于存…

原生鸿蒙的竞争力到底如何?

目录 1. 崛起与挑战2. 安全机制3. 自动化检测前移4. 深入探讨开发者服务优势 1. 崛起与挑战 长期以来&#xff0c;移动操作系统市场被IOS和安卓所垄断&#xff0c;一直都难以推出完整的自主系统&#xff0c;面临诸多挑战&#xff0c;如推广困难、应用适配难度大&#xff0c;以及…

sublime Text中设置编码为GBK

要在sublime Text中设置编码为GBK&#xff0c;请按照以下步骤操作 1.打开Sublime Text编辑器, 2.点击菜单栏中的“Preferences”(首选项)选项&#xff0c;找打Package Control选项。 3.点击Package Control&#xff0c;随后搜索Install Package并点击&#xff0c;如下图 4.再…

KPRCB结构之ReadySummary和DispatcherReadyListHead

ReadySummary: Uint4B DispatcherReadyListHead : [32] _LIST_ENTRY 请参考 _KTHREAD *__fastcall KiSelectReadyThread(ULONG LowPriority, _KPRCB *Prcb)

Python爬虫:揭开淘宝商品描述的神秘面纱

在这个信息爆炸的时代&#xff0c;我们每天都在和时间赛跑。作为一名Python开发者&#xff0c;你是否曾梦想拥有超能力&#xff0c;能够瞬间揭开淘宝商品描述的神秘面纱&#xff1f;今天&#xff0c;就让我们一起化身为代码界的“福尔摩斯”&#xff0c;使用Python爬虫技术&…

HTML 多媒体标签详解:<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

台式电脑如何改ip地址:全面解析与实操指南

有时候&#xff0c;由于IP地址冲突、网络安全、隐私保护或特定应用需求&#xff0c;我们可能需要更改台式电脑的IP地址。然而&#xff0c;对于不熟悉网络设置的用户来说&#xff0c;这一过程可能显得复杂而陌生。本文将通过全面解析与实操指南&#xff0c;帮助大家轻松掌握台式…

跟着红队笔记学习 tmux:渗透测试中的多终端利器

内容预览 ≧∀≦ゞ 跟着红队笔记学习 tmux&#xff1a;渗透测试中的多终端利器进入 tmux 前的准备tmux 概念简介tmux 基础操作会话管理命令会话管理快捷键会话内和会话外命令的区别 tmux 窗口和面板管理新建和管理窗口分割窗口为面板切换面板面板放大与恢复调整面板大小关闭面板…

【机器学习】24. 聚类-层次式 Hierarchical Clustering

1. 优势和缺点 优点&#xff1a; 无需提前指定集群的数量 通过对树状图进行不同层次的切割&#xff0c;可以得到所需数量的簇。树状图提供了一个有用的可视化-集群过程的可解释的描述树状图可能揭示一个有意义的分类 缺点&#xff1a; 计算复杂度较大, 限制了其在大规模数据…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg

AWTK 使用 nanovg 作为显示的后端&#xff0c;能否将 nanovg 成功移植到 HarmonyOS 上是一个关键问题&#xff0c;所以我们先尝试移植 nanovg&#xff0c;不过实际情况比预想的要简单&#xff0c;整个过程没有遇到任何意外的问题。 1. 将 AWTK 的代码取到 entry/src/main/cpp …

函数调用方法背后的原理

编译器实现函数调用时所遵循的一系列规则称为函数的“调用约定&#xff08;Calling Convention&#xff09;”&#xff0c;x86-64平台上的编译器随着操作系统的不同而有不同的约定。Windows上采用的是Wx64/Vector的标准,而类unix上采用systemV AMD64 ABI的调用标准。统一的调用…