介绍
CoreOS是一个Linux发行版,其重点是通过利用Docker容器和服务发现来快速启动集群环境。 如果你是新来CoreOS,看看这个入门CoreOS系列教程。
然而,Docker镜像在Docker主机上占用了相当多的磁盘空间。 基本映像的大小可以达到几百MB,自定义映像可以轻松达到1 GB。 如果您的应用程序有很多版本的新Docker镜像,它们可以轻松地存储在服务器存储上; 如果您不时地清除旧的或未使用的映像,服务器可能会耗尽磁盘空间。
CloudSlang是一个开源的业务流程解决方案,它可以很容易地使用工作流程的自动化,或简称流。 流包含任务和导航逻辑的列表。 任务可以调用操作,其中包含运行Python脚本或Java方法的操作或其他流程。 CloudSlang语言允许您以文本,可重用的方式定义流,并且您可以使用现有内容(Docker,OpenStack和实用程序)来管理已部署的应用程序或创建自己的自定义流。
在本教程中,我们将使用CloudSlang清理CoreOS集群中部署的每台计算机的Docker环境。 我们将使用已经存在的内容,因此您不需要编辑任何CloudSlang文件。
先决条件
在开始之前,您需要:
Ubuntu的14.04Droplet与一个sudo的非root用户 ,这将是您的CloudSlang服务器。
安装了Java(7或更高版本)的CloudSlang服务器上。 注意,你不需要安装JDK,只需要安装JRE。
一组三台CoreOS机器。 如果你不已经有一个,你可以通过以下设置一个本教程 。
第1步 - 安装解压缩
在这一步中,我们将安装unzip
的CloudSlang服务器上。
首先,确保软件包列表是最新的。
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
用来启动命令行。 该cslang/lib
包含应用程序所需的依赖关系。content
,其中包含现成CloudSlang内容。 我们将要运行的流动位于content/io/cloudslang/coreos
,它被称为cluster_docker_images_maintenance.sl
。 此流程迭代集群中的所有计算机,并删除未使用的Docker镜像。
第3步 - 添加私钥
CloudSlang需要对您的CoreOS集群进行SSH密钥访问。 在此步骤中,我们将通过在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
以启动命令行。
./cslang
稍后,您将看到CloudSlang欢迎屏幕。
0.7.26-SNAPSHOT
Welcome to CloudSlang. For assistance type help.
请在命令行下面的命令,替换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
如果你想在执行的更多信息,请查看execution.log
这是由CLI中创建的文件bin
文件夹中。
结论
现在所有未使用的Docker镜像都会在您的CoreOS集群中删除!
在本教程中,您已经了解了如何在Ubuntu计算机上运行CloudSlang以及如何使用CloudSlang CLI触发流。 您还使用现成的工作流来清理Docker环境。
版权所有2015年6月9日,Hewlett-Packard Development Company,LP转载于许可。