SmartOS依赖images。images是包含在创建新zone或虚拟机时使用的磁盘或文件系统映像和元数据的模板。

images使用imgadm工具进行管理。 使用此工具,您可以:

查看和下载在公共映像服务器上可用的映像
     安装本地images或者import远程images
     列出,显示或打印有关images的详细信息
     销毁images

这里我们将讨论如何查找可用的images并开始使用它们。 然后我们将看看images是什么,以及如何创建自己的images。 最后,我们来看一下如何创建自己的私有image server。

Basics

Viewing & Downloading Public Images(查看和下载公开的images)

**注意,这些信息最近已经改变了,为了清楚和正确,这一段可能被编辑**

默认images服务器是https://images.joyent.com。 您可以使用imgadm sources -a <URL>命令来编辑源列表,如imgadm(1m)中所述。 使用命令imgadm更新,将导致本地缓存(/var/db/imgadm/imgcache.json)使用sources.list中找到的服务器上的可用映像进行更新。 一旦您的本地缓存更新,您可以列出所有可用的images使用imgadm avail:

  1. # imgadm sources
  2. https://images.joyent.com
  3.  
  4. # imgadm avail | head -n 1 ; imgadm avail | tail
  5. UUID NAME VERSION OS PUBLISHED
  6. 380539c4-3198-11e5-82c8-bf9eeee6a395 debian-7 20150724 linux 2015-07-24T00:09:14Z
  7. ab3db4c0-31ac-11e5-8856-43e56a8e4285 centos-6 20150724 linux 2015-07-24T02:35:38Z
  8. 7459f182-31af-11e5-b23a-eb0fd8799c77 freebsd-10 20150724 bsd 2015-07-24T02:55:34Z
  9. ead4ff68-320a-11e5-bd54-3749d04712df ubuntu-14.04 20150724 linux 2015-07-24T13:50:17Z
  10. 0764d78e-3472-11e5-8949-4f31abea4e05 minimal-32 15.2.0 smartos 2015-07-27T15:13:25Z
  11. 8ec06130-3472-11e5-bf91-ebc747dbae7e minimal-64 15.2.0 smartos 2015-07-27T15:17:13Z
  12. 1e5d6e28-3473-11e5-9e94-1fd77993b49f minimal-multiarch 15.2.0 smartos 2015-07-27T15:21:14Z
  13. 2bd52afe-3474-11e5-b07d-c7fb14b2c9e8 base-32 15.2.0 smartos 2015-07-27T15:28:46Z
  14. 5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
  15. 9caff6c6-3476-11e5-9951-bf98c6cb8636 base-multiarch 15.2.0 smartos 2015-07-27T15:46:14Z
  16.  
  17. # imgadm avail | grep base-64 | tail
  18. c02a2044-c1bd-11e4-bd8c-dfc1db8b0182 base-64-lts 14.4.0 smartos 2015-03-03T15:55:44Z
  19. 24648664-e50c-11e4-be23-0349d0a5f3cf base-64-lts 14.4.1 smartos 2015-04-17T14:15:04Z
  20. 4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64 15.1.0 smartos 2015-04-24T08:52:36Z
  21. b67492c2-055c-11e5-85d8-8b039ac981ec base-64-lts 14.4.2 smartos 2015-05-28T17:12:26Z
  22. 0edf00aa-0562-11e5-b92f-879647d45790 base-64 15.1.1 smartos 2015-05-28T17:50:41Z
  23. 5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
  24.  
  25. 要下载这些images之一,如“base-64”,我们将使用图像UUID导入它:
  1. # imgadm import 5c7d0d24-3475-11e5-8e67-27953a8b237e
  2. Importing 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) from "https://images.joyent.com"
  3. Gather image 5c7d0d24-3475-11e5-8e67-27953a8b237e ancestry
  4. Must download and install 1 image (127.2 MiB)
  5. Imported image 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0)
  6.  
  7. # imgadm list
  8. UUID NAME VERSION OS PUBLISHED
  9. 5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z

Advanced Topics

What exactly is an Image?

图像是创建新VM所需的数据和元数据。 “数据”是一个或多个压缩的ZFS数据集,将被克隆以创建新的VM。 “元数据”以JSON的形式描述了数据,并概述了使用它的机器的规范。
以下是两个文件的示例:

  1. benr@magnolia:~/datasets$ ls -lh
  2. total 41M
  3. -rw-rw-r-- 1 benr benr 996 Sep 10 14:54 smartos-1.3.12.dsmanifest
  4. -rw-rw-r-- 1 benr benr 41M Jun 10 2011 smartos-1.3.12.zfs.bz2

Image Manifests(image 清晰度)

以下是从公共存储库https://datasets.joyent.com/datasets/(为了清楚起见而添加重新排列和换行符)的示例清单。
您会注意到,当创建/更新/发布图像时,我们有属性可以识别图像(UUID,名称,版本,描述等),作者(creator_name,creator_uuid等),然后是一个标识ZFS的数组 数据集文件或文件,最后列出一些要求的数组。

  1. {
  2. "uuid": "febaa412-6417-11e0-bc56-535d219f2590",
  3. "name": "smartos",
  4. "version": "1.3.12",
  5. "description": "Base template to build other templates on",
  6.  
  7. "os": "smartos",
  8. "type": "zone-dataset",
  9. "platform_type": "smartos",
  10. "cloud_name": "sdc",
  11. "urn": "sdc:sdc:smartos:1.3.12",
  12.  
  13. "creator_name": "sdc",
  14. "creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
  15. "vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
  16.  
  17. "created_at": "2011-04-11T08:45Z",
  18. "updated_at": "2011-04-11T08:45Z",
  19. "published_at": "2011-04-11T08:45Z",
  20.  
  21. "files": [
  22. {
  23. "path": "smartos-1.3.12.zfs.bz2",
  24. "sha1": "246c9ae158dc8f204643afdd6bd4d3c4aa35e733",
  25. "size": 42016482,
  26. "url": "https://datasets.joyent.com/datasets/febaa412-6417-11e0-bc56-535d219f2590/smartos-1.3.12.zfs.bz2"
  27. }
  28. ],
  29. "requirements": {
  30. "networks": [
  31. {
  32. "name": "net0",
  33. "description": "public"
  34. }
  35. ]
  36. }
  37. }
  1. 创建自己的清单时,需要以下属性:
  2.  
  3.     uuidimageUUID(使用在线UUID生成器)
        名称:image的名称(例如:“centos-6”)
        版本:image的版本(例如:“1.0.0”)
        描述:image的简短描述
        published_at:在映像服务器上发布日期的时间戳(不需要准确);以正确格式输出当前时间,使用命令:date +“%Y-%m-%dTT.000Z
        creator_uuidimage作者的UUID(如果您没有使用在线UUID生成器)
        creator_nameimage作者的名称
        urn:用于以“cloud_namecreator_namenameversion”的形式描述image的特殊字符串;对于“cloud_name”,如果您不确定,我建议“smartos”,创建者的名字通常是您的组织。字符串不应包含空格。 (例如:“smartoscuddletechplan91.0.0”)
        类型:image的类型,KVM的“zvol”或zone的“zone-dataset
        os:这个image的操作系统,需要。在撰写本文时,必须是smartoslinuxwindowsbsdillumos等。
        文件:一个或多个文件对象的数组,每个文件对象包含以下属性:
            路径:image数据文件的本地文件路径(压缩zfs转储)
            sha1image数据文件的SHA1;获取SHA1哈希使用:digest -a sha1 <file>
            sizeimage数据文件的文件大小;获取使用:ls -l <​​file>
  4.  
  5. 要求部分是推荐但不是当前需要,也不是强制执行。

Creating a Custom Zone Image

创建zone image的过程如下所示:
     根据需要创建和自定义zone
     清除日志等,并运行sm准备image以使机器image-ready(请记住阅读警告消息!)。
     暂停zone:vmadm stop <UUID>
     快照zone数据集:zfs快照区域/ <UUID> @image
     转储和压缩数据集:zfs send zones / <UUID> @image | gzip> image_name.zfs.gz
     创建如上所述的清单

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

数据集压缩
数据集必须被压缩。 您可以使用Xz,GZip或BZip2。 BZip2将提供比GZip更小的文件,但GZip压缩更快。 特别是对于大于10GB的数据集,强烈推荐使用GZip。

如果您希望使用image的所有CN都是20150402或更高版本,则Xz是一个选项。 XZ将提供更好的压缩,BZip2和通常接近GZip的速度。 Xz在release-20150402之前不可用。

Creating a Custom KVM Image

创建KVM image的过程如下所示:

根据需要创建和自定义KVM实例
     清除并准备实例
     停止VM:vmadm stop <UUID>
     快照disk0 ZVol:zfs snapshot zones/<UUID>-disk0@image
     转储和压缩数据集:zfs send zones / <UUID> -disk0 @ image | gzip> image_name.zvol.gz

您现在可以通过imgadm在本地导入映像或将其传输到映像服务器。

Importing Images Locally

通常,映像从映像服务器下载,但是也可以使用以下方式导入映像:imgadm -m <manifest> -f <file>

过程如下所示:

  1. # imgadm install -m smartos-1.3.12.dsmanifest -f smartos-1.3.12.zfs.bz2
  2. febaa412-6417-11e0-bc56-535d219f2590 doesnt exist. continuing with install
  3. febaa412-6417-11e0-bc56-535d219f2590 successfully installed
  4. image febaa412-6417-11e0-bc56-535d219f2590 successfully imported

Serving Images

默认社区映像(以前的数据集)服务器是datasets.joyent.com。 您可以使用各种各样的image来使用和构建新的image。 但是,如果您想分发自己的image供他人使用? 这就是我们在这里讨论的。

How Image Server Work

image的功能非常简单。 当image服务器被添加到客户端sources.list并且它们进行imgadm更新时,该工具将针对源URL执行HTTP GET操作。 此get将返回一个JSON对象数组,这是每个可用映像的dsmanifest文件。 这是一个例子:

  1. $ curl -ks https://datasets.joyent.com/datasets/
  2. [
  3. {
  4. "name": "mongodb",
  5. "version": "1.3.2",
  6. "type": "zone-dataset",
  7. "description": "64-bit MongoDB 2.0 SmartMachine Database Appliance with Quickbackup and Replica Sets",
  8. "published_at": "2012-08-31T16:04:51.970Z",
  9. "os": "smartos",
  10. "uuid": "6bf31ce2-f384-11e1-a338-e39c2fe4ab59",
  11. "creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
  12. "vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
  13. "creator_name": "sdc",
  14. "platform_type": "smartos",
  15. "cloud_name": "sdc",
  16. "urn": "sdc:sdc:mongodb:1.3.2",
  17. "created_at": "2012-08-31T16:04:51.970Z",
  18. "updated_at": "2012-08-31T16:04:51.970Z",
  19. "files": [
  20. {
  21. "path": "mongodb-1.3.2.zfs.bz2",
  22. "sha1": "dff4787bcc8cd115a2307d1e833a49d23a1ad9b0",
  23. "size": 115202324,
  24. "url": "https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2"
  25. }
  26. ],
  27. "requirements": {
  28. "networks": [
  29. {
  30. "name": "net0",
  31. ....
    当客户端使用imgadm import UUID下载图像时,默认情况下,客户端将以以下形式下载清单中指定的映像文件(ZFS数据集):<source_server_url> / <image_uuid> / <file_path>
    所以在上面的例子中,下载的文件将是* https//datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2*。 您会注意到,清单中的文件包含一个URL,如果存在它将被使用,但不是必需的。
  32.  
  33. 因此,image服务器的操作非常简单和直接。

Creating a Poor Man's Image Server

如上所述,“image”服务器所需的功能非常基本。 因此,我们可以通过以下方式模拟数据集服务器的基本功能:

在您的Web服务器上,为您的SmartOS映像服务器创建一个目录。 我们将在http://mysite.com上假设“images /”。
     将每个DS清单添加到index.html。 不要包含任何HTML! 我们只使用这个文件名,因为它是访问目录时发送的默认内容。 请记住,该文件包含一个清单对象数组,因此格式为:

  1. [
  2. { manifest1... },
  3. { manifest2... }
  4. ]
    对于每个image,使用图像UUID创建一个目录,即:“images / 6bf31ce2-f384-11e1-a338-e39c2fe4ab59”。
    image文件复制到UUID目录中
    现在试试吧! curl -ks http://mysite.com/images”应该返回你的对象。
    将其添加到sources.listimgadm更新以使用。
    这里描述的解决方案不是优雅的,也不是最优的,但是从网络帐户提供图像的可行选项,它们不具有使用下面描述的更优雅的smartos-image-server的选项。

Using the smartos-image-server

由nshalman启动的社区image服务器项目可以在github:smartos-image-server上找到
服务器在Node.js中实现,并实现了服务image所需的基本功能。 这是推荐的服务image的方法。

  1.  

Managing Images on smartos的更多相关文章

  1. Managing a node remotely by using the netapp SP

    Managing a node remotely by using the Service Processor The Service Processor (SP) is a remote manag ...

  2. Managing IIS Log File Storage

    Managing IIS Log File Storage   You can manage the amount of server disk space that Internet Informa ...

  3. Managing the Lifecycle of a Service

    service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...

  4. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  5. Managing Group Policy with PowerShell

    Overview In this article, I’ll talk about your options when it comes to managing Group Policy using ...

  6. ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档

    https://smartos.org/ http://dtrace.org/guide/chp-io.html http://blog.csdn.net/babyfacer/article/deta ...

  7. Managing Hierarchical Data in MySQL

    Managing Hierarchical Data in MySQL Introduction Most users at one time or another have dealt with h ...

  8. [Angular 2] Managing State in RxJS with StartWith and Scan

    The scan operator in RxJS is the main key to managing values and states in your stream. Scan behaves ...

  9. Managing linux Shell Jobs

    Managing Shell Jobs   When moving jobs between the foreground and background, it may be useful to ha ...

随机推荐

  1. [UE4]头文件循环依赖C++

    有2个类:aaa和bbb. aaa.h已经#include了bbb.h,则bbb.h就不能#include aaa.h,但bbb.cpp可以#include aaa.h bbb.h已经#include ...

  2. [UE4]C++ 动态内存分配(6种情况,好几个例子)

    1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...

  3. javascript通过改变滚动条滚动来显示某些元素的scrollIntoView()方法

    scrollIntoView(b)可以在任何HTML上调用,通过滚动滚动条,调用的元素就可以出现在可视区域. 参数如果是true,或者不传参数,则表示调用元素的顶部与浏览器顶部平齐. 如果传入fals ...

  4. Spring Security编程模型

    1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...

  5. linux 下各个4K区块文件大小测试速度对比 机械硬盘性能 64K性价比收益最高

    机械硬盘,每个区块取三次数最小值为准,带2G RAM缓存卡 4K3.4 MB/秒 8K7.3 MB/秒 16K9.5 MB/秒 32K16.7 MB/秒 64K44.2 MB/秒 128K67.1 M ...

  6. 学习MongoDB 一:MongoDB 入门(安装与配置)

    一.简介 MongoDB一种非关系型数据库(NoSql),是一种强大.灵活.可扩展的数据存储方式,因为MongoDB是文档模型,自由灵活很高,可以让你在开发过程中畅顺无比,对于大数据量.高并发.弱事务 ...

  7. PS制作gif动图教程

    之前做过一些动图,时间久了就忘记了,每次心血来潮想做的时候又要重新找资料,网上的教程都不够完整,因此整理了一份完整的教程,针对PS新手(对,没错,就是博主自己哈哈). 准备工作:photoshop.图 ...

  8. Oracle 存储过程 延迟执行 DBMS_LOCK.SLEEP(60);

      --测试代码: declare -- Local variables here i integer; begin -- Test statements here dbms_output.put_l ...

  9. BP神经网络的公式推导

    如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法 BP网络的结构 BP网络的结构如下图所示,分为输入层(Input), ...

  10. UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: i llegal multibyte sequence

    UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 263: illegal multibyte seq ...