如何在CoreOS集群上使用CloudSlang清理Docker环境

来自菜鸟教程
跳转至:导航、​搜索

介绍

CoreOS 是一个 Linux 发行版,专注于通过利用 Docker 容器和服务发现来快速启动集群环境。 如果您是 CoreOS 的新手,请查看此 CoreOS 入门 教程系列。

但是,Docker 镜像会占用 Docker 主机上相当多的磁盘空间。 基本映像的大小可以达到数百 MB,而自定义映像可以轻松达到 1 GB。 如果您的应用程序有许多新的 Docker 镜像版本,它们可以轻松地在服务器存储上进行存储; 如果您不时不时清除旧的或未使用的图像,服务器可能会耗尽磁盘空间。

CloudSlang 是一个开源编排解决方案,可以轻松使用工作流或简称流来自动化流程。 流包含任务列表和导航逻辑。 任务可以调用操作,其中包含运行 Python 脚本或 Java 方法或其他流的操作。 CloudSlang 语言允许您以文本、可重用的方式定义流,您可以使用现有内容(Docker、OpenStack 和实用程序)来管理已部署的应用程序或创建自己的自定义流。

在本教程中,我们将使用 CloudSlang 为部署在 CoreOS 集群中的每台机器清理 Docker 环境。 我们将使用已经存在的内容,因此您无需编辑任何 CloudSlang 文件。

先决条件

在开始之前,您需要:

第 1 步 — 安装解压缩

在这一步中,我们将在 CloudSlang 服务器上安装 unzip

首先,确保包裹清单是最新的。

sudo apt-get update

然后,安装解压缩。

sudo apt-get install unzip

第 2 步 — 下载 CloudSlang

在本节中,我们将下载 CloudSlang CLI 工具和可用内容(预定义的操作和流程)。 CloudSlang CLI 是一个命令行界面工具,可用于运行流。

首先,下载 CloudSlang CLI 存档。

wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.7.29/cslang-cli-with-content.zip

解压缩存档。

unzip cslang-cli-with-content.zip

这将创建一个 cslang 目录。 如果您列出该目录的内容,

ls ~/cslang

您会注意到其中的三个目录:

  • python-lib,用于外部 Python 库。
  • cslang,其中包含 CloudSlang CLI 文件。 cslang/bin 文件夹包含一个名为 cslang 的文件,用于启动 CLI。 cslang/lib 包含应用程序所需的依赖项。
  • content,包含现成的CloudSlang内容。 我们要运行的流程位于 content/io/cloudslang/coreos,它被称为 cluster_docker_images_maintenance.sl。 此流程遍历集群中的所有机器并删除未使用的 Docker 映像。

第 3 步 — 添加私钥

CloudSlang 需要 SSH 密钥访问您的 CoreOS 集群。 在这一步中,我们将通过在 CloudSlang 服务器上创建一个新的密钥对并将公钥添加到 CoreOS 集群来添加它。

首先,按照本教程的步骤1和2创建一个没有密码的密钥对。 获得密钥对后,您需要将公钥添加到 CoreOS 集群中的每台机器。

首先,在您的 CloudSlang 服务器上获取公钥。

cat ~/.ssh/id_rsa.pub

您将看到一个以 ssh-rsa 开头并以 username@hostname 结尾的长输出。 复制它以在下一个命令中使用。

SSH 到您的 CoreOS 服务器之一(默认用户名是 core),然后运行以下命令来添加您的公钥。

echo "your_public_key" >> ~/.ssh/authorized_keys

您需要为 CoreOS 集群中的每台服务器执行此操作。

第 4 步 — 运行流程

在本节中,我们将运行流程并验证其行为。

为了运行流程,在 CloudSlang 服务器上,首先切换到 /cslang/bin 目录。

cd ~/cslang/cslang/bin/

运行名为 cslang 的可执行文件以启动 CLI。

./cslang

片刻之后,您将看到 CloudSlang 欢迎屏幕。

0.7.26-SNAPSHOT
Welcome to CloudSlang. For assistance type help.

在 CLI 中输入以下命令,将 your_coreos_server_ip 替换为集群中一台 CoreOS 服务器的 IP 地址。

custom_prefix(cslang>)
run --f  ../../content/io/cloudslang/coreos/cluster_docker_images_maintenance.sl --i coreos_host=your_coreos_server_ip,coreos_username=core,private_key_file=~/.ssh/id_rsa --cp ../../content/

run 命令触发流程。 --f 指定流的路径。 --i 指定流输入:CoreOS 主机和用户名,以及关联的私有 SSH 密钥。 --cp 指定流依赖于其他操作和流时的类路径。 因为这个流程有很多不同的依赖,我们可以指定父content文件夹; 扫描是递归的,因此子目录也会被扫描。

流程逻辑首先从集群中检索机器的 IP 地址,然后遍历机器并清除未使用的图像。 首先,它获取所有图像,通过检查运行/停止的容器只留下未使用的图像。 接下来,它会删除未使用的图像。 最后,它对悬空图像也是如此。

在流程运行时,CLI 会显示已执行的任务名称。 流程完成后,CLI 会输出一些有用的信息,例如流程输出和流程结果。

在我们的例子中,流结果要么是 SUCCESS(这意味着集群中未使用的 Docker 镜像已被清除)要么是 FAILURE(这意味着发生了问题)。 此流程有一个输出:number_of_deleted_images_per_host,即集群中每台主机上删除的图像数量。

如果一切顺利,您应该会看到类似以下的输出:

...

Flow : cluster_docker_images_maintenance finished with result : SUCCESS
Execution id: 101600001, duration: 0:02:06.180

如果您想了解有关执行的更多信息,请查看由 CLI 在 bin 文件夹中创建的 execution.log 文件。

结论

现在所有未使用的 Docker 镜像都将在您的 CoreOS 集群中删除!

在本教程中,您了解了如何在 Ubuntu 机器上运行 CloudSlang 以及如何使用 CloudSlang CLI 来触发流。 您还使用了现成的工作流程来清理 Docker 环境。

版权所有 2015 年 6 月 9 日,惠普开发公司,LP 经许可转载。