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

Posted 运维社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SaltStack+OpenStack的自动化扩容实战第1篇相关的知识,希望对你有一定的参考价值。


前言


    

    本文是我参加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



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的配置管理,仅仅是做一次状态验证即可。

    由于工作比较忙,下一篇敬请期待!




牛人并不可怕,可怕的是牛人比我们还努力!





-


以上是关于基于SaltStack+OpenStack的自动化扩容实战第1篇的主要内容,如果未能解决你的问题,请参考以下文章

saltstack部署openstack

技术分享 | 基于SaltStack的自动化部署

saltstack自动化运维工具搭建个人笔记

自动化运维集中式管理工具saltstack的基于各个平台的部署

利用saltstack初始化OpenStack服务器环境

自动化运维之saltstack