【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.pswp.cn/diannao/81734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81734.shtml
英文地址,請注明出處:http://en.pswp.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…