Managing Images on smartos
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:
- # imgadm sources
- https://images.joyent.com
- # imgadm avail | head -n 1 ; imgadm avail | tail
- UUID NAME VERSION OS PUBLISHED
- 380539c4-3198-11e5-82c8-bf9eeee6a395 debian-7 20150724 linux 2015-07-24T00:09:14Z
- ab3db4c0-31ac-11e5-8856-43e56a8e4285 centos-6 20150724 linux 2015-07-24T02:35:38Z
- 7459f182-31af-11e5-b23a-eb0fd8799c77 freebsd-10 20150724 bsd 2015-07-24T02:55:34Z
- ead4ff68-320a-11e5-bd54-3749d04712df ubuntu-14.04 20150724 linux 2015-07-24T13:50:17Z
- 0764d78e-3472-11e5-8949-4f31abea4e05 minimal-32 15.2.0 smartos 2015-07-27T15:13:25Z
- 8ec06130-3472-11e5-bf91-ebc747dbae7e minimal-64 15.2.0 smartos 2015-07-27T15:17:13Z
- 1e5d6e28-3473-11e5-9e94-1fd77993b49f minimal-multiarch 15.2.0 smartos 2015-07-27T15:21:14Z
- 2bd52afe-3474-11e5-b07d-c7fb14b2c9e8 base-32 15.2.0 smartos 2015-07-27T15:28:46Z
- 5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
- 9caff6c6-3476-11e5-9951-bf98c6cb8636 base-multiarch 15.2.0 smartos 2015-07-27T15:46:14Z
- # imgadm avail | grep base-64 | tail
- c02a2044-c1bd-11e4-bd8c-dfc1db8b0182 base-64-lts 14.4.0 smartos 2015-03-03T15:55:44Z
- 24648664-e50c-11e4-be23-0349d0a5f3cf base-64-lts 14.4.1 smartos 2015-04-17T14:15:04Z
- 4166f6d6-ea5f-11e4-addd-8351b159d9b6 base-64 15.1.0 smartos 2015-04-24T08:52:36Z
- b67492c2-055c-11e5-85d8-8b039ac981ec base-64-lts 14.4.2 smartos 2015-05-28T17:12:26Z
- 0edf00aa-0562-11e5-b92f-879647d45790 base-64 15.1.1 smartos 2015-05-28T17:50:41Z
- 5c7d0d24-3475-11e5-8e67-27953a8b237e base-64 15.2.0 smartos 2015-07-27T15:37:17Z
- 要下载这些images之一,如“base-64”,我们将使用图像UUID导入它:
- # imgadm import 5c7d0d24-3475-11e5-8e67-27953a8b237e
- Importing 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0) from "https://images.joyent.com"
- Gather image 5c7d0d24-3475-11e5-8e67-27953a8b237e ancestry
- Must download and install 1 image (127.2 MiB)
- Imported image 5c7d0d24-3475-11e5-8e67-27953a8b237e (base-64@15.2.0)
- # imgadm list
- UUID NAME VERSION OS PUBLISHED
- 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的形式描述了数据,并概述了使用它的机器的规范。
以下是两个文件的示例:
- benr@magnolia:~/datasets$ ls -lh
- total 41M
- -rw-rw-r-- 1 benr benr 996 Sep 10 14:54 smartos-1.3.12.dsmanifest
- -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的数组 数据集文件或文件,最后列出一些要求的数组。
- {
- "uuid": "febaa412-6417-11e0-bc56-535d219f2590",
- "name": "smartos",
- "version": "1.3.12",
- "description": "Base template to build other templates on",
- "os": "smartos",
- "type": "zone-dataset",
- "platform_type": "smartos",
- "cloud_name": "sdc",
- "urn": "sdc:sdc:smartos:1.3.12",
- "creator_name": "sdc",
- "creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
- "vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
- "created_at": "2011-04-11T08:45Z",
- "updated_at": "2011-04-11T08:45Z",
- "published_at": "2011-04-11T08:45Z",
- "files": [
- {
- "path": "smartos-1.3.12.zfs.bz2",
- "sha1": "246c9ae158dc8f204643afdd6bd4d3c4aa35e733",
- "size": 42016482,
- "url": "https://datasets.joyent.com/datasets/febaa412-6417-11e0-bc56-535d219f2590/smartos-1.3.12.zfs.bz2"
- }
- ],
- "requirements": {
- "networks": [
- {
- "name": "net0",
- "description": "public"
- }
- ]
- }
- }
- 创建自己的清单时,需要以下属性:
- uuid:image的UUID(使用在线UUID生成器)
名称:image的名称(例如:“centos-6”)
版本:image的版本(例如:“1.0.0”)
描述:image的简短描述
published_at:在映像服务器上发布日期的时间戳(不需要准确);以正确格式输出当前时间,使用命令:date +“%Y-%m-%dT%T.000Z”
creator_uuid:image作者的UUID(如果您没有使用在线UUID生成器)
creator_name:image作者的名称
urn:用于以“cloud_name:creator_name:name:version”的形式描述image的特殊字符串;对于“cloud_name”,如果您不确定,我建议“smartos”,创建者的名字通常是您的组织。字符串不应包含空格。 (例如:“smartos:cuddletech:plan9:1.0.0”)
类型:image的类型,KVM的“zvol”或zone的“zone-dataset”
os:这个image的操作系统,需要。在撰写本文时,必须是smartos,linux,windows,bsd,illumos等。
文件:一个或多个文件对象的数组,每个文件对象包含以下属性:
路径:image数据文件的本地文件路径(压缩zfs转储)
sha1:image数据文件的SHA1;获取SHA1哈希使用:digest -a sha1 <file>
size:image数据文件的文件大小;获取使用:ls -l <file>- 要求部分是推荐但不是当前需要,也不是强制执行。
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>
过程如下所示:
- # imgadm install -m smartos-1.3.12.dsmanifest -f smartos-1.3.12.zfs.bz2
- febaa412-6417-11e0-bc56-535d219f2590 doesnt exist. continuing with install
- febaa412-6417-11e0-bc56-535d219f2590 successfully installed
- 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文件。 这是一个例子:
- $ curl -ks https://datasets.joyent.com/datasets/
- [
- {
- "name": "mongodb",
- "version": "1.3.2",
- "type": "zone-dataset",
- "description": "64-bit MongoDB 2.0 SmartMachine Database Appliance with Quickbackup and Replica Sets",
- "published_at": "2012-08-31T16:04:51.970Z",
- "os": "smartos",
- "uuid": "6bf31ce2-f384-11e1-a338-e39c2fe4ab59",
- "creator_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
- "vendor_uuid": "352971aa-31ba-496c-9ade-a379feaecd52",
- "creator_name": "sdc",
- "platform_type": "smartos",
- "cloud_name": "sdc",
- "urn": "sdc:sdc:mongodb:1.3.2",
- "created_at": "2012-08-31T16:04:51.970Z",
- "updated_at": "2012-08-31T16:04:51.970Z",
- "files": [
- {
- "path": "mongodb-1.3.2.zfs.bz2",
- "sha1": "dff4787bcc8cd115a2307d1e833a49d23a1ad9b0",
- "size": 115202324,
- "url": "https://datasets.joyent.com/datasets/6bf31ce2-f384-11e1-a338-e39c2fe4ab59/mongodb-1.3.2.zfs.bz2"
- }
- ],
- "requirements": {
- "networks": [
- {
- "name": "net0",
- ....
当客户端使用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,如果存在它将被使用,但不是必需的。- 因此,image服务器的操作非常简单和直接。
Creating a Poor Man's Image Server
如上所述,“image”服务器所需的功能非常基本。 因此,我们可以通过以下方式模拟数据集服务器的基本功能:
在您的Web服务器上,为您的SmartOS映像服务器创建一个目录。 我们将在http://mysite.com上假设“images /”。
将每个DS清单添加到index.html。 不要包含任何HTML! 我们只使用这个文件名,因为它是访问目录时发送的默认内容。 请记住,该文件包含一个清单对象数组,因此格式为:
- [
- { manifest1... },
- { manifest2... }
- ]
对于每个image,使用图像UUID创建一个目录,即:“images / 6bf31ce2-f384-11e1-a338-e39c2fe4ab59”。
将image文件复制到UUID目录中
现在试试吧! “curl -ks http://mysite.com/images”应该返回你的对象。
将其添加到sources.list和imgadm更新以使用。
这里描述的解决方案不是优雅的,也不是最优的,但是从网络帐户提供图像的可行选项,它们不具有使用下面描述的更优雅的smartos-image-server的选项。
Using the smartos-image-server
由nshalman启动的社区image服务器项目可以在github:smartos-image-server上找到
服务器在Node.js中实现,并实现了服务image所需的基本功能。 这是推荐的服务image的方法。
Managing Images on smartos的更多相关文章
- 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 ...
- Managing IIS Log File Storage
Managing IIS Log File Storage You can manage the amount of server disk space that Internet Informa ...
- Managing the Lifecycle of a Service
service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种 ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...
- Managing Group Policy with PowerShell
Overview In this article, I’ll talk about your options when it comes to managing Group Policy using ...
- ZFS+Dtrace+Zones+KVM=SMARTOS + dtrace 详细文档
https://smartos.org/ http://dtrace.org/guide/chp-io.html http://blog.csdn.net/babyfacer/article/deta ...
- Managing Hierarchical Data in MySQL
Managing Hierarchical Data in MySQL Introduction Most users at one time or another have dealt with h ...
- [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 ...
- Managing linux Shell Jobs
Managing Shell Jobs When moving jobs between the foreground and background, it may be useful to ha ...
随机推荐
- [UE4]头文件循环依赖C++
有2个类:aaa和bbb. aaa.h已经#include了bbb.h,则bbb.h就不能#include aaa.h,但bbb.cpp可以#include aaa.h bbb.h已经#include ...
- [UE4]C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
- javascript通过改变滚动条滚动来显示某些元素的scrollIntoView()方法
scrollIntoView(b)可以在任何HTML上调用,通过滚动滚动条,调用的元素就可以出现在可视区域. 参数如果是true,或者不传参数,则表示调用元素的顶部与浏览器顶部平齐. 如果传入fals ...
- Spring Security编程模型
1.采用spring进行权限控制 url权限控制 method权限控制 实现:aop或者拦截器(本质就是之前之后进行控制)--------------------proxy就是 2.权限模型: 本质理 ...
- linux 下各个4K区块文件大小测试速度对比 机械硬盘性能 64K性价比收益最高
机械硬盘,每个区块取三次数最小值为准,带2G RAM缓存卡 4K3.4 MB/秒 8K7.3 MB/秒 16K9.5 MB/秒 32K16.7 MB/秒 64K44.2 MB/秒 128K67.1 M ...
- 学习MongoDB 一:MongoDB 入门(安装与配置)
一.简介 MongoDB一种非关系型数据库(NoSql),是一种强大.灵活.可扩展的数据存储方式,因为MongoDB是文档模型,自由灵活很高,可以让你在开发过程中畅顺无比,对于大数据量.高并发.弱事务 ...
- PS制作gif动图教程
之前做过一些动图,时间久了就忘记了,每次心血来潮想做的时候又要重新找资料,网上的教程都不够完整,因此整理了一份完整的教程,针对PS新手(对,没错,就是博主自己哈哈). 准备工作:photoshop.图 ...
- Oracle 存储过程 延迟执行 DBMS_LOCK.SLEEP(60);
--测试代码: declare -- Local variables here i integer; begin -- Test statements here dbms_output.put_l ...
- BP神经网络的公式推导
如果感觉自己看不懂,那就看看我博客的梯度下降法,博文最后的感知机也算最简单的BP神经网络吧,用的也是反馈(w,b):典型梯度下降法 BP网络的结构 BP网络的结构如下图所示,分为输入层(Input), ...
- 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 ...