介绍
CoreOS是一个Linux发行版,专注于利用Docker容器和服务查询快速启动集群环境。但是,Docker镜像可能占用Docker主机上相当多的磁盘空间。普通映像的大小可以达到数百MB,自定义映像也可以随便就达到1 GB。如果您的应用程序有许多新的Docker镜像版本,它们可以轻松地存储在服务器存储上;如果您不时清除旧的或未使用的镜像,则服务器可能会耗尽磁盘空间。
CloudSlang是一个开源的业务流程解决方案,可以使用工作流或简称流程轻松实现流程自动化。流包含任务列表和导航逻辑。任务可以调用操作,该操作包含运行Python脚本或Java方法或其他流的操作。CloudSlang语言允许您以文本,可重用的方式定义流,您可以使用现有内容(Docker,OpenStack和实用程序)来管理已部署的应用程序或创建自己的自定义流。
在本教程中,我们将使用CloudSlang清理部署在CoreOS集群中的每台计算机的Docker环境。我们将使用现有内容,因此您无需编辑任何CloudSlang文件。
在开始之前,您将需要:
sudo
命令的非root用户的Ubuntu 14.04 Droplet ,它将是你的CloudSlang服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。在此步骤中,我们将在CloudSlang服务器上安装unzip
。
首先,确保包列表是最新的。
sudo apt-get update
然后,安装解压缩。
sudo apt-get install unzip
在本节中,我们将下载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镜像。CloudSlang需要SSH密钥访问您的CoreOS集群。在此步骤中,我们将通过在CloudSlang服务器上创建新密钥对并将公钥添加到CoreOS集群来添加此功能。
首先,按照本教程的第一步和第二步,创建一个没有密码的密钥对。拥有密钥对后,您需要将公钥添加到CoreOS集群中的每台计算机上。
首先,获取CloudSlang服务器上的公钥。
cat ~/.ssh/id_rsa.pub
你会看到一个ssh-rsa
开头和username@hostname
结尾的长输出。将其复制以在下一个命令中使用。
SSH到您的一个CoreOS服务器(默认用户名是core
),然后运行以下命令添加您的公钥。
echo "your_public_key" >> ~/.ssh/authorized_keys
您需要为CoreOS集群中的每个服务器执行此操作。
在本节中,我们将运行流程并验证其运作。
为了在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
如果您想了解有关执行的更多信息,请查看bin
文件夹中CLI创建的文件execution.log
。
现在,所有未使用的Docker镜像都会在CoreOS集群中删除!
在本教程中,您已经了解了如何在Ubuntu计算机上运行CloudSlang以及如何使用CloudSlang CLI来触发流。您还使用现成的工作流来清理Docker环境。
想要了解更多关于Linux教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Clean Up Your Docker Environment Using CloudSlang on a CoreOS Cluster》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有