资讯专栏INFORMATION COLUMN

【云主机 UHost】操作指南:[镜像]自定义镜像、使用Packer创建自定义镜像并导入本地镜像

Tecode / 2570人阅读

摘要:云主机自定义镜像制作镜像选中要制作镜像的主机,然后点击制作镜像按钮。镜像的适用机型限制传承自改自定义镜像的母镜像。如下图所示,通过在中集成等工具,制作包含各类软件的不可变镜像,供多云平台的云主机等使用。

云主机UHost自定义镜像

制作镜像

选中要制作镜像的主机,然后点击制作镜像按钮。填写镜像名称和描述,点击确定即可创建镜像。

输入镜像名称和描述之后,点击确定按钮,即可生成该主机的镜像,此时页面即跳转到镜像管理页面。

自制镜像的价格和生成自制镜像的原镜像一致,例如,自制镜像从UCloud提供的CentOS 6.5上创建,则使用该镜像创建主机免费;若自制镜像从镜像市场的收费镜像创建,则从该自制镜像创建的主机仍然需要收取市场镜像的费用。用户的自制镜像将为用户长久保存在当前地域。

请确保制作自制镜像前,不要修改系统的关键配置。例如网络相关的配置信息。系统关键配置的修改可能会引起镜像无法制作,或制作的镜像无法启动等一系列问题。

镜像管理

支持修改用户名,备注。

从镜像创建主机

可从自定义镜像创建新主机。

本可用区的镜像只能创建本可用区的主机。若需跨可用区创建,请提交工单开通镜像升级到地域级服务权限。

镜像的适用机型限制传承自改自定义镜像的母镜像。例如,该镜像的母镜像是Windows镜像,则无法通过此镜像创建1核的主机,也无法开启网络增强。

自定义镜像配额

image.png

使用Packer创建自定义镜像

注意: 使用 Packer 创建自定义镜像的过程中会创建临时资源,临时资源会在构建结束后自动删除,故需要耗费一定资费。

概述

Packer 是 Hashicorp 公司推出的自动化打包镜像的轻量级开源工具,云厂商通过构建自己的 Builder 集成 Packer 中去,即可凭借单一配置文件,高效并行的为多云平台创建一致性的镜像。Packer 可以运行在常用的主流操作系统上,它不是 Chef、Puppet 等软件的替代品,而是集成并使用这些自动化配置工具在镜像上预装软件等。再配合 UCloud Terraform、UCloud CLI 等工具,可以在多云的DevOps场景下,实现基础设施即代码(IaC),持续集成和快速交付。

如下图所示,Packer 通过在 Provisioner 中集成 Chef、Shell、Puppet 等工具,制作包含各类软件的不可变镜像,供多云平台的云主机、Docker 等使用。
image.png

Packer与传统控制台创建镜像的对比

image.png

Packer创建镜像的生命周期

image.png

  1. 用户通过构建JSON 模版,执行packer build 命令调用UCloud Builder;
  2. 参数提前校验保证可用性;
  3. 创建云主机、EIP等相关临时资源(若配置为内网环境则无需EIP);
  4. 通过SSH或 WinRM 等连接主机,执行 Provisioner 进程;
  5. 关闭云主机,并创建镜像;
  6. 复制镜像;
  7. 删除主机、EIP等临时资源;
  8. 执行后处理进程(如本地镜像导入等)。

快速开始

相关链接

官方参考文档地址

用于查询 UCloud Packer Builder 的各种参数

官方下载页面

用于安装 Packer

开源仓库地址

欢迎为 UCloud Packer Builder 贡献代码

环境配置

安装 Packer

参照官方安装文档安装 Packer

安装 Cloud CLI 工具(非必要,便于查询基础镜像等信息)

安装 Terraform(非必要,便于使用 packer制作的镜像进行资源编排)

配置默认用户

设置密钥 UCLOUD_PUBLIC_KEY , UCLOUD_PRIVATE_ KEY 并设置项目ID UCLOUD_PROJECT_ID 为全局环境变量(推荐),或在 json 文件中显式指定 public_key、 private_key、 project_id。

编写 JSON 文件

让我们以构建一个安装了 nginx 的自定义镜像为例。首先创建一个干净的空文件夹作为工作区,并且切换到该目录下,编写一个 JSON 规格文件(eg:test.json),如下:

{
  "variables": {
    "ucloud_public_key": "{{env `UCLOUD_PUBLIC_KEY`}}"
    "ucloud_private_key": "{{env `UCLOUD_PRIVATE_KEY`}}"
    "ucloud_project_id": "{{env `UCLOUD_PROJECT_ID`}}"
  }
  "builders": [
    {
      "type": "ucloud-uhost"
      "public_key": "{{user `ucloud_public_key`}}"
      "private_key": "{{user `ucloud_private_key`}}"
      "project_id": "{{user `ucloud_project_id`}}"
      "region": "cn-bj2"
      "availability_zone": "cn-bj2-02"
      "instance_type": "n-basic-2"
      "source_image_id": "uimage-f1chxn"
      "ssh_username": "root"
      "image_name": "packer-test-basic-bj"
    }
  ]
  "provisioners": [
    {
      "type": "shell"
      "inline": [
        "yum install -y nginx"
      ]
    }
  ]
}

如上定义了一个 ucloud-uhost Builders 构建器 和一个provisioners配置器 ,通过执行命令 packer build test.json 可以实现一键构建自定义镜像。
image.png

使用Packer创建并导入本地镜像

UCloud 通过对的 Packer 的集成,目前已支持一键导入自制的本地镜像到 UCloud 云平台中。

相关链接

镜像导入官方参考文档地址

用于查询 UCloud import Post-Processors 的各种参数

Packer官方下载页面

用于安装 Packer

开源仓库地址

欢迎为 UCloud Packer Builder 贡献代码

镜像导入示例

下面将使用 Packer 制作并导入一个 CentOS 镜像。如下图所示:

image.png

Packer 首先利用 QEMU Builder 制作了一个 RAW 镜像,存放在本地配置的目录下,之后利用 ucloud-import Post-Processors 后处理器 将本地的镜像存放到用户配置的 UFile 中,并自动化导入到 UCloud 云平台中。

环境配置

安装 Packer

参照官方安装文档安装 Packer

配置默认用户

设置密钥 UCLOUD_PUBLIC_KEY UCLOUD_PRIVATE_ KEY 并设置项目ID UCLOUD_PROJECT_ID 为全局环境变量(推荐),或在 json 文件中显式指定 public_key、 private_key、 project_id。

安装QEMU

参照官方安装文档 其中使用命令行安装,MacOS: brew install qemu CentOs: yum install qemu-kvm Ubuntu: apt-get install qemu

创建一个 UFile 的 bucket 空间

参照官方文档

编写 JSON 文件

让我们基于 MacOs 系统使用 QEMU 创建并导入一个 CentOS 6.10 的自定义镜像为例,示例链接。首先创建一个干净的空文件夹作为工作区,并且切换到该目录下,编写一个 JSON 规格文件(eg:local.json),如下 :

{"variables": {
  "ucloud_public_key": "{{env `UCLOUD_PUBLIC_KEY`}}"
  "ucloud_private_key": "{{env `UCLOUD_PRIVATE_KEY`}}"
  "ucloud_project_id": "{{env `UCLOUD_PROJECT_ID`}}"
  "disk_size": "4096"
  "iso_checksum": "0da4a1206e7642906e33c0f155d2f835"
  "iso_checksum_type": "md5"
  "iso_name": "CentOS-6.10-x86_64-minimal.iso"
  "ks_path": "centos-6.10/ks.cfg"
  "mirror": "http://mirrors.ustc.edu.cn/centos"
  "mirror_directory": "6.10/isos/x86_64"
  "template": "centos-6.10-x86_64"
}
  "builders":[
    {
      "type": "qemu"
      "boot_command": [
        " text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/{{user `ks_path`}}"
      ]
      "boot_wait": "10s"
      "disk_size": "{{user `disk_size`}}"
      "http_directory": "http"
      "iso_checksum": "{{user `iso_checksum`}}"
      "iso_checksum_type": "{{user `iso_checksum_type`}}"
      "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}"
      "output_directory": "packer-{{user `template`}}-qemu"
      "shutdown_command": "echo packer|sudo -S shutdown -P now"
      "ssh_password": "ucloud_packer"
      "ssh_port": 22
      "ssh_username": "root"
      "ssh_timeout": "10000s"
      "vm_name": "{{ user `template` }}.raw"
      "net_device": "virtio-net"
      "disk_interface": "virtio"
      "format": "raw"
      "use_default_display": "false"
      "qemuargs": [
        ["-display" "cocoa"]
      ]
    }
  ]
  "post-processors":[
    {
      "type":"ucloud-import"
      "public_key": "{{user `ucloud_public_key`}}"
      "private_key": "{{user `ucloud_private_key`}}"
      "project_id": "{{user `ucloud_project_id`}}"
      "region":"cn-bj2"
      "ufile_bucket_name": "packer-test"
      "image_name": "packer_import_test"
      "image_os_type": "CentOS"
      "image_os_name": "CentOS 6.10 64位"
      "format": "raw"
    }
  ]
}

如上定义了一个 qemu Builder 构建器 和一个 ucloud-import Post-Processors 后处理器,其中配置了UFile bucket name 等信息。

编写 Kickstart 文件
根据如上 JSON 文件 QEMU 中配置的 http_directory 和 boot_command,则需要 JSON 文件目录下创建一个 ./http/centos-6.10/ 目录用来存放 Kickstart 文件即 ks.cfg 如下:(Kickstart参考文档

install
cdrom
lang en_US.UTF-8
keyboard us
network --bootproto=dhcp
rootpw ucloud_packer
firewall --disabled
selinux --permissive
timezone UTC
unsupported_hardware
bootloader --location=mbr
text
skipx
zerombr
clearpart --all
autopart
auth --enableshadow --passalgo=sha512
firstboot --disabled
reboot

%packages --nobase --ignoremissing
sudo
gcc
make
%end

执行命令行

通过执行命令 packer build local.json 可以实现一键创建并导入自定义镜像。

实时文档欢迎访问https://docs.ucloud.cn/uhost/guide/image/common

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/126077.html

相关文章

  • 概览 主机 UHost

    摘要:概览概览产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与平台订单构成配额机型与规格特性特性热升级磁盘镜像网络内网弹性外网监控购买指导计费模式配置变更续费回收快速上手常见注意事项创建第一台主机操作指南常用操作导航主机网络磁 概览产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与CPU平台订单构成配额机型与规格特性特性热升级 HotPlug磁盘镜像网络内网弹性外...

    ernest.wang 评论0 收藏774
  • 概览 主机 UHost

    摘要:概览概览产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与平台订单构成配额机型与规格特性特性热升级磁盘镜像网络内网弹性外网监控购买指导计费模式配置变更续费回收快速上手常见注意事项创建第一台主机操作指南常用操作导航主机网络磁 概览产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与CPU平台订单构成配额机型与规格特性特性热升级 HotPlug磁盘镜像网络内网弹性外...

    ernest.wang 评论0 收藏518
  • 使用Packer实现动化构建UCloud主机镜像

    摘要:宋体为了解决此类问题,开发了相关代码,并被自动化构建镜像工具的官方仓库所采纳。宋体宋体可以运行在常用的主流操作系统上,它不是等软件的替代品,而是集成并使用这些自动化配置工具在镜像上预装软件等。背景 云主机是用户使用最高频的云产品之一。随着云主机数量的增多,如何在云主机中保证版本化部署的一致性,成为用户常见的难题。在现有情况下,用户首先需要手动或使用脚本连接主机,然后再进行部署安装,操作...

    zorpan 评论0 收藏0
  • 主机 UHost

    摘要:产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与平台订单构成配额机型与规格特性特性热升级磁盘镜像网络内网弹性外网监控购买指导计费模式配置变更续费回收快速上手常见注意事项创建第一台主机操作指南常用操作导航主机网络磁盘镜像自定产品简介什么是云主机产品优势功能简介计费说明主机地域与可用区机型与CPU平台订单构成配额机型与规格特性特性热升级 HotPlug磁盘镜像网络内网弹性外网I...

    ernest.wang 评论0 收藏518

发表评论

0条评论

最新活动
阅读需要支付1元查看
<