万里无云的基础设施项目。

cloudless的Python项目详细描述


无云

通过执行 做一个人类不需要关心的工作,保持透明 关于它在做什么。

安装

这个项目依赖于python 3.6.0或更高。到 安装,运行:

pip3 install cloudless

快速启动

这些示例演示如何快速创建可在 端口80在谷歌计算引擎和亚马逊网络服务。运行任何命令 使用--help了解更多用法。

谷歌计算引擎凭据

要设置google计算引擎客户端,必须首先创建google 计算引擎帐户并导航到 https://console.cloud.google.com/iam-admin/serviceaccounts。 在那里,您可以选择您的项目并创建一个服务帐户。记住 服务帐户电子邮件并为此服务帐户创建密钥。下载和 将此密钥保存在本地计算机上,记住路径。

您还需要项目id(而不是项目名称)。去 https://console.cloud.google.com/iam-admin/settings/project 并选择项目以查找项目ID。 一切,运行:

cldls init --provider gce
cldls network list

这将设置"默认"配置文件以使用"GCE"后端。你可以改变 通过将--profile传递到cloudless或设置 cloudless_profile环境变量。有关详细信息,请参见配置文件

亚马逊网络服务凭证

要设置amazon web服务客户端,请按照 https://docs.aws.amazon.com/cli/latest/userguide/cli chap getting started.html 配置aws cli。目前,cloudless只使用"默认"aws 以这种方式配置的配置文件。设置默认配置文件后 与aws cli一起工作,cloudless中的所有内容都应该可以工作。当你认为你 开始工作,运行:

cldls init --provider aws
cldls network list

这将设置"默认"配置文件以使用"aws"后端。你可以改变 通过将--profile传递到cloudless或设置 cloudless_profile环境变量。有关详细信息,请参见配置文件

简单服务

接下来的步骤是相同的,无论您使用的是哪个云提供商。 他们假设您有一个名为"cloudless-example-base-image-v0"的图像 ubuntu 16.04安装在你的提供商上。请参阅图像 关于如何使用 万里无云。

一旦具备了先决条件,您就可以使用:

cldls network create mynet examples/network/blueprint.yml
cldls service create mynet myservice examples/apache/blueprint.yml
cldls paths allow_network_block mynet myservice 0.0.0.0/0 80
cldls service get mynet myservice
# Navigate to the "public_ip" of each instance in a browser to see the service.

命令行自动完成

由于此项目使用单击, 自动完成是内置的。只是跟随 https://click.palletsprojects.com/en/5.x/bashcomplete/ 如果你使用bash或 https://github.com/click-contrib/click-completion 对于其他外壳。

例如,对于bash,将其放入.bashrc:

eval"$(_CLDLS_COMPLETE=source cldls)"

配置文件

api和命令行都支持使用使用cldls init创建的配置文件。这个 加载配置文件的优先级顺序为:

  1. 通过python api中的profile参数显式设置为cloudless.client,或者通过 --profile选项到cldls命令行。
  2. cloudless_配置文件中设置。环境变量。
  3. "默认"

python api中的客户端设置

在python api中,必须创建一个客户端对象来连接到云 你将要工作的平台。客户端使用 云提供程序,因此必须将提供程序的名称和 身份验证凭据。

如果您是第一次尝试此项目,建议您使用 "模拟AWS"客户。

谷歌计算引擎客户端

要使用google计算引擎客户端,必须创建一个服务帐户并 在本地下载凭据。因为此提供程序是使用 apache libcloud,您可以参考google 计算引擎驱动程序 安装< / a> 有关详细信息,请参阅该项目中的文档。

当你有证书的时候,你可以这样做,最好是在 不提交到版本控制的点文件。注意凭据文件在 json格式:

exportCLOUDLESS_GCE_USER_ID="sverch-cloudless@cloudless-000000.iam.gserviceaccount.com"exportCLOUDLESS_GCE_CREDENTIALS_PATH="/home/sverch/.gce/credentials.json"exportCLOUDLESS_GCE_PROJECT_NAME="cloudless-000000"

然后,您可以在python shell中运行这些命令来创建gce客户机:

importcloudlessimportosclient=cloudless.Client("gce",credentials={"user_id":os.environ['CLOUDLESS_GCE_USER_ID'],"key":os.environ['CLOUDLESS_GCE_CREDENTIALS_PATH'],"project":os.environ['CLOUDLESS_GCE_PROJECT_NAME']})

如果要避免将所有这些配置显式传递给客户机对象,可以 使用无云配置文件

亚马逊网络服务客户端

当前没有凭据可以作为aws提供程序的参数传入 (它们被忽略)。但是,此提供程序是用 boto,在许多其他地方都可以看到 对于凭据,因此可以用其他方式配置它们。请参阅boto3 凭据设置 文档 有关详细信息。

设置凭据后,可以运行以下命令创建使用 "默认"aws配置文件(如果传递空的credentials对象,则此无云配置文件将使用 无论aws\u profile环境变量设置为什么,这可能会令人困惑:

importcloudlessclient=cloudless.Client("aws",credentials={"profile":"default"})

如果要避免将所有这些配置显式传递给客户机对象,可以 使用无云配置文件

模拟Amazon Web服务客户端

模拟aws客户端用于演示和测试。因为一切都在运行 在本地,您不需要任何凭据。只需运行:

importcloudlessclient=cloudless.Client("mock-aws",credentials={})

架构

在cloudless中只有三个对象:网络、服务和路径。这个 是一个显示网络dev、公共负载均衡服务、 内部服务服务,从Internet到公共负载均衡器的路径 在端口443上,以及从公共负载均衡器到内部服务的路径 端口80。有关如何生成可视化,请参见可视化部分 此图。

cloudless simple service example

网络

网络是其他一切的顶级容器。创建新的 网络,运行:

pip3 install cloudless
0

这将返回描述 创建。您可以通过以下方式检索现有网络或列出所有现有网络 运行:

pip3 install cloudless
1

最后,要破坏网络:

pip3 install cloudless
2 <创建>应该使用正常的默认值,但如果需要执行特殊操作,请参见 docs/network configuration.md

ipython中,您可以运行<;object>;?获取有关任何 对象 例如client.network.create? >

服务

一个服务一组逻辑实例和任何需要的资源 支持它们(子网、防火墙等)。

要创建服务,必须首先定义名为 指定服务配置方式的"蓝图"。这是一个 服务蓝图的外观示例:

pip3 install cloudless
3

"network"部分告诉cloudless为这个服务创建子网络 足够768个实例使用。

"placement"部分告诉cloudless确保此服务中的实例 在三个可用区域(大多数云提供商 保证是有意义地相互隔离的,以便恢复)。

"实例"部分描述了每个实例的资源需求。 Cloudless将自动选择满足这些要求的实例类型。

"image"部分表示希望实例使用的映像的名称 有。在本例中,我们使用的是默认情况下只能在aws中找到的图像名,因此 这个例子只适用于那里。请参见examples/apache 跨云工作,因为它使用自定义图像。

"初始化"部分描述要在以下情况下运行的启动脚本 实例启动。您还可以传入变量,这些变量将传递给 给定文件为jinja2模板参数。这是 指定特定于环境的配置的好地方,因此您的基本映像 在不同的环境中可以保持不变。

一旦你有了蓝图,下面的例子展示了如何使用它。 这些示例创建一组私有实例,然后创建一些haproxy 在这些实例前面的实例以平衡负载。注意许多命令 以dev_network作为第一个参数。那是同一个网络对象 由上面显示的网络命令返回。假设您已经创建了 在您正在使用的提供商上的示例/base image中的基本图像。

pip3 install cloudless
4

路径

路径是如何告诉cloudless两个服务应该能够通信。 这不需要蓝图,但是您需要拥有 之前创建的。此示例将从负载平衡器到 端口80上的内部服务,使负载平衡器可以在 端口443:

pip3 install cloudless
5

你可以检查事物是否可以访问其他事物或打印出所有路径 具有以下功能:

pip3 install cloudless
6

可视化

通过运行:

pip3 install cloudless
7

要生成可视化,请运行:

pip3 install cloudless
8

然后在浏览器中打开ui/graph.html。注意这对于模拟aws不起作用 提供程序,因为它将在不同的进程中运行。

图像生成器

此项目提供了一个跨云映像生成器,它依赖于 万里无云的API。这意味着在很大程度上它完全是云 独立的,在你开始的图像中的mod差异 如果您从头开始构建自己的自定义图像,则完全独立。

在本例中,我们使用云提供商提供的ubuntu映像,因此 有不同的aws和gce蓝图(因为标准的ubuntu图像 它们提供了不同的名称)。

首先,要部署运行单个实例的服务:

pip3 install cloudless
9

接下来,运行配置脚本。这是一个SHEllscript万里无云的意志 将登录凭据作为参数传递给,并在其中运行 配置为代码脚本:

cldls init --provider gce
cldls network list
0

接下来,运行检查脚本。这是另一个无云将 将登录凭据作为参数传递给,并在其中运行 验证以确保配置步骤按预期工作:

cldls init --provider gce
cldls network list
1

最后,当你的脚本按你所希望的方式工作时,运行一个清理程序 为全面建设做准备。在没有完整构建的情况下保存图像 支持阻止在机器上进行的修改,而不是 以脚本形式录制到图像中的任何位置:

cldls init --provider gce
cldls network list
2

现在,运行完整的构建端到端,你有你的新形象!

cldls init --provider gce
cldls network list
3

我们可以使用以下命令列出图像:

cldls init --provider gce
cldls network list
4

按名称获取:

cldls init --provider gce
cldls network list
5

最后,删除图像。您可能需要等待此步骤,因为 维修检测仪下面的步骤使用此图像:

cldls init --provider gce
cldls network list
6

有关如何创建 使用此框架跨云基础图像。

维修检测仪

这个项目还提供了一个框架来帮助测试蓝图文件作为 预期.框架将在 测试。它还可以启动所有依赖服务,以便您可以在 语境"。它是单元测试和集成测试的混合体。

这些示例假设您配置的配置文件具有 使用上面的步骤构建。如果你跟踪了 这些步骤,无论 您正在使用AWS或GCE。

首先,要创建服务:

cldls init --provider gce
cldls network list
7

这将创建一个临时网络来沙箱测试。现在,为了验证 服务按预期运行:

cldls init --provider gce
cldls network list
8

最后,要清理一切:

cldls init --provider gce
cldls network list
9

如果您想同时运行前面的所有步骤,可以运行:

cldls init --provider aws
cldls network list
0

有关如何将蓝图设置为 可使用此框架进行测试。

测试

要运行本地测试,请运行:

cldls init --provider aws
cldls network list
1

要对GCE和AWS运行测试,请运行:

cldls init --provider aws
cldls network list
2

它们将使用gce cloudless testaws cloudless testcloudless 分别介绍。有关详细信息,请参见配置文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaMaven没有识别junit测试   正则表达式替换Java中字符串中的所有“(“and”)”   文件移动到另一台计算机时出现java错误“实例化servlet类”   服务器上的java服务   Spring数据JPA上的java嵌套@Transactional注释行为   eclipse中的Java Tomcat项目   java在Tomcat上部署web应用程序   如何解决“java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView”错误?   java在条形码上方添加文本,并使用烧烤更改字体大小   java与php基准测试   java使用正则表达式提取特定模式   java扫描器。findInLine()大量泄漏内存   java HTTP:差异请求属性和POST参数   返回空指针的Java方法?   java验证密码不包含名称中的3个以上连续字符   Java中带泛型的静态多态性   java在Android中获得最后一个已知位置   java为什么Groovy的Map比Array更具可伸缩性?   编码如何在Java中生成八进制字符串?   java Hibernate:使用单例会话写入日志(无刷新)