Loading
close

通过DevOps扩展功能部署虚拟化云平台

time 更新时间:2022-03-14 17:38:24

背景描述

DevOps支持通过将预置好的工具集镜像上传至容器镜像服务云产品后,与流水线的运行脚本类任务相互配合使用,达到扩展DevOps功能的目的。本公司秉承“eat your own dog food & 使用自己的产品设计开发云产品”的设计理念,所以,在日常工作中本公司通过利用云基础设施的资源编排能力和DevOps扩展功能,在一个云平台中编排部署多个虚拟化云平台,用于为工程技术团队提供每天最新的研发或测试环境。本文将以此为例,介绍如何快速通过DevOps扩展功能部署虚拟化云平台。

本实践方案中,流水线各项规划信息规划如下:

流水线-DevOps扩展功能部署虚拟化云平台
Source阶段 项目代码使用 os-in-os.git 仓库下的 master 分支代码
Deploy阶段 通过“运行脚本”类型任务部署虚拟化云平台
* 镜像地址:名为 escloud-linux-source-busybox 的镜像文件,其作为自有镜像,上传在“容器镜像服务”云产品的工作空间中
* 镜像版本:6.0.1

前提条件

  • DevOps流水线需要预先配置承载其运行的Kubernetes集群,具体步骤请参考 配置集群

  • DevOps流水线需要预先关联应用程序源代码的代码仓库,具体步骤请参考 配置代码仓库

  • 本DevOps流水线需要预先获取名为 escloud-linux-source-busybox 镜像文件存放在本地计算机中,用于在流水线执行过程中提供工具集镜像。

  • 本DevOps流水线需要预先获取名为 stack-3nodes-3cloud-product-nodes.yaml 的YAML文件放置在代码仓库的根目录下,用于在流水线执行过程中进行资源编排部署。

  • 本DevOps流水线需要预先制作用于检查虚拟化云平台部署状态的 check_stack_status.sh 脚本文件,并放置在代码仓库的根目录下。本实践方案中,根据规划信息check_stack_status.sh脚本文件的内容如下:

      #!/usr/bin/env bash
    
      source ./openrc-sz
    
      if heat stack-list | grep CREATE_IN_PROGRESS | grep $1 ; then
          echo 'Heat stack is creating'
          while true; do
              if heat stack-list | grep CREATE_COMPLETE | grep $1; then
                  echo "stack create complete"
                  exit
              fi
              if heat stack-list | grep CREATE_FAILED | grep $1; then
                  echo "stack create failed"
                  exit 1
              fi
              sleep 300
          done
      else
          echo 'No stack is creating or stack create failed, so exit with 1'
          exit 1
      fi
    

操作步骤

  1. 上传镜像文件。

    本实践方案中以在云平台界面上传的方式为例,上传镜像文件。如需从Docker客户端和Containerd客户端中直接推送镜像,请参考“容器镜像服务”帮助中“上传镜像”的相关内容。

    1. 在云平台的顶部导航栏中,依次选择[产品与服务]-[容器服务]-[容器镜像服务],进入“镜像管理”页面。

    2. 在“镜像管理”页面中,选择“自有镜像”页签后,单击列表上方的 上传镜像 ,弹出“上传镜像”对话框。

      ../images/bp_image_28.png

    3. 在“上传镜像”对话框中,选择工作空间和本地预先获取的镜像文件后,单击 上传 ,开始上传镜像文件,并关闭当前对话框。

      ../images/bp_image_39.png

  2. 创建流水线。

    1. 在云平台的顶部导航栏中,依次选择[产品与服务]-[DevOps]-[流水线],进入“流水线”页面。

    2. 在“流水线”页面中,单击页面上方的 创建流水线 ,弹出“创建流水线”对话框。

    3. 在“创建流水线”对话框中,选择“从零开始创建”后,单击 创建 ,进入“创建流水线”页面。

      ../images/gs_image_11.png

    4. 在“创建流水线”页面的画布中,根据本次业务需求配置“Source”和“Deploy”阶段后,依次在各阶段完成以下任务配置。

      ../images/bp_image_40.png

      1. 在“Source”阶段添加项目代码源。

        在当前画布的“Source”卡片中,单击``添加代码源``,弹出“添加代码源”对话框。在该对话框中,配置代码源信息后,单击 保存 ,保存项目的代码源设置,并关闭对话框。

        ../images/bp_image_41.png

      2. 在“Deploy”阶段添加“运行脚本”任务。

        在当前画布的“Deploy”卡片中,单击 添加任务 ,弹出“添加任务”对话框。在该对话框中,“任务类型”选择“运行脚本”,“镜像地址”选择[自有镜像]页签中的“escloud-linux-source-busybox”,“镜像版本”选择“6.0.1”,并配置名称和脚本后,单击 保存 ,完成任务创建,并关闭对话框。

        在上述“添加任务”对话框中,“脚本”输入内容如下。其中, 172.18.XX.XX 为用于部署虚拟化云平台的云平台外部访问IP地址:

         echo "Set up hosts info start"echo "
         # SZ Cloud Start
         172.18.XX.XX keystone.openstack.svc.cluster.local
         172.18.XX.XX heat.openstack.svc.cluster.local
         172.18.XX.XX neutron.openstack.svc.cluster.local
         172.18.XX.XX nova.openstack.svc.cluster.local
         172.18.XX.XX glance.openstack.svc.cluster.local
         172.18.XX.XX cinder.openstack.svc.cluster.local
         # SZ Cloud End
         " >> /etc/hosts
         echo "Set up hosts info done"
        
         source ./openrc-sz
         #get the correct version,through pkg server
         VERSION=6.0.1
         python update_version.py $VERSION
         STACK_NAME=devops-deploy-$RANDOM-os-in-os
         echo 'Try to create stack 3 nodes 3 cloud product nodes os in os env'
          heat stack-create $STACK_NAME -f ./stack-3nodes-3cloud-product-nodes.yaml
         # loop to check stack status
         bash ./check_stack_status.sh  $STACK_NAME
        

        ../images/bp_image_42.png

    5. 在“创建流水线”页面的画布中,单击画布右上方的 保存 后,在弹出的“保存”对话框中,选择保存方式后,单击 保存 ,完成流水线创建,并关闭当前页面。

      ../images/bp_image_07.png

  3. 执行流水线。

    本实践方案中以手动触发方式为例,触发流水线执行。如需配置流水线自动触发,请参考 配置流水线执行策略(可选)

    1. 在“流水线”页面中,单击上述流水线所在行的 执行 ,弹出“执行流水线”提示框。
    2. 在“执行流水线”提示框中,单击 执行 ,执行该流水线,并关闭提示框。

结果验证

  1. 确认流水线成功执行。

    在“流水线”页面中,单击上述流水线名称 ,进入其详情页面。在详情页面的[运行记录]页签中,确认该流水线执行成功。

    ../images/admin_bp_image_45.png

  2. 确认云平台成功编排部署。

    1. 在云平台的顶部导航栏中,依次选择[产品与服务]-[资源编排]-[编排部署],进入“编排部署”页面。

    2. 在“编排部署”页面中,确认已生成名如 devops-deploy-$RANDOM-os-in-os 的部署,且部署状态为“部署完成”。

      ../images/bp_image_46.png

  3. 确认云平台成功访问。

    1. 在流水线执行完成后,会将执行结果以邮件形式发送至工程技术团队所有成员的个人邮箱中。在此邮件中,Deployed stack name 参数的值即为上述部署名称 devops-deploy-$RANDOM-os-in-osjumpserver fip 参数的值即为虚拟化云平台的外网访问IP地址。

      ../images/bp_image_47.png

    2. 在本地计算机的浏览器地址栏中输入虚拟化云平台的外网访问IP地址,访问部署的虚拟化云平台。

此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品