PaaS 中的存储:Minio 和 Deis

无论您是否注意到,作为最终用户,存储是当今我们使用的几乎所有软件的重要组成部分。但是,作为开发人员,重要的是能够以一种简单、安全且快速的方式检索数据。正如我之前提到的,对象存储是一种实现此目标的好方法。我们还看到了如何创建一个可靠的数据存储,以WordPress为例。在这篇文章中,我们将了解Deis(一个基于Kubernetes的开源PaaS)如何将其几乎所有存储需求都委托给Minio。但首先,让我们进行一些介绍。
Deis
简单来说,Deis是一个平台,允许开发人员轻松部署和管理他们的应用程序。所谓“轻松”,是指开发人员可以通过简单的git push来部署他们的代码——Deis会处理所有构建、打包和部署过程。我们稍后会了解它是如何做到的。借助Deis,开发人员还可以管理应用程序配置、创建或回滚版本、获取详细的日志等等。Deis可以通过命令行或REST API访问。在Deis网站上了解更多信息。
目前,有两种Deis版本可用。第一种是基于Kubernetes的Deis Workflow(Deis v2.0)。Deis Workflow处于测试阶段,因此预计在未来一段时间内某些方面会发生变化。第二种是基于CoreOS的Deis v1.13.0。这是一个长期支持版本,并且没有计划为此版本添加更多功能。Deis Workflow被认为是Deis的继任者,因此,我们将讨论重点放在Deis Workflow上。
Minio
Minio是一个用Golang编写的极简对象存储服务器。Minio服务器、客户端和SDK与Amazon S3云存储服务在API上兼容。如果您想知道这些元素都是做什么的——Minio服务器允许您以安全、可靠且易于检索的方式存储非结构化数据文件。Minio客户端是常见文件处理命令(如ls、cp、mkdir、diff等)的S3兼容实现。Minio SDK允许您将Minio API嵌入到您自己的应用程序中。
对于任何关于Minio的问题,请访问我们的Gitter频道。我们在那儿非常活跃,很乐意为您提供帮助!
Minio在Deis中的应用
为了更好地理解,可以将Deis视为一组自包含的组件,它们使用Kubernetes系统和对象存储服务器进行通信。Deis中有三种可用的部署方法
- 构建包部署:Deis支持基于Heroku构建包部署应用程序。使用此方法,您可以部署已经在Heroku上运行的应用程序,或遵循Heroku最佳实践的应用程序。
- Dockerfile部署:Deis支持通过Dockerfiles部署应用程序。因此,您可以简单地推送代码,Dockerfile会创建要部署的Docker镜像。
- Docker镜像部署:您还可以通过现有的Docker镜像部署应用程序。为此,您需要在本地创建镜像并将其推送到公共Docker镜像注册表(例如DockerHub)。然后使用Deis pull直接从注册表部署应用程序。
所有三种部署方法,以及Deis Workflow的内部组件(如postgres、registry和builder组件)都广泛使用了Minio作为后台支撑。
- 构建包部署使用Minio存储代码和程序包。
- Dockerfile部署使用Minio存储Dockerfiles和相关工件。
- Docker镜像部署使用Minio作为Workflow运行的内部Docker注册表的存储后端。
- 内部Workflow数据库存储用户登录信息、SSH密钥等等。它将所有数据备份到Minio。
Minio和Deis的实际应用
要查看使用Deis Workflow时Minio的实际应用,您需要安装Deis Workflow。当Deis Workflow的所有Pod都运行时,您可以在其中看到Minio Pod。此Pod负责备份关键的用户和应用程序数据。您可以按照以下步骤安装Deis Workflow
- 安装Helm Classic和Deis Workflow CLI工具:Deis CLI允许您与Deis Workflow交互。理想情况下,您应该将客户端安装到您的$PATH中,以避免任何-bash: command not found错误。因此,将您的目录更改为/usr/local/bin,然后通过运行以下命令安装Deis客户端
$ curl -sSL http://deis.io/deis-cli/install-v2.sh | bash
通过以下命令检查它是否正常工作
$ deis version
接下来,您需要安装Helm Classic。Helm是Kubernetes的包管理器。我们将使用它来管理我们Kubernetes集群中的软件。通过以下命令安装它
$ curl -sSL https://get.helm.sh | bash
再次检查安装是否成功。
$ helmc version
启动Kubernetes集群:下一步是启动Kubernetes集群。我使用AWS EC2作为后端云。您可以选择使用Google Container Engine,甚至可以使用您自己的笔记本电脑。由于我们将使用命令行界面与AWS交互,因此您需要安装AWS和Kubernetes CLI工具。
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
$ curl -O https://storage.googleapis.com/kubernetes-release/release/v1.2.3/bin/darwin/amd64/kubectl
$ chmod +x kubectl
完成后,键入
$ aws configure
并添加密钥ID、密钥访问密钥、默认区域名称和输出格式。您现在可以通过CLI与您的AWS帐户进行交互。现在在一个合适的位置创建一个文件夹,该文件夹将作为Kubernetes安装的根目录。然后下载并解压缩Kubernetes
$ curl -sSL https://storage.googleapis.com/kubernetes-release/release/v1.2.4/kubernetes.tar.gz -O
$ tar -xvzf kubernetes.tar.gz$
cd kubernetes
现在配置Kubernetes环境
$ export KUBE_ENABLE_INSECURE_REGISTRY=true
$ export KUBE_AWS_ZONE=us-west-1c
$ export KUBERNETES_PROVIDER=aws
$ export MASTER_SIZE=t2.medium
$ export NODE_SIZE=t2.large
$ export NUM_NODES=2
$ export MINION_ROOT_DISK_SIZE=100
现在您已经准备就绪,使用以下命令启动集群
$ ./cluster/kube-up.sh
安装Deis Workflow:要安装Deis Workflow,我们需要使用Helm包管理器。首先检查它是否可以连接到您的Kubernetes集群。
$ helmc target
您应该会看到类似这样的详细列表

这确认Helm可以与您的Kubernetes集群(我们在上一步中启动的)进行通信。下一步是将Deis图表存储库添加到Helm。
$ helmc repo add deis https://github.com/deis/charts
然后安装Deis Workflow
$ helmc fetch deis/workflow-rc1
$ helmc generate -x manifests workflow-rc1
$ helmc install workflow-rc1
这将完成安装过程。但是您需要等待一段时间才能使Pod准备好。您可以使用以下命令检查进度
$ kubectl --namespace=deis get pods
一旦所有Pod都显示为就绪状态,您就可以确信Deis Workflow已启动并正在运行。状态如下所示。

您可以看到deis-minio Pod正在运行,这确认Minio是Deis使用的默认对象存储。正如我在开头所说,Deis Workflow可以被认为是多个Pod的集合——每个Pod执行预定义的操作。在这里您可以看到各种Pod在运行。
当您使用时,请帮助我们了解您的用例以及我们如何更好地为您提供帮助!填写我们的Minio最佳部署表单(不到一分钟),并有机会在Minio网站上展示您的Minio私有云设计,并向Minio社区展示。