当前位置: 首页 > news >正文

营销型网站费用网上有做logo的网站吗

营销型网站费用,网上有做logo的网站吗,云服务器5元左右的,谷歌搜索排名规则概述 作为一名资深运维工程师#xff0c;我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机#xff1a; 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式…概述 作为一名资深运维工程师我们经常需要在 Proxmox 虚拟化平台上创建和管理虚拟机。本文将介绍三种不同的方式在 Proxmox 上创建 Ubuntu 虚拟机 通过 Proxmox 命令创建虚拟机通过 Shell 脚本自动化创建虚拟机使用 Proxmox API 创建虚拟机 每种方式都有其适用场景选择合适的方式可以大大提高工作效率。 proxmox通过更多的方式创建虚拟机 通过 Proxmox 命令创建虚拟机 下载 Ubuntu Cloud 镜像 还是以ubuntu22.04版本为例 mkdir /var/lib/vz/template/qemu/ cd /var/lib/vz/template/qemu/ wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img创建虚拟机模板 创建一个新的虚拟机 使用font stylecolor:rgb(64, 64, 64);qm/font命令创建一个新的虚拟机。假设我们创建一个ID为9000的虚拟机。 # 创建虚拟机 qm create 9000 --name ubuntu-template --memory 2048 --cores 2 --net0 virtio,bridgevmbr0导入下载的镜像 将下载的Ubuntu Cloud镜像导入到虚拟机中。 # 导入镜像 qm importdisk 9000 jammy-server-cloudimg-amd64.img local将磁盘附加到虚拟机 将下载的Ubuntu Cloud镜像导入到虚拟机中。 qm set 9000 --scsihw virtio-scsi-pci --scsi0 local:9000/vm-9000-disk-0.raw配置Cloud-Init 配置Cloud-Init以支持自动化的虚拟机配置。 qm set 9000 --ide2 local:cloudinit qm set 9000 --boot c --bootdisk scsi0 qm set 9000 --serial0 socket --vga serial0配置网络 设置网络接口以使用DHCP qm set 9000 --ipconfig0 ipdhcp将虚拟机转换为模板 将虚拟机转换为模板以便后续克隆。 qm template 9000通过模板创建虚拟机 克隆模板 使用模板克隆一个新的虚拟机。假设我们创建一个ID为100的虚拟机。 qm clone 9000 100 --name ubuntu-100配置Cloud-Init 为新虚拟机配置Cloud-Init参数如用户、密码、SSH密钥等。这里就设置用户密码为ZhangPeng1234命令如下 qm set 100 --ciuser ubuntu --cipassword ZhangPeng1234注这里可以考虑一下ssh key的方式请自行发散 启动虚拟机 启动新创建的虚拟机 qm start 100验证虚拟机 登录proxmox web控制台双击VM ID 100的虚拟机实例。进入控制台 输入用户名密码进入shell 输入ip a 获取VM 100实例的ip地址 注ip a仍然是192.168.0.5因为之前的VM实例我删除了这是正常的。 紧接着可以通过shell自行登录验证虚拟机实例这里有个我很喜欢的创建的VM 100实例的hostname 总算是我克隆模版自定义的name ubuntu-100.比较服务我个人的审美预期 通过 Shell 脚本自动化创建虚拟机 尝试使用deepseek 将上面的步骤封装成了一个shell脚本实现从下载镜像到创建虚拟机模板和虚拟机的流程 vi create_vm.sh #!/bin/bash# 参数配置 TEMPLATE_ID9001 VM_ID101 VM_NAMEubuntu-101 USERNAMEubuntu PASSWORDsecurepassword IMAGE_URLhttps://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img IMAGE_NAMEjammy-server-cloudimg-amd64.img STORAGElocal BRIDGEvmbr0# 下载 Ubuntu Cloud 镜像 echo 下载 Ubuntu Cloud 镜像... wget -q $IMAGE_URL -O $IMAGE_NAME# 创建虚拟机模板 echo 创建虚拟机模板... qm create $TEMPLATE_ID --name ubuntu-template --memory 2048 --cores 2 --net0 virtio,bridge$BRIDGE# 导入镜像 echo 导入镜像... qm importdisk $TEMPLATE_ID $IMAGE_NAME $STORAGE# 将磁盘附加到虚拟机 echo 配置磁盘... qm set $TEMPLATE_ID --scsihw virtio-scsi-pci --scsi0 $STORAGE:$TEMPLATE_ID/vm-$TEMPLATE_ID-disk-0.raw# 配置 Cloud-Init echo 配置 Cloud-Init... qm set $TEMPLATE_ID --ide2 $STORAGE:cloudinit qm set $TEMPLATE_ID --boot c --bootdisk scsi0 qm set $TEMPLATE_ID --serial0 socket --vga serial0 qm set $TEMPLATE_ID --ciuser $USERNAME --cipassword $PASSWORD # 配置 网络 echo 配置 网络... qm set $TEMPLATE_ID --ipconfig0 ipdhcp# 将虚拟机转换为模板 echo 转换为模板... qm template $TEMPLATE_ID# 克隆模板创建新虚拟机 echo 克隆模板创建新虚拟机... qm clone $TEMPLATE_ID $VM_ID --name $VM_NAME# 启动虚拟机 echo 启动虚拟机... qm start $VM_IDecho 虚拟机创建完成 增加可执行权限并执行脚本 chmod x create_vm.sh ./create_vm.sh换一个方式 使用qm命令进入VM 101 id的虚拟机 qm terminal 101继续完善一下脚本提示词如下 每次都更新下载镜像我需要对本地img镜像与现实比对如果一致则略过镜像下载部分当模版存在的时候提醒我是否更新模版如果更新模版则进行覆盖如果否则略过进行下一步。虚拟机如果存在。如果更新则删除旧的虚拟机创建新的虚拟机进行更新如果否则略过。 最终脚本如下 #!/bin/bash# 参数配置 TEMPLATE_ID9001 VM_ID101 VM_NAMEubuntu-101 USERNAMEubuntu PASSWORDsecurepassword IMAGE_URLhttps://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img IMAGE_NAMEjammy-server-cloudimg-amd64.img STORAGElocal BRIDGEvmbr0# 函数检查镜像是否存在 check_image() {if [[ -f $IMAGE_NAME ]]; thenecho 本地镜像已存在...# 获取远程文件大小以字节为单位REMOTE_SIZE$(curl -sI $IMAGE_URL | grep -i content-length | awk {print $2} | tr -d \r)# 获取本地文件大小以字节为单位LOCAL_SIZE$(stat -c%s $IMAGE_NAME)if [[ -n $REMOTE_SIZE $LOCAL_SIZE $REMOTE_SIZE ]]; thenecho 镜像大小一致$LOCAL_SIZE 字节使用现有镜像。return 0elseecho 镜像大小不一致或无法获取远程大小echo 本地大小: $LOCAL_SIZEecho 远程大小: $REMOTE_SIZEread -p 是否重新下载镜像(y/n): REDOWNLOADif [[ $REDOWNLOAD y ]]; thenecho 重新下载镜像...rm -f $IMAGE_NAMEreturn 1elseecho 使用现有镜像继续...return 0fifielseecho 本地镜像不存在开始下载...return 1fi }# 函数检查模板是否存在并处理 check_template_existence() {if qm list | grep -q $TEMPLATE_ID; thenecho 模板 ID $TEMPLATE_ID 已存在。read -p 是否更新模板(y/n): UPDATE_TEMPLATEif [[ $UPDATE_TEMPLATE y ]]; thenecho 停止现有模板...qm stop $TEMPLATE_ID /dev/nullsleep 2echo 删除旧模板...qm destroy $TEMPLATE_IDreturn 0elseecho 保留现有模板。return 1fifireturn 0 }# 函数检查虚拟机是否存在并处理 check_vm_existence() {if qm list | grep -q $VM_ID; thenecho 虚拟机 ID $VM_ID 已存在。read -p 是否更新该虚拟机(y/n): UPDATE_VMif [[ $UPDATE_VM y ]]; thenecho 停止现有虚拟机...qm stop $VM_ID /dev/nullsleep 5echo 删除现有虚拟机...qm destroy $VM_IDreturn 0elseecho 保留现有虚拟机。return 1fifireturn 0 }# 函数创建模板 create_template() {echo 创建虚拟机模板...qm create $TEMPLATE_ID --name ubuntu-template --memory 2048 --cores 2 --net0 virtio,bridge$BRIDGEecho 导入镜像...qm importdisk $TEMPLATE_ID $IMAGE_NAME $STORAGEecho 等待磁盘导入完成...sleep 5# 获取最新导入的磁盘文件DISK_NAME$(ls -t /var/lib/vz/images/$TEMPLATE_ID/vm-$TEMPLATE_ID-disk-*.raw | head -n1)if [[ -z $DISK_NAME ]]; thenecho 错误找不到导入的磁盘文件exit 1fiDISK_BASE$(basename $DISK_NAME)echo 使用磁盘: $DISK_BASEecho 配置磁盘...qm set $TEMPLATE_ID --scsihw virtio-scsi-pci --scsi0 $STORAGE:$TEMPLATE_ID/$DISK_BASEecho 配置 Cloud-Init...qm set $TEMPLATE_ID --ide2 $STORAGE:cloudinitqm set $TEMPLATE_ID --boot c --bootdisk scsi0qm set $TEMPLATE_ID --serial0 socket --vga serial0qm set $TEMPLATE_ID --ciuser $USERNAME --cipassword $PASSWORDecho 配置网络...qm set $TEMPLATE_ID --ipconfig0 ipdhcp# 检查是否已经是模板if ! qm config $TEMPLATE_ID | grep -q template: 1; thenecho 转换为模板...qm template $TEMPLATE_IDfi }# 函数克隆和启动虚拟机 create_vm() {echo 克隆模板创建新虚拟机...qm clone $TEMPLATE_ID $VM_ID --name $VM_NAME --fullecho 等待克隆完成...sleep 5if qm status $VM_ID /dev/null; thenecho 启动虚拟机...qm start $VM_IDelseecho 错误虚拟机创建失败exit 1fi }# 主程序开始 echo 开始执行虚拟机创建流程...# 下载镜像如果需要 if ! check_image; thenecho 下载 Ubuntu Cloud 镜像...wget $IMAGE_URL -O $IMAGE_NAME || {echo 错误下载镜像失败exit 1} fi# 检查并创建/更新模板 if check_template_existence; thencreate_template fi# 检查并创建/更新虚拟机 if check_vm_existence; thencreate_vm fi# 显示最终状态 echo 操作完成当前状态 qm list | grep -E $TEMPLATE_ID|$VM_ID 完美 使用 Proxmox API 创建虚拟机 为了进一步自动化我们可以使用 Proxmox API 来创建虚拟机。以下是一个使用 Python 脚本通过 Proxmox API 创建虚拟机的示例。其实这里我就使用claude3 将上面的脚步转换了一下修改成使用proxmox api 实现上述功能的python脚本 在proxmox主机上面完成如下操作其他机器也可以以使用apt包管理的系统为例 apt install python3-pip pip install proxmoxerapt install python3-proxmoxer使用proxmox api脚本如下 cat create_vm.py #!/usr/bin/env python3import requests import time import os import sys from proxmoxer import ProxmoxAPI from urllib3.exceptions import InsecureRequestWarning# 禁用不安全请求警告 requests.packages.urllib3.disable_warnings(categoryInsecureRequestWarning)# 配置信息 PROXMOX_HOST 192.168.0.200 PROXMOX_USER rootpam PROXMOX_PASSWORD Aa123456. NODE_NAME proxmox1# 获取脚本所在目录的绝对路径 SCRIPT_DIR os.path.dirname(os.path.abspath(__file__))# VM 配置 TEMPLATE_ID 9001 VM_ID 101 VM_NAME ubuntu-101 USERNAME ubuntu PASSWORD securepassword IMAGE_URL https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img IMAGE_NAME jammy-server-cloudimg-amd64.img IMAGE_PATH os.path.join(SCRIPT_DIR, IMAGE_NAME) STORAGE local BRIDGE vmbr0# 超时设置秒 TEMPLATE_CREATE_TIMEOUT 300 # 5分钟 VM_START_TIMEOUT 180 # 3分钟class ProxmoxManager:def __init__(self):self.proxmox ProxmoxAPI(PROXMOX_HOST,userPROXMOX_USER,passwordPROXMOX_PASSWORD,verify_sslFalse)self.node self.proxmox.nodes(NODE_NAME)def wait_for_task_completion(self, task_upid, timeout300):等待任务完成start_time time.time()while time.time() - start_time timeout:try:task_status self.node.tasks(task_upid).status.get()if task_status[status] stopped:if task_status[exitstatus] OK:return Trueelse:print(f任务失败: {task_status.get(exitstatus, 未知错误)})return Falseexcept Exception as e:print(f检查任务状态时出错: {str(e)})return Falsetime.sleep(2)print(任务超时)return Falsedef wait_for_vm_state(self, vmid, desired_staterunning, timeout180):等待VM达到期望状态print(f等待VM {vmid} 变为 {desired_state} 状态...)start_time time.time()while time.time() - start_time timeout:try:status self.node.qemu(vmid).status.current.get()current_state status[status]if current_state desired_state:print(fVM {vmid} 已经是 {desired_state} 状态)return Trueprint(f当前状态: {current_state}, 等待中...)except Exception as e:print(f检查VM状态时出错: {str(e)})return Falsetime.sleep(5)print(f等待VM状态超时当前状态: {current_state})return Falsedef check_image(self):检查镜像是否存在并下载if os.path.exists(IMAGE_PATH):print(本地镜像已存在...)response requests.head(IMAGE_URL)remote_size int(response.headers.get(content-length, 0))local_size os.path.getsize(IMAGE_PATH)if remote_size local_size:print(f镜像大小一致{local_size} 字节使用现有镜像。)return Trueelse:print(f镜像大小不一致本地{local_size}远程{remote_size})choice input(是否重新下载镜像(y/n): )if choice.lower() y:self.download_image()return Trueelse:print(本地镜像不存在开始下载...)self.download_image()return Truereturn Falsedef download_image(self):下载镜像print(下载镜像中...)response requests.get(IMAGE_URL, streamTrue)total_size int(response.headers.get(content-length, 0))block_size 1024 * 1024 # 1MBwith open(IMAGE_PATH, wb) as f:downloaded 0for data in response.iter_content(block_size):f.write(data)downloaded len(data)percentage int((downloaded / total_size) * 100)sys.stdout.write(f\r下载进度: {percentage}%)sys.stdout.flush()print(\n下载完成!)def check_vm_exists(self, vmid):检查VM是否存在try:self.node.qemu(vmid).status.current.get()return Trueexcept:return Falsedef stop_and_destroy_vm(self, vmid):停止并删除VMtry:if self.check_vm_exists(vmid):print(f停止 VM {vmid}...)try:stop_task self.node.qemu(vmid).status.stop.post()if not self.wait_for_vm_state(vmid, stopped, timeout60):print(f停止VM {vmid} 超时)return Falseexcept:passprint(f删除 VM {vmid}...)self.node.qemu(vmid).delete()time.sleep(2)return Trueexcept Exception as e:print(f删除VM时出错: {str(e)})return Falsereturn Truedef create_template(self):创建模板print(创建模板...)# 检查并删除已存在的模板if self.check_vm_exists(TEMPLATE_ID):choice input(f模板 {TEMPLATE_ID} 已存在是否重新创建(y/n): )if choice.lower() y:if not self.stop_and_destroy_vm(TEMPLATE_ID):print(删除现有模板失败)return Falseelse:return Truetry:# 创建新VM作为模板create_task self.node.qemu.create(vmidTEMPLATE_ID,nameubuntu-template,memory2048,cores2,net0fvirtio,bridge{BRIDGE},scsihwvirtio-scsi-pci,scsi0f{STORAGE}:0,import-from{IMAGE_PATH},formatraw,ide2f{STORAGE}:cloudinit,bootc,bootdiskscsi0,serial0socket,vgaserial0,ciuserUSERNAME,cipasswordPASSWORD,ipconfig0ipdhcp)print(等待模板创建完成...)if not self.wait_for_task_completion(create_task, TEMPLATE_CREATE_TIMEOUT):print(创建模板失败)return False# 转换为模板print(转换为模板...)self.node.qemu(TEMPLATE_ID).config.post(template1)print(模板创建成功)return Trueexcept Exception as e:print(f创建模板时出错: {str(e)})return Falsedef create_vm(self):从模板创建VMprint(f创建虚拟机 {VM_ID}...)# 检查并删除已存在的VMif self.check_vm_exists(VM_ID):choice input(fVM {VM_ID} 已存在是否重新创建(y/n): )if choice.lower() y:if not self.stop_and_destroy_vm(VM_ID):print(删除现有VM失败)return Falseelse:return Truetry:# 克隆模板print(克隆模板...)clone_task self.node.qemu(TEMPLATE_ID).clone.post(newidVM_ID,nameVM_NAME,full1)if not self.wait_for_task_completion(clone_task, TEMPLATE_CREATE_TIMEOUT):print(克隆模板失败)return False# 启动VMprint(启动虚拟机...)self.node.qemu(VM_ID).status.start.post()# 等待VM运行if not self.wait_for_vm_state(VM_ID, running, VM_START_TIMEOUT):print(启动VM失败)return Falseprint(fVM {VM_ID} 创建并启动成功)return Trueexcept Exception as e:print(f创建VM时出错: {str(e)})return Falsedef show_status(self):显示VM状态print(\n当前VM状态:)for vmid in [TEMPLATE_ID, VM_ID]:try:status self.node.qemu(vmid).status.current.get()print(fVM {vmid}: {status[status]})except:print(fVM {vmid}: 不存在)def main():try:proxmox ProxmoxManager()# 检查并下载镜像if not proxmox.check_image():print(镜像检查失败)return 1# 创建模板if not proxmox.create_template():print(创建模板失败)return 1# 创建VMif not proxmox.create_vm():print(创建VM失败)return 1# 显示状态proxmox.show_status()return 0except Exception as e:print(f发生错误: {str(e)})return 1if __name__ __main__:sys.exit(main()) 执行脚本输出如下 本脚本已经验证可以正常使用 总结 通过deepseek claude3等chat方式我们实现了proxmox通过更多的方式创建VM的完整流程。 技术方案对比 命令行方式 优点操作直观适合单次部署缺点重复性操作效率低易出错适用场景临时测试、学习环境 Shell脚本方式 优点自动化程度高可重复执行缺点依赖shell环境跨平台性较差适用场景批量部署单一环境下的自动化运维 API方式 优点灵活性强可跨平台易于集成缺点开发难度相对较大需要额外的依赖适用场景需要与其他系统集成或需要二次开发的场景 实践经验总结 1. 自动化考虑要点 幂等性处理脚本需要考虑重复执行的情况错误处理完善的错误捕获和日志记录参数化配置关键参数要可配置化提高脚本复用性状态检查执行关键操作前后的状态验证 2. 性能优化建议 并行处理批量创建时考虑并行执行资源控制合理设置等待时间和超时机制镜像缓存本地保存常用镜像避免重复下载 3. 安全性考虑 密码管理避免明文密码建议使用密钥认证权限控制最小权限原则日志审计关键操作需要记录日志 未来优化方向 基础设施即代码IaC 集成 Terraform 支持添加 Ansible 自动化配置支持云原生部署方案 功能扩展 支持更多操作系统类型添加批量部署功能集成监控和告警系统 可用性提升 添加 Web 界面支持集群部署提供 RESTful API 服务 最佳实践建议 标准化流程 建立统一的命名规范制定标准化的配置模板规范化的部署流程 运维效率 善用模板功能建立基础镜像库自动化脚本版本控制 问题排查 完善的日志记录监控指标收集故障恢复预案 本文详细介绍了在 Proxmox 环境下创建虚拟机的多种方法从基础的命令行操作到高级的 API 集成为不同场景提供了完整的解决方案。通过实践这些方法我们不仅提高了运维效率也建立了一套完整的自动化运维体系。在实际生产环境中建议根据具体需求选择合适的方案并持续优化和改进。未来我们将继续探索更多自动化运维的最佳实践为团队提供更高效的技术解决方案。 参考资料 Proxmox VE 官方文档https://pve.proxmox.com/wiki/Main_PageCloud-Init 文档https://cloudinit.readthedocs.io/Proxmoxer Python APIhttps://pypi.org/project/proxmoxer/ 通过本文的实践和总结我们不仅掌握了多种创建虚拟机的方法更重要的是建立了一套完整的自动化运维思路。希望这些内容能够帮助更多的运维工程师提升工作效率和专业能力。
http://www.hkea.cn/news/14396687/

相关文章:

  • 贵州省住房和建设厅网网站成都洛可可设计有限公司
  • 网站主机和空间wordpress single 主题
  • 腾讯风铃网站建设最专业的营销网站建设价格
  • 汕头网站设计哪家好北京++网站建设咨询顾问公司
  • 合肥建设网站的公司开发网站流程
  • 有什么专业做蛋糕的网站吗wordpress实例网址
  • 招聘网站简历数据分析怎么做台州网红打卡地
  • 叶涛网站推广优化wordpress 卸载plugin
  • seoxseo优化服务公司
  • c#做交易网站杭州建设局网站首页
  • 网站收录查询临沂seo上海网站设计kinglink
  • wordpress 网站建设中做电子元器件的网站
  • 建筑网站夜里几点维护湖南建设职称报考在哪个网站
  • 做网站一天赚多少钱python基础代码
  • 网站建设授权书洛阳建站推广公司
  • dede 添加演示网站网站续费服务商
  • 网上做网站赚钱劳务派遣好还是外包好
  • 猪八戒网站做推广怎么样建立的英语
  • 圣矢网络重庆网站建设优化推广公司车险网站模版
  • 湛江企业建站系统大航母网站建设案例
  • 周口市规划建设局网站2022最新的旅游资讯
  • wordpress自动取分类做菜单外贸网站建设和优化
  • 辽阳网站开发网站建设策划书格式
  • 南宁做网站哪家公司好广州外发加工网
  • 深圳牌申请网站空间搞钱最快的路子
  • html网站首页wordpress 调用菜单
  • 制作网站首页psd品牌宣传推广文案
  • 网站建设如何盈利怎么进入网站后台图片
  • 网站推广产品怎么做高端网站价格
  • 合肥企业网站seo江苏响应式网站建设哪里有