一致的全球部署——镜像篇

简介: 一致的全球部署的需要的时候,通过将 自定义镜像 从一个区域复制到另一个区域或者复制到相同到区域,使您能够在不同的区域启动基于相同 Image 的一致实例,达到高可用的需求。针对场景通过aliyuncli实现不同地域的镜像复制及定制化镜像导入导出功能。

  • 背景:

一致的全球部署的需要的时候,通过将 自定义镜像 从一个区域复制到另一个区域或者复制到相同到区域,使您能够在不同的区域启动基于相同 Image 的一致实例,达到高可用的需求。

  • 针对场景做相应的查询

场景1. 华东1的实例,在华东2部署一样的实例(一致实例)
场景2. 华东1的实例,取消复制到华东2
场景3. 新购部署实例,镜像没有符合特定要求,需要导入镜像
场景4. 对于实例,导出镜像到本地测试或线下私有云环境

除了您现在看到的这文章,您还可以前往:
您也可以使用 ECS 管理控制台、API操作你的自定义镜像 。

ECS 控制台-快照和镜像-镜像
对象存储OSS 控制台
访问控制 控制台
ECS ALIYUN CLI
CopyImage API文档
CancelCopyImage API文档
ImportImage API文档
ExportImage API文档


下文以命令行为示例。

安装Aliyun CLI

首先确保您已经具备Python的Runtime,本文中使用的Python版本为2.7+。
pip install aliyuncli
如果提示您没有权限,请切换sudo 继续执行。
sudo pip install aliyuncli
系统显示如下类似信息,则表明安装成功.
Successfully uninstalled aliyuncli-2.1.2。

配置命令行工具

#在 Linux/UNIX 和 Mac OS 环境下,执行如下命令,打开并填写所列参数。
$ sudo aliyuncli configure
Aliyun Access Key ID [None]: <输入 Access Key ID>
Aliyun Access Key Secret [None]: <输入 Access Key Secret>
Default Region Id [None]: <输入您购买的阿里云产品的 Region Id>
Default output format [None]: <输入您需要的输出格式>

使用场景事例

约束

目前复制镜像功能有如下约束和限制

1. 复制镜像时,自定义镜像的状态必须为 Available。
2. 被复制的自定义镜像必须为您账号下的镜像,不能跨账号复制。
3. 复制镜像的过程中无法删除删除镜像(DeleteImage),但是您可以取消复制任务(CancelCopyImage)。
4. 目前您能在中国大陆地域之间复制镜像,华北 1、华北 2、华北3、华北 5、华东 1、华东 2、华南 1 支持复制镜像功能。复制镜像到其他国家和地区地域时需要 提交工单 申请,并在工单页面注明复制镜像时的源地域、目标地域以及镜像 ID。

目前导入镜像功能有如下约束和限制:

1. 不支持多个网络接口。
2. 不支持 IPv6 地址。
3. 密码策略:8 - 30 个字符,必须同时包含三项(大写或小写字母、数字和特殊符号)。
4. 需要安装虚拟化平台 XEN 和 KVM 驱动。
5. 关闭防火墙,默认打开 22 端口。
6. 镜像需要开启 DHCP。
7. 建议 安装 cloud-init,以保证能成功配置 hostname、NTP 源和 yum 源。
8. 您必须提前 上传镜像文件到对象存储 OSS,导入镜像的地域必须跟镜像文件上传的 OSS Bucket 的地域相同。
9. 您不能删除正在导入的镜像,只能取消导入镜像任务(CancelTask)。

目前导出镜像功能有如下约束和限制:

1. 导出镜像需要 提交工单 申请后才能使用。
2. 不支持导出通过市场镜像的系统盘快照创建的自定义镜像。
3. 支持导出镜像中包括数据盘快照的信息的自定义镜像,其中数据盘个数不能超过 4 个,单个数据盘容量最大不能超过 500 GB
4. 导出镜像是把用户自定义镜像导出到与该自定义镜像同一地域的 OSS bucket 里。

场景1. 华东1的实例,在华东2部署一样的实例(一致实例)

# Copy Image 'm-xxx' from  hangzhou to shanghai.
aliyuncli ecs CopyImage --RegionId cn-hangzhou --ImageId m-xxx --DestinationRegionId cn-shanghai --output json

#返回复制成功后目标地域的镜像: 'm-yyyy'

场景2. 华东1的实例,取消复制到华东2

#  Cancel Copy Image 'm-yyyy' in shanghai.
aliyuncli ecs CancelCopyImage --RegionId cn-shanghai  --ImageId m-yyyy

场景3. 新购部署实例,镜像没有符合特定要求,需要导入镜像

您需要预先通过 访问控制 RAM 服务为您的云服务器 ECS 服务授权读取 OSS 的权限。参阅见以下步骤:

1. 创建角色 AliyunECSImageImportDefaultRole。必须是这个名称,否则导入镜像会失败。角色的策略为:
{
    "Statement": [
    {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
        "Service": [
            "ecs.aliyuncs.com"
        ]}
    }],
    "Version": "1"
}

访问控制RAM控制台创建角色
image.png

2. 在该角色下,添加权限策略 AliyunECSImageImportRolePolicy。这个策略是 ECS 导入镜像功能的默认策略,或者您也可以创建自定义策略,权限需要包含:
{
    "Version": "1",
    "Statement": [
    {
    "Action": [
        "oss:GetObject",
        "oss:GetBucketLocation"
    ],
        "Resource": "*",
        "Effect": "Allow"
    }]
}

image.png

3. 导入镜像
# import image from OSSBucket 'OSSBucket名称' and OSSObject 'm-xxxx.raw'
# aliyuncli ecs ImportImage --RegionId cn-shanghai --DiskDeviceMappings 支持不了磁盘的mappings
#aliyuncli 支持不了 用python来实现
import json
import logging

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.ImportImageRequest import ImportImageRequest

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')

# your access key Id
ak_id = "YOU_ACCESS_KEY_ID"
# your access key secret
ak_secret = "YOU_ACCESS_SECRET"
region_id = "cn-shanghai"
clt = client.AcsClient(ak_id, ak_secret, region_id)

# import image.
def import_image():
    request = ImportImageRequest()
    dict ={"OSSBucket":"testexportimage",
           "OSSObject":"m-uf6c8xeqe9vpdwx1w9gd_system.raw"}
    list=[dict]
    request.set_DiskDeviceMappings(list)
    _execute_request(request)


def _execute_request(request):
    response = _send_request(request)
    if response is None:
        print 'response is None'
        return
    if response.get('Code') is None:

        print "ecs import image task is %s , imageId is %s"%(response['TaskId'], response['ImageId'])

# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)


if __name__ == '__main__':
    print "hello ecs import image"
    import_image()

场景4. 对于实例,导出镜像到本地测试或线下私有云环境

需要通过 RAM 授权云服务器 ECS 官方服务账号写入 OSS 的权限:

1. 创建角色:AliyunECSImageExportDefaultRole(其他任何角色名称无效),为该角色设置以下角色策略:
 {
    "Statement": [
    {
        "Action": "sts:AssumeRole",
        "Effect": "Allow",
        "Principal": {
            "Service": [
            "ecs.aliyuncs.com"
            ]
        }
    }],
    "Version": "1"
 }

image.png

2. 在角色 AliyunECSImageExportDefaultRole 下加入默认的系统权限策略:AliyunECSImageExportRolePolicy,该策略是云服务器 ECS 提供导出镜像的默认策略。用户也可以创建自定义策略,权限需要包含:
 {
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetObject",
                "oss:PutObject",
                "oss:DeleteObject",
                "oss:GetBucketLocation",
                "oss:AbortMultipartUpload",
                "oss:ListMultipartUploads",
                "oss:ListParts"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

image.png

3. 如果已有OSS Bucket就忽略第三步。

image.png

4. 导出镜像
# export Image 'm-xxxx' to OSSBucket 'OSSBucket名称' .
aliyuncli ecs ExportImage --RegionId cn-shanghai --ImageId m-xxxx --OSSBucket testexportimage
#返回 
{
    "RegionId": "cn-shanghai",
    "RequestId": "53D25A67-15D9-412B-BCF7-1BE57889FDE2",
    "TaskId": "t-xxxx"
}

对象存储 OSS -搜索OSSBucket名称-文件管理
image.png

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
文件存储
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
【2月更文挑战第5篇】强制类型参数使用比较频繁,基本上涉及新建、更新、配置等命令都需要针对特定的对应进行操作,所有需要强制输入一个参数来确认操作的对象是谁。
PowerShell系列(十):PowerShell CmdletPowerShell Cmdlet 参数详解
|
消息中间件 Java Linux
Linux下RabbitMQ安装与使用
Linux下RabbitMQ安装与使用
253 1
|
3月前
|
人工智能 应用服务中间件 网络安全
2026年阿里云部署OpenClaw(Clawdbot)流程,OpenClaw无缝接入个人微信攻略
在AI智能助手深度融入日常沟通的2026年,OpenClaw(曾用名Clawdbot、Moltbot)作为功能强大的开源AI框架,支持邮件管理、代码生成、信息查询等多元化任务。将其接入个人微信,能实现“随时随地发指令、AI助手秒响应”的便捷体验——无需打开专用客户端,通过微信即可调用OpenClaw的全部功能,无论是查询资讯、生成文档还是执行自动化任务,都能高效完成。
7359 1
|
消息中间件 Linux 网络安全
Rabittmq安装教程(Linux版)
Rabittmq安装教程(Linux版)
|
NoSQL Redis 数据库
Redis的GUI工具——Another-Redis-Desktop-Manager连接远程数据库Redis
Redis的GUI工具——Another-Redis-Desktop-Manager连接远程数据库Redis
7623 0
|
数据安全/隐私保护 开发者 Docker
国内docker公开镜像站的关闭!别急,docker_image_pusher 使用Github Action将国外的Docker镜像转存到阿里云私有仓库
通过使用 docker_image_pusher 这样的开源项目,我们能够轻松地解决国内访问 Docker 镜像拉取速度慢及拉去失败的问题,同时保证了镜像的稳定性和安全性。利用 Github Action 的自动化功能,使得这一过程更加简单和高效。
3445 2
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
这篇文章介绍了微信小程序中条件渲染和列表渲染的使用方法,包括wx:if、wx:elif、wx:else、wx:for、wx:key以及block标记和hidden属性的使用。
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
|
域名解析 网络协议
阿里云如何找回域名,进行添加或删除?
阿里云如何找回域名,进行添加或删除?
|
机器学习/深度学习 自然语言处理 搜索推荐
一文掌握jieba分词器的常见用法,附带案例
该文章全面介绍了jieba分词器的使用方法,包括安装步骤、不同分词模式的使用,以及如何通过实例代码进行文本分词处理。
2384 0

热门文章

最新文章