万里无云的基础设施项目。
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
创建的配置文件。这个
加载配置文件的优先级顺序为:
- 通过python api中的
profile
参数显式设置为cloudless.client
,或者通过--profile
选项到cldls
命令行。 - 在
cloudless_配置文件中设置。
环境变量。 "默认"
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。有关如何生成可视化,请参见可视化部分
此图。
网络
网络是其他一切的顶级容器。创建新的 网络,运行:
pip3 install cloudless0
这将返回描述 创建。您可以通过以下方式检索现有网络或列出所有现有网络 运行:
pip3 install cloudless1
最后,要破坏网络:
pip3 install cloudless2 <创建>应该使用正常的默认值,但如果需要执行特殊操作,请参见 docs/network configuration.md
在ipython中,您可以运行<;object>;?
到获取有关任何
对象
例如client.network.create?> >
服务
一个服务一组逻辑实例和任何需要的资源 支持它们(子网、防火墙等)。
要创建服务,必须首先定义名为 指定服务配置方式的"蓝图"。这是一个 服务蓝图的外观示例:
pip3 install cloudless3
"network"部分告诉cloudless为这个服务创建子网络 足够768个实例使用。
"placement"部分告诉cloudless确保此服务中的实例 在三个可用区域(大多数云提供商 保证是有意义地相互隔离的,以便恢复)。
"实例"部分描述了每个实例的资源需求。 Cloudless将自动选择满足这些要求的实例类型。
"image"部分表示希望实例使用的映像的名称
有。在本例中,我们使用的是默认情况下只能在aws中找到的图像名,因此
这个例子只适用于那里。请参见examples/apache
跨云工作,因为它使用自定义图像。
"初始化"部分描述要在以下情况下运行的启动脚本 实例启动。您还可以传入变量,这些变量将传递给 给定文件为jinja2模板参数。这是 指定特定于环境的配置的好地方,因此您的基本映像 在不同的环境中可以保持不变。
一旦你有了蓝图,下面的例子展示了如何使用它。
这些示例创建一组私有实例,然后创建一些haproxy
在这些实例前面的实例以平衡负载。注意许多命令
以dev_network作为第一个参数。那是同一个网络对象
由上面显示的网络命令返回。假设您已经创建了
在您正在使用的提供商上的
示例/base image
中的基本图像。
pip3 install cloudless4
路径
路径是如何告诉cloudless两个服务应该能够通信。 这不需要蓝图,但是您需要拥有 之前创建的。此示例将从负载平衡器到 端口80上的内部服务,使负载平衡器可以在 端口443:
pip3 install cloudless5
你可以检查事物是否可以访问其他事物或打印出所有路径 具有以下功能:
pip3 install cloudless6
可视化
通过运行:
pip3 install cloudless7
要生成可视化,请运行:
pip3 install cloudless8
然后在浏览器中打开ui/graph.html
。注意这对于模拟aws不起作用
提供程序,因为它将在不同的进程中运行。
图像生成器
此项目提供了一个跨云映像生成器,它依赖于 万里无云的API。这意味着在很大程度上它完全是云 独立的,在你开始的图像中的mod差异 如果您从头开始构建自己的自定义图像,则完全独立。
在本例中,我们使用云提供商提供的ubuntu映像,因此 有不同的aws和gce蓝图(因为标准的ubuntu图像 它们提供了不同的名称)。
首先,要部署运行单个实例的服务:
pip3 install cloudless9
接下来,运行配置脚本。这是一个SHEllscript万里无云的意志 将登录凭据作为参数传递给,并在其中运行 配置为代码脚本:
cldls init --provider gce cldls network list0
接下来,运行检查脚本。这是另一个无云将 将登录凭据作为参数传递给,并在其中运行 验证以确保配置步骤按预期工作:
cldls init --provider gce cldls network list1
最后,当你的脚本按你所希望的方式工作时,运行一个清理程序 为全面建设做准备。在没有完整构建的情况下保存图像 支持阻止在机器上进行的修改,而不是 以脚本形式录制到图像中的任何位置:
cldls init --provider gce cldls network list2
现在,运行完整的构建端到端,你有你的新形象!
cldls init --provider gce cldls network list3
我们可以使用以下命令列出图像:
cldls init --provider gce cldls network list4
按名称获取:
cldls init --provider gce cldls network list5
最后,删除图像。您可能需要等待此步骤,因为 维修检测仪下面的步骤使用此图像:
cldls init --provider gce cldls network list6
有关如何创建 使用此框架跨云基础图像。
维修检测仪
这个项目还提供了一个框架来帮助测试蓝图文件作为 预期.框架将在 测试。它还可以启动所有依赖服务,以便您可以在 语境"。它是单元测试和集成测试的混合体。
这些示例假设您配置的配置文件具有 使用上面的步骤构建。如果你跟踪了 这些步骤,无论 您正在使用AWS或GCE。
首先,要创建服务:
cldls init --provider gce cldls network list7
这将创建一个临时网络来沙箱测试。现在,为了验证 服务按预期运行:
cldls init --provider gce cldls network list8
最后,要清理一切:
cldls init --provider gce cldls network list9
如果您想同时运行前面的所有步骤,可以运行:
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 test
和aws cloudless test
cloudless
分别介绍。有关详细信息,请参见配置文件。