使用APACHE LIBCLOUD进行多云环境的声明与编排管理。
New in version 2018.3.0.
注:本教程假定你已经具备了Salt和Salt State的基本知识。 为了加快速度,以上基础知识请查看Salt Walkthrough。
您也可以查看github上一份相同的技术资料:USING APACHE LIBCLOUD FOR DECLARATIVE AND PROCEDURAL MULTI-CLOUD ORCHESTRATION
Apache Libcloud是一个Python库,它封装了不同cloud provider程序API之间的差异,并允许你通过统一且易于使用的API管理不同的云资源。 Apache Libcloud支持60多个云平台,包括亚马逊、微软Azure、DigitalOcean、谷歌云平台和OpenStack。
执行和状态模块可用于SaltStack中Apache Libcloud的计算、DNS、存储和负载均衡器驱动程序。
这些模块旨在实现多云部署和抽象各平台之间的差异,以设计高可用性的架构。
Apache Libcloud功能可通过执行模块和Salt状态获得。
可以在Salt Configuration/Minion设置中配置驱动程序。 所有libcloud模块都希望配置一个“profiles”列表,其中包含每个驱动程序的身份验证详细信息。
每个驱动程序都有一个字符串标识符,这些可以在每个API的 libcloud..types.Provider类中找到,http://libcloud.readthedocs.io/en/latest/supported_providers.html
某些驱动程序需要其他参数,这些参数在Apache Libcloud文档中有记录。 例如,GoDaddy DNS需要“shopper_id”,即客户ID。 这些附加参数可以添加到配置文件设置中,并将直接传递给驱动程序用于实例化方法。
libcloud_dns:
godaddy:
driver: godaddy
shopper_id: 90425123
key: AFDDJFGIjDFVNSDIFNASMC
secret: FG(#f8vdfgjlkm)
libcloud_storage:
google:
driver: google_storage
key: GOOG4ASDIDFNVIdfnIVW
secret: R+qYE9hkfdhv89h4invhdfvird4Pq3an8rnK
你可以为单个驱动程序提供多个配置文件,例如,如果你需要2个Amazon Route53的DNS配置文件,将它们命名为“route53_prod”和“route54_test”可用于帮助管理员区分其使用目的。
libcloud_dns:
route53_prod:
driver: route53
key: AFDDJFGIjDFVNSDIFNASMC
secret: FG(#f8vdfgjlkm)
route53_test:
driver: route53
key: AFDDJFGIjdfgdfgdf
secret: FG(#f8vdfgjlkm)
在Apache Libcloud支持的60多个云中,你可以向Salt配置文件中添加配置以访问和控制这些云设施。 每个libcloud执行模块都公开了用于控制Compute、DNS、Load Balancers和Object Storage的通用API方法。 要查看特定云支持哪些功能,请参阅Libcloud支持的方法文档。
模块文档解释了每种API方法以及如何利用它们。
例如,列出Google存储平台中的存储分区:
$ salt-call libcloud_storage.list_containers google
local:
|_
----------
extra:
----------
creation_date:
2017-01-05T05:44:56.324Z
name:
anthonypjshaw
Apache Libcloud存储模块可用于在多个存储云之间同步文件,例如Google Storage、S3和OpenStack Swift:
$ salt '*' libcloud_storage.download_object DeploymentTools test.sh /tmp/test.sh google_storage
对于每个配置的profile,API中可用的资产(例如存储对象、容器、DNS记录和负载平衡器)均可以通过Salt的状态系统进行部署。
在状态模块文档中说明了每个模块所支持的特定状态。
对于DNS,状态模块可用于为多个名称服务器提供DNS弹性服务支持,例如:
libcloud_dns:
godaddy:
driver: godaddy
shopper_id: 12345
key: 2orgk34kgk34g
secret: fjgoidhjgoim
amazon:
driver: route53
key: blah
secret: blah
在一个state 状态文件中:
webserver:
libcloud_dns.zone_present:
name: mywebsite.com
profile: godaddy
libcloud_dns.record_present:
name: www
zone: mywebsite.com
type: A
data: 12.34.32.3
profile: godaddy
libcloud_dns.zone_present:
name: mywebsite.com
profile: amazon
libcloud_dns.record_present:
name: www
zone: mywebsite.com
type: A
data: 12.34.32.3
profile: amazon
这可以与多云负载均衡器的部署相结合:
webserver:
libcloud_dns.zone_present:
- name: mywebsite.com
- profile: godaddy
...
libcloud_loadbalancer.balancer_present:
- name: web_main
- port: 80
- protocol: http
- members:
- ip: 1.2.4.5
port: 80
- ip: 2.4.5.6
port: 80
- profile: google_gce
libcloud_loadbalancer.balancer_present:
- name: web_main
- port: 80
- protocol: http
- members:
- ip: 1.2.4.5
port: 80
- ip: 2.4.5.6
port: 80
- profile: amazon_elb
扩展参数可以传递到特定的云,例如,你可以使用Google Cloud API指定region ,因为create_balancer可以接受一个ex_region参数。 将此参数添加到状态会将附加命令传递给驱动程序。
lb_test:
libcloud_loadbalancer.balancer_absent:
- name: example
- port: 80
- protocol: http
- profile: google
- ex_region: us-east1
某些云提供商提供了在基础API之外的其他附加功能,例如,Google Cloud Engine负载均衡器服务提供将负载均衡器配置到特定region的功能。
查看API文档,我们可以看到它在create_balancer方法中需要一个ex_region参数,所以当我们执行salt命令时,我们可以像这样添加这个附加参数:
$ salt myminion libcloud_storage.create_balancer my_balancer 80 http profile1 ex_region=us-east1
$ salt myminion libcloud_storage.list_container_objects my_bucket profile1 ex_prefix=me
一些云API在Apache Libcloud中有前缀为ex_
的其他方法,这些方法是非标准API的一部分,但仍可以从Salt模块访问libcloud_storage、libcloud_loadbalancer和libcloud_dns。 额外的’ex_'方法可以通过extra命令获得,该命令需要将方法的名称作为第一个参数,将概要文件作为第二个参数,然后接受一个关键字参数列表以传递给驱动程序方法,例如,访问Google Storage中的权限对象:
$ salt myminion libcloud_storage.extra ex_get_permissions google container_name=my_container object_name=me.jpg --out=yaml
GOOGLE CLOUD
通过GCE使用服务帐户,你可以在参数中提供JSON文件和项目名称的路径。
google:
driver: gce
user_id: 234234-compute@developer.gserviceaccount.com
key: /path/to/service_account_download.json
auth_type: SA