如何使用Doctl处理DigitalOcean块存储

Block Storage允许您为DigitalOcean Droplet管理类似于硬盘驱动器的额外存储空间。 在本教程中,我们将学习如何使用doctl创建,列出,附加,分离和删除块的存储卷。

介绍

块存储允许您以类似于使用硬盘驱动器的方式为DigitalOcean云Droplet理额外的存储空间。 通过DigitalOcean简化的图形用户界面或图形用户界面,您可以添加块存储到我们的Droplet中。 但是,这并不是在更大和更复杂的环境中操作的实用方式,所以DigitalOcean提供了一个可以在规模上工作的API。 我们可以通过DigitalOcean的官方命令行工具doctl直接与API进行交互。

在本教程中,我们将学习如何使用doctl创建,列出,附加,分离和删除块的存储卷。

先决条件

在开始本教程之前,您应该熟悉doctl和DigitalOcean的块存储。 以下文章将有所帮助:

在继续之前,你应该确保你已经安装并认证了最新版本的doctl (在编写本文时是1.7.1)。 通过运行doctl version检查您的doctl version 您还需要将一个SSH密钥添加到您的DigitalOcean帐户

最后但并非最不重要的是,要学习本教程,您需要在允许使用块存储的区域之一上创建一个Droplet(在撰写本文时,以下区域提供块存储: BLR1FRA1LON1NYC1NYC3SFO2SGP1TOR1 )。

注意:虽然上面提到的区域支持块存储,但是此功能目前不适用于所述区域中的所有Droplet。 为确保您正在处理的Droplet支持块存储,您将不得不在创建时为其添加卷。

创建卷

为了用doctl创建一个卷,你需要提供以下参数给命令:

  • 卷名 :在我们的例子中它将是firstvolume
  • 地区 :对于我们的教程,我们将在NYC3中创建音量
  • 大小 (默认为4TB):在这个例子中,我们将它设置为100 GB

您也可以使用desc标志提供描述,但这完全是可选的。 完整的命令将如下所示:

doctl compute volume create firstvolume --region nyc3 --size 100GB

你应该看到类似这样的输出:

ID                                      Name           Size      Region    Droplet IDs
______your_volume_ID1_______            firstvolume    93 GiB    nyc3    

此时,您知道了doctl命令以及创建新卷所需的信息。 接下来,您将学习如何打印现有卷的完整列表。

列表卷

doctl使我们能够显示格式化列表中的现有卷。 有几个原因可能会列出您的卷。 最常见的两个是显示每个卷的ID在以后的命令中使用,并显示哪些Droplet有分配给他们的卷。

要列出所有当前的块存储卷,可以运行以下命令。

doctl compute volume list

这是在我们的例子中运行的list命令的输出。

ID                                      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

这将产生一个类似于这样的输出:

ID           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而没有附加卷,则尝试附加卷时可能会看到以下错误:

Error: 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
ID           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

运行这个命令会提示确认:

Warning: Are you sure you want to delete volume (y/N) ?

如果您确定要删除音量,请按y确认。

一旦卷被删除,您将返回到命令提示符。 您可以使用list命令验证卷是否已被删除。

获取有关卷的信息

如果您需要关于特定卷的信息,可以通过调用以下命令来请求它

doctl compute volume get your_volume_id

您会发现此命令的输出很熟悉,因为它在创建卷时会自动运行。

ID                                      Name           Size      Region    Droplet IDs
______your_volume_ID1_______      firstvolume    93 GiB    nyc3

在本节中,您已经学习如何删除不再需要的卷。

您现在拥有了成功使用doctl来处理DigitalOcean块存储卷所需的全部信息。

结论

在本教程中,我们学习了如何使用doctl添加,附加,分离,列出和删除Droplet中的卷。

现在您已经知道如何执行此操作,您可能需要研究创建脚本并将这些脚本添加到您喜欢的自动化工具(如JenkinsDrone)中