【Vagrant+VirtualBox创建自动化虚拟环境】Ansible-Playbook

Vagrant

后续Ansible实战:【Ansible自动化运维实战:从Playbook到负载均衡指南】-CSDN博客

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境

Documentation | Vagrant | HashiCorp Developer官方手册

HashiCorp Cloud Platform-Vagrant查询镜像网站

安装vagrant

Install | Vagrant | HashiCorp Developer

安装 VirtualBox

Oracle VirtualBox

启动报错Error relaunching VirtualBox VM process: 5

  • 避坑!注意卸载完美平台再启动恢复(不玩cs无视之)

如何使用

如何在 Vagrant 中使用这个盒子
第 1 步
选项 1:创建 Vagrantfile 并启动 box (Windows用cmd)vagrant init bento/ubuntu-20.04 --box-version 202407.23.0选项 2:打开 Vagrantfile 并将内容替换为以下内容
#-----------------------s-----------------------------
hosts = {"host1" => "192.168.0.221","host2" => "192.168.0.222","host3" => "192.168.0.223"
}Vagrant.configure("2") do |config|hosts.each do |name, ip|config.vm.define name do |machine|machine.vm.box = "bento/ubuntu-20.04"machine.vm.box_version = "202407.23.0"machine.vm.hostname = "%s" % namemachine.vm.network :public_network,bridge: "en1", ip: ipmachine.vm.provider "virtualbox" do |v|v.name = namev.customize ["modifyvm", :id, "--memory", 1024]v.customize ["modifyvm", :id, "--cpus", 2]endendend
end#-----------------------e-----------------------------
步骤 2
启动您的虚拟机vagrant up #启动
vagrant halt #关闭
vagrant destroy #销毁
vagrant ssh #使用MobaXterm登录可用vagrant创建的私钥登录(.vagrant\machines\host1\virtualbox\private_key),账户名vagrant,密码空
  • 网络

    • network

      • 公共网络(与本机同网段)machine.vm.network :public_network
      • 私有网络(NAT)machine.vm.network :public_network
    • bridge 如果主机上有多个网络接口可用,Vagrant 将 要求您选择虚拟机应桥接到的接口。默认的 可以通过向网络定义添加子句来指定接口。:bridge

       #Vagrant 将 要求您选择虚拟机应桥接到的接口。默认的 可以通过向网络定义添加子句来指定接口config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"#对于某些提供程序,可以指定要桥接的适配器列表 对:config.vm.network "public_network", bridge: ["en1: Wi-Fi (AirPort)","en6: Broadcom NetXtreme Gigabit Ethernet Controller",]```
  • Hyper-V配置(服务器性能配置cpu、memory内存等) Configuration- Hyper-V Provider | Vagrant | HashiCorp Developer

Ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible架构相对比较简单,仅需通过SSH连接客户机执行任务即可

安装Ansible

安装 Ansible — Ansible 社区文档

安装完整的 Ansible 软件包:pipx

#安装pipx
sudo apt update
sudo apt install python3-pip -y
python3 -m pip install --user pipx
python3 -m pipx ensurepath # 把 ~/.local/bin 写进 PATH
export PATH="$HOME/.local/bin:$PATH"
pipx --version
#安装完整的 Ansible 软件包
#apt install python3.8-venv
pipx install --include-deps ansible

Ansible Playbook

Ansible Playbook 提供可重复、可重用、简单的配置管理和多机部署系统,非常适合部署复杂的应用程序。如果您需要多次使用 Ansible 执行任务,请编写 playbook 并将其置于源代码控制之下。然后,您可以使用 playbook 推送新配置或确认远程系统的配置。

前期准备

  #先生成公私钥对ssh-keygen -t rsals /root/.ssh/  #有目录id_rsa  id_rsa.pub#讲vagrant创建的文件夹`.vagrant`传到主机(我这里是Ubuntu24),修改权限chmod 600 .vagrant/machines/host1/virtualbox/private_keychmod 600 .vagrant/machines/host2/virtualbox/private_keychmod 600 .vagrant/machines/host3/virtualbox/private_key#先连接一遍测试	ssh -i .vagrant/machines/host1/virtualbox/private_key vagrant@192.168.0.221ssh -i .vagrant/machines/host2/virtualbox/private_key vagrant@192.168.0.222ssh -i .vagrant/machines/host3/virtualbox/private_key vagrant@192.168.0.223#连接报错Failed to connect to the host via ssh: @@@WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! #使用 ssh-keygen 命令清除旧的公钥ssh-keygen -R 192.168.0.221ssh-keygen -R 192.168.0.222ssh-keygen -R 192.168.0.223

如使用私钥还需要密码,在~/.ssh/ config添加以下内容

如果仍报错 no mutual signature supported,需强制使用 RSA 算法:

sudo cat >> ~/.ssh/config << EOF
Host *PubkeyAcceptedKeyTypes=+ssh-rsaHostKeyAlgorithms=+ssh-rsa
EOF
创建hosts文件
host1 ansible_host=192.168.0.221
host2 ansible_host=192.168.0.222
host3 ansible_host=192.168.0.223[all:vars]
ansible_ssh_private_key_file=.vagrant/machines/{{ inventory_hostname }}/virtualbox/private_key
创建setup.yml文件

当前目录下有以下文件/文件夹,再执行setup.yml

hosts、setup.yml、.vagrant/

ansible-playbook -i hosts setup.yml

---
# 目标主机组:all 表示所有主机
- hosts: all# 启用权限提升(默认使用 sudo)become: true# 切换到 root 用户执行任务become_user: root# 使用 vagrant 用户进行 SSH 连接remote_user: vagrant# 禁用事实收集(目标机无 Python 时需关闭)gather_facts: falsetasks:# 1. 等待 SSH 服务就绪(在控制机本地执行)- name: Wait for ssh to be upbecome: false  # 此任务不需要提权wait_for:port: 22     # 检测端口 22delay: 5     # 每次检测间隔 5 秒connect_timeout: 5  # 连接超时时间timeout: 360  # 总等待时间(秒)host: "{{ ansible_host }}"  # 目标主机 IPdelegate_to: localhost  # 在控制机执行# 2. 安装 Python(使用 raw 模块绕过 Ansible 的 Python 依赖)- name: Installs pythonraw: |# 替换为国内镜像源并更新#sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list#sed -i 's/esm.ubuntu.com//g' /etc/apt/sources.listapt-get update -y && apt-get install -y python  # 安装 Pythonargs:executable: /bin/bash  # 指定解释器# 3. 创建目标目录(用于存放 SSH 密钥)- name: Creates destination directoryfile:path: /root/.ssh/  # 目录路径state: directory   # 确保目录存在mode: 0700         # 目录权限owner: root        # 属主# 4. 推送 RSA 公钥(优先尝试)- name: Pushes user's rsa key to root's vagrant boxcopy:src: ~/.ssh/id_rsa.pub          # 本地公钥路径dest: /root/.ssh/authorized_keys  # 目标路径owner: rootmode: 0600       # 安全权限register: rsa       # 注册结果变量ignore_errors: yes  # 允许失败(若无 RSA 密钥)# 5. 推送 DSA 公钥(仅当 RSA 失败时尝试)- name: Pushes user's dsa key to root's vagrant boxcopy:src: ~/.ssh/id_dsa.pubdest: /root/.ssh/authorized_keysowner: rootmode: 0600when: rsa is failed  # 条件触发register: dsaignore_errors: yes# 6. 推送 ED25519 公钥(前两者均失败时尝试)- name: Pushes user's ed25519 key to root's vagrant boxcopy:src: ~/.ssh/id_ed25519.pubdest: /root/.ssh/authorized_keysowner: rootmode: 0600when: dsa is failed  # 前两个任务均失败时执行# 7. 检查 DNS 解析是否正常- name: Checks if resolver is working properlycommand: host -t A baidu.com  # 测试解析(原 ansible.cc 已过时)register: nsignore_errors: yes# 8. 若 DNS 解析失败,配置备用 DNS(Google Public DNS)- name: Pushes new resolver configuration if resolver failslineinfile:path: /etc/resolv.confregexp: "^nameserver "line: "nameserver 114.114.114.114"  # 替换为 Google DNSstate: presentwhen: ns is failed# 9. 验证 DNS 配置是否生效- name: Checks if resolver is working properly with new nameservercommand: host -t A baidu.comwhen: ns is failed# 10. 完成提示(调试用)- name: Final greetingdebug:msg: "All tasks completed! Your Vagrant VMs are ready."

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

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

相关文章

Codigger Desktop:重新定义数字工作与生活方式

Codigger Desktop是一款革命性的智能桌面操作系统&#xff0c;专为现代数字生活和工作场景打造。它不仅成为开发者的强大生产力工具&#xff0c;更是普通用户日常数字生活的得力助手&#xff0c;完美实现了专业性与易用性的平衡。 Multimedia Desktop全能数字生活平台 重新定…

Servlet+tomcat

serverlet 定义&#xff1a;是一个接口&#xff0c;定义了java类被浏览器&#xff08;tomcat识别&#xff09;的规则 所以我们需要自定义一个类&#xff0c;实现severlet接口复写方法 通过配置类实现路径和servlet的对应关系 执行原理 当用户在浏览器输入路径&#xff0c;会…

什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐

一、DDoS 攻击&#xff1a;互联网时代的 “数字核武器” 1. DDoS 攻击的本质与原理 ** 分布式拒绝服务攻击&#xff08;DDoS&#xff09;** 通过操控海量僵尸设备&#xff0c;向目标服务器发送洪水般请求&#xff0c;耗尽带宽、连接或计算资源&#xff0c;导致合法用户无法访…

Circular Plot系列(一): 环形热图绘制

针对近期多个粉丝咨询环形图的绘制&#xff0c;我意识到&#xff0c;我们似乎没有真正介绍过circle图&#xff0c;但这一类图确是非常常用的图&#xff0c;所以这里详细学习一下circle的绘制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安装包, #https:/…

【数据挖掘】时间序列预测-时间序列预测策略

时间序列预测策略 &#xff08;1&#xff09;单步预测与多步预测&#xff08;2&#xff09;直接多步预测&#xff08;3&#xff09;递归多步预测&#xff08;4&#xff09;直接递归的混合预测&#xff08;5&#xff09;多输入多输出预测 &#xff08;1&#xff09;单步预测与多…

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…

【数据结构】--- 单链表的增删查改

前言&#xff1a; 经过了几个月的漫长岁月&#xff0c;回头时年迈的小编发现&#xff0c;数据结构的内容还没有写博客&#xff0c;于是小编赶紧停下手头的活动&#xff0c;补上博客以洗清身上的罪孽 目录 前言 概念&#xff1a; 单链表的结构 我们设定一个哨兵位头节点给链…

【JAVA】数据类型与变量:深入理解栈内存分配(4)

核心知识点详细解释 Java 的基本数据类型和引用数据类型 基本数据类型 Java 有 8 种基本数据类型&#xff0c;它们可以分为 4 类&#xff1a; 整数类型&#xff1a;byte&#xff08;1 字节&#xff09;、short&#xff08;2 字节&#xff09;、int&#xff08;4 字节&#…

ReentrantLock实现公平锁和非公平锁

在 Java 里&#xff0c;公平锁和非公平锁是多线程编程中用于同步的两种锁机制&#xff0c;它们的主要差异在于获取锁的顺序规则。下面是对二者的详细介绍&#xff1a; 公平锁 公平锁遵循 “先来先服务” 原则&#xff0c;也就是线程获取锁的顺序和请求锁的顺序一致。先请求锁…

一篇撸清 Http,SSE 与 WebSocket

HTTP,SSE 和WebSocket都是网络传输的协议,本篇快速介绍三者的概念和比较。 SSE(Server-Sent Events) 是什么? SSE(Server-Sent Events),服务器发送事件, 是一种基于 HTTP 的轻量级协议,允许服务器主动向客户端(如浏览器)推送实时数据。它设计用于单向通信(服务器到…

5个重要的财务指标讲解

1&#xff09;净资产收益率 2&#xff09;销售净利率 3&#xff09; 销售毛利率 4&#xff09;销售成本率 5&#xff09; 期间费用率 好的&#xff0c;我将通过一个假设的案例&#xff08;某公司2023年数据&#xff09;逐步解释这些财务指标&#xff0c;并用具体数字演示计算…

PISI:眼图1:眼图相关基本概念

0 英文缩写 TIE&#xff08;Time Interval Error&#xff09;时间间隔误差&#xff0c;UI&#xff08;Unit Interval&#xff09;单位间隔PDF&#xff08;Probability Density Function&#xff09;概率密度函数BER&#xff08;Bit Error Rate&#xff09;误码率TJ&#xff08…

前端八股 CSS 2 选择器

选择器功能&#xff1a;选中特定 DOM节点进行渲染 原始方法 getElementById() getElementByName() 现在方法选择器 分类&#xff1a; id选择器 类选择器 标签选择器 逻辑与选择器 其他类型选择器&#xff1a; 伪类选择器&#xff1a; :link&#xff1a;未被访问的链接…

算法竞赛进阶指南.闇の連鎖

目录 题目算法标签: 树上差分, L C A LCA LCA, 倍增思路代码 题目 352. 闇の連鎖 算法标签: 树上差分, L C A LCA LCA, 倍增 思路 对于一个无向图, 第一次切断树边, 第二次切非树边, 一共多少种方案使得图不连通, 点数和边数都很大, 时间复杂度不能是 O ( n 2 ) O(n ^ 2…

ActiveMQ 与其他 MQ 的对比分析:Kafka/RocketMQ 的选型参考(二)

ActiveMQ、Kafka 和 RocketMQ 详细对比 性能对比 在性能方面&#xff0c;Kafka 和 RocketMQ 通常在高吞吐量场景下表现出色&#xff0c;而 ActiveMQ 则相对较弱。根据相关测试数据表明&#xff0c;Kafka 在处理大规模日志数据时&#xff0c;单机吞吐量可以达到每秒数十万条甚…

Electron 从零开始:构建你的第一个桌面应用

&#x1f5a5;️ Electron 从零开始&#xff1a;构建你的第一个桌面应用 Electron 是一个可以使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用的框架。它将 Chromium 和 Node.js 融合到一个环境中&#xff0c;使 Web 开发者也能轻松开发原生桌面应用。 &#x1f680; 什么是 …

相向双指针-16. 最接近的三数之和

16. 最接近的三数之和 题目描述思路讲解代码展示复杂度分析相关标签 题目描述 思路讲解 思路和 15. 三数之和 类似&#xff0c;排序后&#xff0c;枚举 nums[i] 作为第一个数&#xff0c;那么问题变成找到另外两个数&#xff0c;使得这三个数的和与 target 最接近&#xff0c;…

C 语 言 - - - 文 件 操 作

C 语 言 - - - 文 件 操 作 文 件文 件 名文 件 操 作fopenfclose 文 件 的 顺 序 读 写fputcfgetcfputsfgetsfprintffscanffwritefread 流文 件 的 随 机 读 写fseekftellrewind 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你…

Walrus 与 Pudgy Penguins 达成合作,为 Web3 头部 IP 引入去中心化存储

以将深受喜爱的数字藏品赋予生命而闻名的 IP 与品牌开发公司 Pudgy Penguins&#xff0c;现已集成 Walrus&#xff0c;用于存储和管理其日益增长的数字媒体资源库&#xff0c;包括在其产品和社区体验中使用的贴纸和 GIF。团队将率先通过 Tusky&#xff08;Walrus 的用户友好型文…

2019ICPC陕西省赛暨陕西邀请赛题解 BCDEF HIJKL

共111支队伍&#xff0c;获奖情况&#xff08;大概&#xff09; 铜牌66 —— 3 296 银牌33 —— 4 391 金牌 11 —— 6 808 题目难度&#xff08;过题&#xff09;L F E B C I J D K H Problem - L - Codeforces 思路&#xff1a;注意到答案是连乘&#xff0c;只要有0…