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."