如何在CoreOS集群上使用CloudSlang清理Docker环境
介绍
CoreOS 是一个 Linux 发行版,专注于通过利用 Docker 容器和服务发现来快速启动集群环境。 如果您是 CoreOS 的新手,请查看此 CoreOS 入门 教程系列。
但是,Docker 镜像会占用 Docker 主机上相当多的磁盘空间。 基本映像的大小可以达到数百 MB,而自定义映像可以轻松达到 1 GB。 如果您的应用程序有许多新的 Docker 镜像版本,它们可以轻松地在服务器存储上进行存储; 如果您不时不时清除旧的或未使用的图像,服务器可能会耗尽磁盘空间。
CloudSlang 是一个开源编排解决方案,可以轻松使用工作流或简称流来自动化流程。 流包含任务列表和导航逻辑。 任务可以调用操作,其中包含运行 Python 脚本或 Java 方法或其他流的操作。 CloudSlang 语言允许您以文本、可重用的方式定义流,您可以使用现有内容(Docker、OpenStack 和实用程序)来管理已部署的应用程序或创建自己的自定义流。
在本教程中,我们将使用 CloudSlang 为部署在 CoreOS 集群中的每台机器清理 Docker 环境。 我们将使用已经存在的内容,因此您无需编辑任何 CloudSlang 文件。
先决条件
在开始之前,您需要:
- 一个带有 的 Ubuntu 14.04 Droplet 一个 sudo 非 root 用户 ,这将是您的 CloudSlang 服务器。
- Java(版本 7 或更高版本)安装在 CloudSlang 服务器上。 请注意,您不需要安装 JDK,只需安装 JRE。
- 由三台 CoreOS 机器组成的集群。 如果您还没有,可以按照本教程进行设置。
第 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 经许可转载。