介绍
块存储允许您以类似于使用硬盘驱动器的方式为DigitalOcean云Droplet理额外的存储空间。 通过DigitalOcean简化的图形用户界面或图形用户界面,您可以添加块存储到我们的Droplet中。 但是,这并不是在更大和更复杂的环境中操作的实用方式,所以DigitalOcean提供了一个可以在规模上工作的API。 我们可以通过DigitalOcean的官方命令行工具doctl
直接与API进行交互。
在本教程中,我们将学习如何使用doctl
创建,列出,附加,分离和删除块的存储卷。
先决条件
在开始本教程之前,您应该熟悉doctl
和DigitalOcean的块存储。 以下文章将有所帮助:
在继续之前,你应该确保你已经安装并认证了最新版本的doctl
(在编写本文时是1.7.1)。 通过运行doctl version
检查您的doctl version
。 您还需要将一个SSH密钥添加到您的DigitalOcean帐户 。
最后但并非最不重要的是,要学习本教程,您需要在允许使用块存储的区域之一上创建一个Droplet(在撰写本文时,以下区域提供块存储: BLR1 , FRA1 , LON1 , NYC1 , NYC3 , SFO2 , SGP1和TOR1 )。
注意:虽然上面提到的区域支持块存储,但是此功能目前不适用于所述区域中的所有Droplet。 为确保您正在处理的Droplet支持块存储,您将不得不在创建时为其添加卷。
创建卷
为了用doctl
创建一个卷,你需要提供以下参数给命令:
- 卷名 :在我们的例子中它将是firstvolume
- 地区 :对于我们的教程,我们将在NYC3中创建音量
- 大小 (默认为4TB):在这个例子中,我们将它设置为100 GB
您也可以使用desc标志提供描述,但这完全是可选的。 完整的命令将如下所示:
doctl compute volume create firstvolume --region nyc3 --size 100GB
你应该看到类似这样的输出:
OutputID Name Size Region Droplet IDs
______your_volume_ID1_______ firstvolume 93 GiB nyc3
此时,您知道了doctl
命令以及创建新卷所需的信息。 接下来,您将学习如何打印现有卷的完整列表。
列表卷
doctl
使我们能够显示格式化列表中的现有卷。 有几个原因可能会列出您的卷。 最常见的两个是显示每个卷的ID在以后的命令中使用,并显示哪些Droplet有分配给他们的卷。
要列出所有当前的块存储卷,可以运行以下命令。
doctl compute volume list
这是在我们的例子中运行的list
命令的输出。
OutputID Name Size Region Droplet IDs
______your_volume_ID1______ firstvolume 100 GiB nyc3
______your_volume_ID1______ secondvolume 4096 GiB nyc3
______your_volume_ID1_______ thirdvolume 93 GiB nyc3 [ID]
在本节中,您已经学习了doctl
命令以查看您创建的卷的列表。 在下一节中,我们将介绍如何将音量添加到Droplet。
附加卷
有时您的Droplet可能需要额外的空间来处理应用程序数据和配置文件等资源。 添加卷是在不中断服务的情况下添加此空间的好方法。
要连接卷,您需要两条信息:
- 卷ID
- 滴的ID
在上一节中,我们已经看到了如何使用doctl compute volume list
命令获取卷标识 。
我们可以通过运行以下命令来显示我们的Droplet ID :
doctl compute droplet list
一旦我们同时拥有音量和Droplet ID,我们可以继续使用以下命令将音量附加到Droplet:
doctl compute volume-action attach your_volume_ID your_droplet_ID
这将产生一个类似于这样的输出:
OutputID Status Type Started At Completed At Resource ID Resource Type Region
346253669 in-progress attach_volume 2017-12-28 19:53:28 +0000 UTC <nil> 0 backend nyc3
在本教程前面,建议您在创建时将一个卷添加到Droplet中,以确保Droplet正在使用支持块存储的基础结构。 如果您当时创建了Droplet而没有附加卷,则尝试附加卷时可能会看到以下错误:
OutputError: POST https://api.digitalocean.com/v2/volumes/your_volume_ID/actions: 422 Droplet can't attach volumes due to a region restriction
如果遇到此错误,您将无法将音量附加到指定的Droplet,并需要重试。
一旦音量成功连接到接受音量的Droplet,您可以继续下一节,了解如何在不再需要额外空间的情况下分离音量。
分离卷
在某些情况下,您可能需要暂时将某个卷附加到Droplet上,例如在调试需要大量日志的问题时,或者创建某些时间限制数据的备份。 在这些情况下,一旦完成使用,我们需要能够分离卷。
分离卷与附加卷相似,并使用相同的信息。 命令和输出略有不同。
doctl compute volume-action detach your_volume_ID your_droplet_ID
OutputID Status Type Started At Completed At Resource ID Resource Type Region
346254931 in-progress detach_volume 2017-12-28 19:57:51 +0000 UTC <nil> 0 backend nyc3
此时,您知道如何使用doctl
分离卷。 在下一节中,您将学习如何删除不再需要的卷。
删除卷
当您不再需要某个存储块时,可以通过删除将其从帐户中删除。 要删除一个卷,你将需要它的ID。
doctl compute volume delete your_volume_id
运行这个命令会提示确认:
OutputWarning: Are you sure you want to delete volume (y/N) ?
如果您确定要删除音量,请按y
确认。
一旦卷被删除,您将返回到命令提示符。 您可以使用list
命令验证卷是否已被删除。
获取有关卷的信息
如果您需要关于特定卷的信息,可以通过调用以下命令来请求它
doctl compute volume get your_volume_id
您会发现此命令的输出很熟悉,因为它在创建卷时会自动运行。
OutputID Name Size Region Droplet IDs
______your_volume_ID1_______ firstvolume 93 GiB nyc3
在本节中,您已经学习如何删除不再需要的卷。
您现在拥有了成功使用doctl
来处理DigitalOcean块存储卷所需的全部信息。
结论
在本教程中,我们学习了如何使用doctl
添加,附加,分离,列出和删除Droplet中的卷。
现在您已经知道如何执行此操作,您可能需要研究创建脚本并将这些脚本添加到您喜欢的自动化工具(如Jenkins或Drone)中 。