Ansible 部署应用

news2024/12/23 13:44:15

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: all
  remote_user: root
  tasks:
  - name: install httpd
    yum: name=httpd state=latest
  - name: start httpd
    service: name=httpd state=started
ansible-playbook test.yaml

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

[root@ansible-node1 ~]# cat test.yaml
---
- hosts: all
  vars:
    package: httpd
  remote_user: root
  tasks:
  - name: install {{ package }}
    yum: name={{ package }} state=latest
  - name: start {{ package }}
    service: name={{ package  }} state=started
[root@ansible-node1 ~]# 

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

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

相关文章

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时,则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现,可能和某种特殊的业务场景或操…

STL——string(2)

博客ID:LanFuRenC系列专栏:C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级:黑色->蓝色->红色 欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦 目录 1) …

Spark的集群环境部署

一、Standalone集群 1.1、架构 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接客、资源管理和任务 调度,等同于YARN中的ResourceManager 从:Worker:计算节点:负责利…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

【Leecode】Leecode刷题之路第40天之组合总和II

题目出处 40-组合总和II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 40-组合总和II-官方解法 方法1:回溯 思路: 代码示例:(Java&…

网络编程入门——网络原理初识

一、网络发展史 1.1 独立模式 即计算机之间相互独立,互不连通的。 1.2 网络互联 即将多台计算机连接在一起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据网络互联规模的不…

关于爬虫需要了解的基础知识 (一、 http协议)

声明 文章仅供学习与交流!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关! 一、何为爬虫 爬虫(Crawler)是一种按照既定规则,在网络上自动爬取信息的程序或脚本,也称为网际网…

VidPanos:从随手拍摄的平移视频生成全景视频

在当今数字化时代,视频拍摄已经成为人们记录生活和分享经历的重要方式。然而,普通手机拍摄的视频往往受到视角的限制,无法完整地展现一个广阔的场景。今天,我们要介绍的 VidPanos 技术,为解决这个问题提供了一种创新的方法。 VidPanos 是由来自华盛顿大学、谷歌 DeepMind…

【05】如何解决tomcat命令提示符控制台乱码问题

Web项目开发过程中,直接在命令提示符窗口中通过输入startup.bat命令运行tomcat,在新弹出的tomcat命令提示符窗口中输出的中文是乱码问题的处理。 如何解决tomcat命令提示符控制台乱码问题 文章目录 如何解决tomcat命令提示符控制台乱码问题1.解决问题思路…

02- 模块化编程-003 LCD1602液晶显示时间与日期

1、液晶显示电路 2、电路原理简介 1. 电路组件与功能 PIC单片机(PIC16F887): 主控制器,负责处理输入输出。 LCD显示屏(LM061): 驱动数码管显示器,以显示时间和日期信息。 支持多个段…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好,只要在base环境下安装就行,可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs,可以执行conda install nodejs安装no…

华为OD机试 - 预订酒店(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

LM Head weights;ChatGPT-3词汇量:175,000;llama7b 词汇量,词嵌入维度:4096

目录 LM Head weights ChatGPT-3词汇量:175,000 llama7b 词汇量 词汇量:32000 max_position_embeddings: 4096 LM Head weights ChatGPT-3词汇量:175,000 ChatGPT-4 确切的词向量种类数量公开信息。但可以根据一些语言模型的相关知识进行推测分析。 一般来说,语言模…

极简实现酷炫动效:Flutter隐式动画指南第二篇之一些酷炫的隐式动画效果

目录 前言 1.弹性放大按钮效果 2.旋转和缩放组合动画 3.颜色渐变背景动画 4.缩放进出效果 前言 在上一篇文章中,我们介绍了Flutter中的隐式动画的一些相关知识,在这篇文章中,我们可以结合多个隐式动画 Widget 在 Flutter 中创建一些酷炫的视觉效果&…

【ONLYOFFICE 文档 8.2 版本深度测评】功能革新与用户体验的双重飞跃

引言 在数字化办公的浪潮中,ONLYOFFICE 文档以其强大的在线协作功能和全面的办公套件解决方案,赢得了全球用户的青睐。随着 8.2 版本的发布,ONLYOFFICE 再次证明了其在办公软件领域的创新能力和技术实力。 一.协作编辑 PDF:团队合…

高频电子线路---倍频器与振荡器

目录 倍频电路原理 丙类倍频器原理电路 问题: 提升滤波方法: 导通角 振荡器 振荡器基本工作原理 首先是怎么维持 那么如何振荡呢? 思考题: 组成要素 振荡器的起振条件 平衡条件 要点提示 稳定条件 振幅平衡 硬激励起振时: 稳定条件 相位平衡 倍频电路原理 简单原理 : …

自杀一句话木马(访问后自动删除)

在做安全测试时&#xff0c;例如文件上传时就要上传可以解析的脚本文件解析证明存在漏洞&#xff0c;这个时候就需要(访问后自动删除文件的一句话木马) PHP <?php echo md5(1);unlink(__FILE__); ?> 访问后自动删除

Windows配置Nodejs及nmp简明教程(2024可用)

一、下载及安装Nodejs 下载 Node.js 中文网 (nodejs.com.cn)在此下载windows长期维护版本的.msi安装包&#xff0c;64位 安装&#xff1a; 双节安装包一直点击Next下一步&#xff0c;注意安装路径选择C盘默认路径&#xff08;C:\Program Files\nodejs\&#xff09;即可&#x…

使用ffmpeg和mediamtx模拟多通道rtsp相机

首先下载ffmpeg&#xff0c;在windows系统上直接下载可执行文件&#xff0c;并配置环境变量即可在命令行当中调用执行。 下载地址&#xff1a; https://ffmpeg.org/再在github上下载mediamtx搭建rtsp服务器&#xff0c;使用ffmpeg将码流推流到rtsp服务器。 下载地址&#xff1…

Unreal5从入门到精通之如何在VR中使用3DUI

文章目录 前言创建3DUI1.新建控件蓝图2.添加控件到画布上3.新建Actor蓝图MyUIActor4.添加控件组件Widget5.设置控件类和画布大小6.创建MyUIActor实例到场景中3DUI和VR射线交互1.添加按钮的点击事件2.设置MyUIActor碰撞响应3.VRPawn添加控件交互组件4.添加手柄Trigger点击事件绑…