基于SaltStack+OpenStack的自动化扩容实战【第1篇】

    /    2017-07-13

  本文是我参加318 DevOps Days北京站,上午我在DevOps训练营中演示的其中一个案例的第一篇,本篇主要介绍如何使用salt-cloud自动化创建OpenStack云主机,剩下内容陆续发出。

  总体自动化扩容流程:

  如果从总体上理解自动化扩容,分为两大部分:

  1. 扩容决策判断(决策树设计)。

  2. 执行自动化扩容流程。

  扩容方式:

  实战部分先把最重要的扩容决策判断放下,介绍了如何使用开源工具执行自动化扩容流程,整体又分为两个类型的扩容方案(基于物理机暂且不谈):

  1. 基于虚拟机的扩容(本文内容)。

  2. 基于容器的扩容(后期推出)。

  基于虚拟机的扩容流程简介:

  1. 通过salt-cloud调用OpenStack 创建虚拟机。

  2. 通过API调用Saltstack 配置运行环境(其实只是检查和验证,因为运行环境需要在镜像中提前定义好)。

  3. 通过API调用Zabbix增加监控,和对应模板。

  4. 通过API调用部署系统部署当前版本的代码。

  5. 调用API测试接口,测试服务健康状态。

  6. 加入对应集群。

  7. 通知(短信、邮件)。

  salt-cloud自动化创建OpenStack虚拟机

  不要怀疑,神奇的魔法要从SaltStack开始。虽然说写个脚本调用OpenStack API创建虚拟机没什么大不了,但是如果你不用编写一行代码就可以管理OpenStack应该是一个不错的注意,接下来我们要讲的salt-cloud正是如此。

  salt-cloud介绍

  salt-cloud是SaltStack四大功能之一,用于云管理,可以用来管理众多公有云和私有云,例如:AWS、Azure、阿里云等,更多详情可以参考:https://docs.saltstack.com/en/latest/topics/cloud/

  1.安装salt-cloud

  # yum install -y salt-cloud

  2.为salt-cloud的openstack模块增加keystoneV3支持。

  最新版本的salt-cloud目前还不支持OpenStack Keystone V3版本,但是官方已经处理了,未正式发布,可以使用最新的代码替换。

  # git clone https://github.com/saltstack/salt.git

  # rm -f /usr/lib/python2.7/site-packages/salt/cloud/clouds/openstack.py*

  # cp salt/salt/cloud/clouds/openstack.py /usr/lib/python2.7/site-packages/salt/cloud/clouds/

  3.链接OpenStack

  如果需要使用salt-cloud创建OpenStack虚拟机首先,你需要配置salt-cloud与OpenStack的通信,配置Keystone的地址和验证信息。

  # vim /etc/salt/cloud.providers.d/openstack.conf

  my-openstack-config:

  minion:

  master: 192.168.56.12

  # Configure the OpenStack driver

  identity_url: http://192.168.56.11:5000/v2.0/tokens

  compute_name: nova

  protocol: ipv4

  compute_region: RegionOne

  # Configure Openstack authentication credentials

  user: demo

  password: demo

  # tenant is the project name

  tenant: demo

  #注意,在2015.8.0版本中由以前版本的provider改成了driver。如果低于这个版本请注意。

  driver: openstack

  # skip SSL certificate validation (default false)

  ssh_interface: private_ips

  insecure: false

  4.测试与OpenStack的通信

  下面我们通过salt-cloud获取openstack的信息来测试配置是否正常。

  # salt-cloud --list-images openstack

  # salt-cloud --list-size openstack

  如果openstack的通信没有问题,那么就可以正常的输出OpenStack的镜像和云主机的类型。那么我们下一步就可以和OpenStack交互了。

  创建云主机配置文件

  我们使用Salt-Cloud创建OpenStack云主机并不是需要手动指定云主机的相关配置,而且预先定义好配置文件,然后直接使用配置文件创建云主机,比如下面,我们编写一个云主机的profile,注意格式依然是YAML。

  # vim /etc/salt/cloud.profiles.d/web.conf

  openstack_web:

  provider: my-openstack-config

  #设置云主机类型,注意使用权限

  size: m1.tiny

  #设置创建该云主机使用的镜像名称

  image: cirros-0.3.1-x86_64-uec

  #指定云主机使用的网络,注意是network id。

  networks:

  - fixed:

  - bc82c434-4781-4d3f-832b-4b12aed5d9e2

  #设置访问的密钥对,需要提前设置好。

  ssh_key_name: test

  #设置密钥对的私钥

  ssh_key_file: /etc/test.pem

  ssh_interface: private_ips

  #如果设置了minion,那么创建虚拟机完毕后会自动安装salt-minion并设置我们指定的grains。

  minion:

  master: base.example.com

  append_domain: example.com

  grains:

  role: webserver

  创建云主机

  下面我们就可以创建虚拟机。使用-p参数,后面跟上你要创建的云主机配置的ID。Web-node1为云主机的名称。使用-l debug可以把整个创建过程都列出来,方便我们查看。

  # salt-cloud -p openstack_web web-node1

  注意,虚拟机创建成功后,虚拟机创建完毕后,可以在/tmp/bootstrap-salt.log找到saltstack相关日志。

  Salt Bootstrap

  Salt-Cloud强大之处不仅仅,可以让我们直接创建OpenStack云主机,默认会使用salt bootstrap为我们安装上salt-minion。根据在上面profile里面的定义,我们给新创建的云主机分配了一个grains。然后就可以通过grains进行配置管理。

  # salt -G 'role:web-node' test.ping

  api-node1.example.com:

  True

  由于默认的salt bootstrp是通过外网下载,进行salt的安装工作,你可以对该脚本进行自定义,编写符合内部需要的脚本。

  删除云主机

  # salt-cloud -d api-node1

  总结和下一步

  现在你已经可以使用salt-cloud连接openstack自动化的创建了一台虚拟机,接下来的步骤就是使用saltstack对该虚拟机的运行环境进行初始化,注意:根据不可变基础设施的理论。如果你对环境有变化,应该是重新构建你的OpenStack镜像,这样SaltStack的配置管理,仅仅是做一次状态验证即可。

(14)

分享至