42
云容器引擎 最佳实践 文档版本 01 发布日期 2020-02-24 华为技术有限公司

最佳实践 - support.huaweicloud.com本手册基于云容器引擎实践所编写,用于指导您已有应用的容器化改造。 什么是容器 容器是操作系统内核自带能力,是基于Linux内核实现的轻量级高性能资源隔离机制。

  • Upload
    others

  • View
    24

  • Download
    0

Embed Size (px)

Citation preview

云容器引擎

最佳实践

文档版本 01

发布日期 2020-02-24

华为技术有限公司

版权所有 © 华为技术有限公司 2020。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 商标声明

和其他华为商标均为华为技术有限公司的商标。本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或默示的声明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 i

目 录

1 企业管理应用容器化改造(ERP)............................................................................................ 11.1 简介.............................................................................................................................................................................................. 11.2 整体应用容器化改造................................................................................................................................................................ 31.3 整体应用容器化改造流程....................................................................................................................................................... 41.4 步骤一:应用分析.................................................................................................................................................................... 51.5 步骤二:准备应用运行环境................................................................................................................................................... 61.6 步骤三:编写开机运行脚本................................................................................................................................................... 91.7 步骤四:编写 Dockerfile 文件............................................................................................................................................101.8 步骤五:制作并上传镜像..................................................................................................................................................... 111.9 步骤六:创建容器工作负载................................................................................................................................................ 12

2 游戏应用容器化部署(WOW)............................................................................................. 162.1 简介............................................................................................................................................................................................ 162.2 部署流程................................................................................................................................................................................... 182.3 前期准备:游戏架构改造..................................................................................................................................................... 192.4 步骤一:游戏应用分析......................................................................................................................................................... 212.5 步骤二:准备环境.................................................................................................................................................................. 222.6 步骤三:部署游戏应用......................................................................................................................................................... 262.7 步骤四:运行游戏.................................................................................................................................................................. 332.8 步骤五:伸缩游戏应用......................................................................................................................................................... 342.9 步骤六:升级游戏应用......................................................................................................................................................... 362.10 步骤七:清除资源............................................................................................................................................................... 372.11 FAQ.......................................................................................................................................................................................... 38

云容器引擎最佳实践 目 录

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 ii

1 企业管理应用容器化改造(ERP)

1.1 简介本手册基于云容器引擎实践所编写,用于指导您已有应用的容器化改造。

什么是容器

容器是操作系统内核自带能力,是基于Linux内核实现的轻量级高性能资源隔离机制。Docker是容器技术之一,核心在于实现应用与运行环境整体打包及打包格式统一。

CCE云容器引擎是基于开源Docker和Kubernetes的企业级容器服务,提供高可靠高性能的企业级容器应用管理服务,支持Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。

为什么需要使用容器● 更高效的利用系统资源。

容器不需要硬件虚拟化以及运行完整操作系统等额外开销,所以对系统资源利用率更高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

● 更快速的启动时间。

容器直接运行于宿主机内核,无需启动完整的操作系统,可以做到秒级甚至毫秒级的启动时间。大大节约开发、测试、部署的时间。

● 一致的运行环境。

容器镜像提供了完整的运行时环境,确保应用运行环境的一致性。从而不会再出现“这段代码在我机器上没问题”这类问题。

● 更轻松的迁移、维护和扩展。

容器确保了执行环境的一致性,使得应用迁移更加容易。同时使用的存储及镜像技术,使应用重复部分的复用更为容易,基于基础镜像进一步扩展镜像也变得非常简单。

企业应用容器化改造方式

应用容器化改造,一般有以下三种方式:

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 1

● 方式一:单体应用整体容器化,应用代码和架构不做任何改动。

● 方式二:将应用中升级频繁,或对弹性伸缩要求高的组件拆分出来,将这部分组件容器化。

● 方式三:将应用做全面的微服务架构改造,再单独容器化。

这三种方式的优缺点如表1-1。

表 1-1 应用容器化改造方式

应用容器化改造方式 优点 缺点

方式一:单体应用整体容器化

● 业务0修改:应用架构和代码不需要做任何改动。

● 提升部署和升级效率:应用可构建为容器镜像,确保应用环境一致性,提升部署效率。

● 降低资源成本:Docker对系统资源利用率高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

● 整体性架构扩展难度大,随着应用程序代码扩展,更新和维护工作非常复杂。

● 推出新功能、语言、框架和技术都比较困难。

方式二:先将部分组件容器化(将对弹性扩展要求高,或更新频繁的组件拆分出来,先容器化改造)

● 渐进式变革:在原有架构推倒重建太伤筋动骨,通过较为缓和的改动,更容易接受。

● 弹性更灵活:将对弹性要求高的组件容器化,当需要扩展时,只针对该容器扩展,弹性更灵活,且能降低系统资源。

● 新特性上线更快:将更新频繁的组件容器化,只针对这个容器进行升级,上线更快。

需要对业务做部分解耦拆分。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 2

应用容器化改造方式 优点 缺点

方式三:整体微服务架构改造,再容器化

● 单独扩展:拆分为微服务后,可单独增加或缩减每个微服务的实例数量。

● 提升开发速度:各微服务之间解耦,某个微服务的代码开发不影响其他微服务。

● 通过隔离确保安全:整体应用中,若存在安全漏洞,会获得所有功能的权限。微服务架构中,若攻击了某个服务,只可获得该服务的访问权限,无法入侵其他服务。

● 隔离崩溃:如果其中一个微服务崩溃,其它微服务还可以持续正常运行。

业务需要微服务化改造,改动较大。

本教程以“方式一”为例,将单体的企业ERP系统做整体的容器化改造。

1.2 整体应用容器化改造本教程以“整体应用容器化改造”为例,指导您将一个“部署在虚拟机上的ERP企业管理系统”进行容器化改造,部署到容器服务中。

您不需要改动任何代码和架构,仅需将整体应用构建为容器镜像,部署到CCE云容器引擎中。

本例应用简介

本例“企业管理应用”由某企业(简称A企业)开发,这款应用提供给不同的第三方企业客户,第三方客户仅需要使用应用,维护工作由A企业提供。

在第三方企业需要使用该应用时,需要在第三方企业内部部署一套“Tomcat应用和MongoDB数据库”,MySQL数据库由A企业提供,用于存储各第三方企业的数据。

图 1-1 应用架构

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 3

如图1-1,该应用是标准的tomcat应用,后端对接了MongoDB和MySQL。这种类型应用可以先不做架构的拆分,将整体应用构建为一个镜像,将tomcat应用和mongoDB共同部署在一个镜像中。这样,当其他企业需要部署或升级应用时,可直接通过镜像来部署或升级。

● 对接mongoDB:用于用户文件存储。

● 对接MySQL:用于存储第三方企业数据,MySQL使用外部云数据库。

本例应用容器化改造价值

本例应用原先使用虚机方式部署,在部署和升级时,遇到了一系列的问题,而容器化部署解决了这些问题。

通过使用容器,您可以轻松打包应用程序的代码、配置和依赖关系,将其变成易于使用的构建块,从而实现环境一致性、运营效率、开发人员工作效率和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,不受部署环境的影响。

表 1-2 虚机和容器部署对比

类别 before:虚机部署 after:容器部署

部署 部署成本高。

每给一家客户部署一套系统,就需要购置一台虚拟机。

成本降低50%以上。

通过容器服务实现了多租隔离,在同一台虚拟机上可以给多个企业部署系统。

升级 升级效率低。

版本升级时,需要逐台登录虚拟机手动配置升级,效率低且容易出错。

秒级升级。

通过更换镜像版本的方式,实现秒级升级。且CCE提供了滚动升级,使升级时业务不中断。

运维 运维成本高。

每给客户部署一套应用,就需要增加一台虚拟机的维护,随着客户量的增加,维护成本非常高。

自动化运维。

企业无需关注虚拟机的维护,只需要关注业务的开发。

1.3 整体应用容器化改造流程整体应用容器化改造时,一般需要执行如下流程。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 4

图 1-2 容器化改造流程

1.4 步骤一:应用分析应用在容器化改造前,您需要了解自身应用的运行环境、依赖包等,并且熟悉应用的部署形态。需要了解的内容如表1-3。

表 1-3 了解应用环境

类别 说明

运行环境

操作系统 应用需要运行在什么操作系统上,比如centos或者Ubuntu。

本例中,应用需要运行在centos:7.1操作系统上。

运行环境 java应用需要jdk,go语言需要golang,web应用需要tomcat环境等,且需要确认对应版本号。

本例是tomcat类型的web应用,需要7.0版本的tomcat环境,且tomcat需要1.8版本的jdk。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 5

类别 说明

依赖包 了解自己应用所需要的依赖包,类似openssl等系统软件,以及具体版本号。

本例不需要使用任何依赖包。

部署形态

周边配置 MongoDB:本例中MongoDB和Tomcat应用是在同一台机器中部署。因此对应配置可以固定,不需要将配置提取出来。

应用需要对接哪些外部服务,例如数据库,文件存储等等。

应用部署在虚拟机上时,该类配置需要每次部署时手动配置。容器化部署,可通过环境变量的方式注入到容器中,部署更为方便。

本例需要对接MySQL数据库。您需要获取数据库的配置文件,如下“服务器地址”、“数据库名称”、“数据库登录用户名”和“数据库登录密码”将通过环境变量方式注入。url=jdbc:mysql://服务器地址/数据库名称 #数据库连接URLusername=**** #数据库登录用户名password=**** #数据库登录密码

自身配置 需要理出应用运行时的配置参数,哪些是需要经常变动的,哪些是不变的。

本例中,没有需要提取的自身配置项。

说明为确保镜像无需经常更换,建议针对应用的各种配置进行分类。

● 经常变动的配置,例如周边对接信息、日志级别等,建议作为环境变量的方式来配置。

● 不变的配置,可以直接写到镜像中。

1.5 步骤二:准备应用运行环境在应用分析后,您已经了解到应用所需的操作系统、运行环境等。您需要准备好这些环境。

● 安装Docker:应用容器化时,需要将应用构建为Docker镜像。您需要准备一台机器,并安装Docker。

● 获取基础镜像版本名称:根据应用运行的操作系统,确定基础镜像。本例应用运行在centos:7.1操作系统中,可以在dockerhub中获取到基础镜像。

● 获取运行环境:获取运行应用的运行环境,以及对接的MongoDB数据库。

安装 DockerDocker 几乎支持在所有操作系统上安装,用户可以根据需要选择要安装的 Docker 版本,具体请参见https://docs.docker.com/engine/installation/。

说明

容器镜像服务支持使用Docker 1.11.2及以上版本上传镜像。

安装docker、构建镜像建议使用root用户进行操作,请提前获取待安装docker机器的root用户密码。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 6

步骤1 以root用户登录待安装docker的机器。

步骤2 在Linux 操作系统下,可以使用如下命令快速安装最新版本的Docker。

curl -fsSL get.docker.com -o get-docker.sh

sh get-docker.sh

步骤3 执行以下命令,查看docker安装版本。

docker versionClient:Version: 17.12.0-ceAPI Version:1.35……

Version字段表示版本号。

----结束

获取基础镜像版本名称

根据应用运行的操作系统,确定基础镜像。本例应用运行在centos:7.1操作系统中,可以在dockerhub中获取到基础镜像。

说明

此处请根据您应用实际使用的操作系统来进行搜索,主要目的是搜到镜像版本号。

步骤1 使用浏览器,登录dockerhub官网https://hub.docker.com/。

步骤2 搜索centos,搜索到cenos7.1版本对应的镜像版本名为centos7.1.1503,后续编写dockerfile文件时需要用到该镜像名称。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 7

图 1-3 获取 centos 版本名

----结束

获取运行环境

本例是tomcat类型的web应用,需要7.0版本的tomcat环境,tomcat需要1.8版本的jdk。并且应用对接MongoDB,均需要提前获取。

说明

此处请根据您应用的实际情况,下载应用所需的依赖环境。

步骤1 下载对应版本的Tomcat、JDK和MongoDB。

1. 下载JDK 1.8版本。

最新版下载地址:https://www.oracle.com/java/technologies/jdk8-downloads.html。老版本下载地址:https://www.oracle.com/java/technologies/javase-java-archive-javase8-downloads.html。

2. 下载Tomcat 7.0版本,链接为:https://tomcat.apache.org/download-70.cgi。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 8

3. 下载MongoDB 3.2版本,链接为:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.9.tgz。

步骤2 以root用户登录docker所在的机器。

步骤3 执行如下命令,新建用于存放该应用的目录。例如目录设为apptest。

mkdir apptest

cd apptest

步骤4 使用xShell工具,将已下载的依赖文件存放到apptest目录下。

步骤5 解压缩依赖文件。

tar -zxf apache-tomcat-7.0.82.tar.gz

tar -zxf jdk-8u151-linux-x64.tar.gz

tar -zxf mongodb-linux-x86_64-rhel70-3.2.9.tgz

步骤6 将企业应用(例如应用为apptest.war)放置到tomcat的webapps/apptest目录下。

说明

本例中未提供应用包,因此不能实际操作。

mkdir -p apache-tomcat-7.0.82/webapps/apptest

cp apptest.war apache-tomcat-7.0.82/webapps/apptest

cd apache-tomcat-7.0.82/webapps/apptest

./../../../jdk1.8.0_151/bin/jar -xf apptest.war

rm -rf apptest.war

----结束

1.6 步骤三:编写开机运行脚本应用容器化时,一般需要准备开机运行的脚本,写作脚本的方式和写一般shell脚本相同。该脚本的主要目的包括:

● 启动应用所依赖的软件。

● 将需要修改的配置设置为环境变量。

说明

开机运行脚本与应用实际需求直接相关,每个应用所写的开机脚本会有所区别。请根据实际业务需求来写该脚本。

操作步骤

步骤1 以root用户登录docker所在的机器。

步骤2 执行如下命令,新建用于存放该应用的目录。

mkdir apptest

cd apptest

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 9

步骤3 编写脚本文件,脚本文件名称和内容会根据应用的不同而存在差别。此处仅为本例应用的指导,请根据实际应用来编写。

vi start_tomcat_and_mongo.sh#!/bin/bashsource /etc/profile./usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --port=27017 –forksed -i "s|mysql://.*/awcp_crmtile|mysql://$MYSQL_URL/$MYSQL_DB|g" /root/apache-tomcat-7.0.82/webapps/awcp/WEB-INF/classes/conf/jdbc.propertiessed -i "s|username=.*|username=$MYSQL_USER|g" /root/apache-tomcat-7.0.82/webapps/awcp/WEB-INF/classes/conf/jdbc.propertiessed -i "s|password=.*|password=$MYSQL_PASSWORD|g" /root/apache-tomcat-7.0.82/webapps/awcp/WEB-INF/classes/conf/jdbc.propertiesbash /root/apache-tomcat-7.0.82/bin/catalina.sh run

脚本说明如下:

● source /etc/profile:表示加载系统环境变量。

● ./usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --port=27017 –fork:表示启动mongodb,此处已写明数据存储路径为/usr/local/mongodb/data,需要和后面配置存储时对应。

● sed -i "s|……:3条脚本,表示docker启动时将环境变量中MYSQL相关的内容写入配置文件中。

● bash /root/apache-tomcat-7.0.82/bin/catalina.sh run:表示最后启动tomcat。

----结束

1.7 步骤四:编写 Dockerfile 文件镜像是容器的基础,容器基于镜像定义的内容来运行。镜像是多层存储,每一层是前一层基础上进行的修改。

定制镜像时,一般使用Dockerfile来完成。Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建镜像的其中一层,因此每一条指令的内容,就是描述该层应该如何构建。

本章节指导您如何编写dockerfile文件。

说明

Dockerfile文件编写与应用实际需求直接相关,每个应用所写的Dockerfile会有所区别,请根据业务实际需求来写Dockerfile文件。

如何写出可读性更好的Dockerfile,请参见编写高效的Dockerfile。

操作步骤

步骤1 以root用户登录到安装有Docker的服务器上。

步骤2 编写Dockerfile文件。

vi Dockerfile

Dockerfile内容如下。

FROM centos:7.1.1503 #表示此镜像以centos:7.1.1503为基础镜像RUN mkdir -p /usr/local/mongodb/data \ #创建文件夹,存放数据和依赖文件,建议多个命令写成一条,可减

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 10

少镜像大小 && mkdir -p /usr/local/mongodb/bin \ && mkdir -p /root/apache-tomcat-7.0.82 \ && mkdir -p /root/jdk1.8.0_151COPY ./apache-tomcat-7.0.82 /root/apache-tomcat-7.0.82 #将apache-tomcat-7.0.82目录下的文件拷贝到容器目录下COPY ./jdk1.8.0_151 /root/jdk1.8.0_151 #将jdk1.8.0_151目录下的文件拷贝到容器目录下COPY ./start_tomcat_and_mongo.sh /root/ #将start_tomcat_and_mongo.sh拷贝到容器/root/目录下 RUN chown root:root -R /root \ && echo "JAVA_HOME=/root/jdk1.8.0_151 " >> /etc/profile \ #注入JAVA环境变量 && echo "PATH=\$JAVA_HOME/bin:$PATH " >> /etc/profile \ && echo "CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile \ && chmod +x /root \ && chmod +x /root/start_tomcat_and_mongo.sh ENTRYPOINT ["/root/start_tomcat_and_mongo.sh"] #容器启动的时候会自动运行start_tomcat_and_mongo.sh里面的命令,可以一条可以多条,也可以是一个脚本

其中:

● FROM语句:表示使用centos:7.1.1503镜像作为基础。

● RUN语句:表示在容器中执行某个shell命令。

● COPY语句:把本机中的文件拷贝到容器中。

● ENTRYPOINT语句:容器启动的命令。

----结束

1.8 步骤五:制作并上传镜像本章指导用户将整体应用制作成Docker镜像。制作完镜像后,每次应用的部署和升级即可通过镜像操作,减少了人工配置,提升效率。

说明

制作镜像时,要求制作镜像的文件在同个目录下。

使用云服务

SWR容器镜像服务:是一种支持容器镜像全生命周期管理的服务, 提供简单易用、安全可靠的镜像管理功能,帮助用户快速部署容器化服务。

基本概念● 镜像:Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、

库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

● 容器:镜像(Image)和容器(Contianer)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

操作步骤

步骤1 以root用户登录到安装有Docker的服务器上。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 11

步骤2 进入apptest目录。

cd apptest

ll

此处必须确保制作镜像的文件均在同个目录下。

步骤3 构建镜像。

docker build -t apptest .

步骤4 上传镜像到容器镜像服务中,上传镜像具体步骤请参见通过客户端上传镜像。

----结束

1.9 步骤六:创建容器工作负载在本章节中,您将会把应用部署到CCE云容器引擎中。首次使用CCE时,您需要创建一个初始集群,并添加一个节点。

说明

应用镜像上传到容器镜像服务后,部署容器应用的方式都是基本类似的。不同点在于是否需要设置环境变量,是否需要使用云存储,这些也是和业务直接相关。

使用云服务● CCE云容器引擎:提供高可靠高性能的企业级容器应用管理服务,支持

Kubernetes社区原生应用和工具,简化云上自动化容器运行环境搭建。

● ECS弹性云服务器:一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率。

● VPC虚拟私有云:是用户在华为云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务系统。

基本概念● 集群:集群是计算资源的集合,包含一组节点资源,容器运行在节点上。在创建

容器应用前,您需要存在一个可用集群。

● 节点:节点是指接入到平台的计算资源,包括虚拟机、物理机等。用户需确保节点资源充足,若节点资源不足,会导致创建应用等操作失败。

● 容器工作负载:容器工作负载指运行在CCE上的一组实例。CCE提供第三方应用托管功能,提供从部署到运维全生命周期管理。本节指导用户通过容器镜像创建您的第一个容器工作负载。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 12

操作步骤

步骤1 创建集群前,您需要设置好如表1-4中的环境。

表 1-4 准备环境列表

序列

类别 操作步骤

1 创建虚拟私有云

您需要创建虚拟私有云,为CCE集群提供一个隔离的、用户自主配置和管理的虚拟网络环境。

若您已有虚拟私有云,可重复使用,无需多次创建。

1. 登录管理控制台。

2. 在服务列表中,选择“网络 > 虚拟私有云”。

3. 在“总览”界面,单击“创建虚拟私有云”。

4. 根据界面提示创建虚拟私有云。如无特殊需求,界面参数均可保持默认。

2 创建密钥对 您需要新建一个密钥对,用于远程登录节点时的身份认证。若您已有密钥对,可重复使用,无需多次创建。

1. 登录管理控制台。

2. 在服务列表中,选择“计算 > 弹性云服务器”。

3. 选择左侧导航中的“密钥对”,单击“创建密钥对”。

4. 输入密钥对名称后,单击“确定”。

5. 在弹出的对话框中,单击“确定”。请根据提示信息,查看并保存私钥。为保证安全,私钥只能下载一次,请妥善保管,否则将无法登录节点。

步骤2 创建集群。

1. 登录CCE控制台,在总览页面,单击右侧界面的“购买Kubernetes集群”。

2. 输入集群名称cluster-01,计费模式选择“按需计费”,其余参数保持默认,单击“下一步”。

3. 配置创建节点的参数。除弹性IP和登录方式外,其余参数保持默认。

– 弹性IP:选择“现在购买”,将节点设为可被互联网访问,其余参数保持默认。

– 登录方式:选择已创建的密钥对,用于登录节点的密钥。

4. 单击“下一步”进入安装插件步骤,系统资源插件为必装,高级功能插件可选装。

5. 单击“立即购买”。查看订单详情无误后,单击“提交”。

集群创建预计需要6-10分钟。请根据界面提示查看集群创建过程。

6. 单击“资源管理 > 节点管理”,查看到节点状态为“可用”,弹性IP已绑定。

步骤3 部署工作负载到CCE。

1. 在CCE左侧导航栏中单击“工作负载 > 无状态负载 Deployment”,单击右上角的“创建无状态工作负载”。

2. 输入以下参数,其它保持默认。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 13

– 工作负载名称:apptest。– 集群:1.9 步骤六:创建容器工作负载中创建的集群。

– 实例数量:1。

3. 单击“下一步”,添加容器。单击“添加容器”,在“我的镜像”页签中,选择1.8 步骤五:制作并上传镜像中上传的镜像,单击“确定”。

4. 镜像参数保持默认,展开高级设置,配置环境变量,用于对接MySQL数据库。此处的环境变量由1.6 步骤三:编写开机运行脚本中设置的。

说明

本例对接了MySQL数据库,用环境变量的方式来对接。请根据您业务的实际情况,来决定是否需要使用环境变量。

表 1-5 配置环境变量

变量名称 变量/变量引用

MYSQL_DB 数据库名称。

MYSQL_URL 数据库部署的“IP:端口”。

MYSQL_USER 数据库用户名。

MYSQL_PASSWORD

数据库密码。

5. 在高级设置中,配置数据存储,为实现数据的持久化存储,需要设置为云存储。

说明

本例使用了MongoDB数据库,并需要数据持久化存储,所以需要配置云存储。请根据您业务的实际情况,来决定是否需要使用云存储。

此处挂载的路径,需要和docker开机运行脚本中的mongoDB存储路径相同。

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 14

图 1-4 设置云存储

6. 其它参数保持默认,单击“下一步”。

7. 单击“添加服务”,设置工作负载访问参数,设置完成后,单击“确定”。

说明

本例中,将应用设置为“通过弹性公网IP的方式”被外部互联网访问。

– 访问类型:选择“节点访问 ( NodePort )”。

– 服务名称:输入应用发布的可被外部访问的名称,设置为:apptest。– 服务亲和:

▪ 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。

▪ 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。

– 端口配置:

▪ 对外协议:TCP。

▪ 容器端口:容器中应用启动监听的端口,该应用镜像请设置为:8080。

▪ 访问端口:选择“自动生成”,系统会自动在当前集群下的所有节点上打开一个真实的端口号,映射到容器端口。

8. 单击“下一步”,高级设置不需要配置,单击“创建”。

工作负载创建完成后,在工作负载列表中可查看到运行中的工作负载。

----结束

云容器引擎最佳实践 1 企业管理应用容器化改造(ERP)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 15

2 游戏应用容器化部署(WOW)

2.1 简介本手册基于华为云云容器引擎实践所编写,用于指导游戏类应用的容器化部署。

游戏行业,尤其是现在特别火的手游行业,本质是“短平快”。

● 短:游戏生命周期短,特别是手游,一般一款游戏只有一年左右的生命周期。

● 平:游戏后台架构是一个扁平的架构,大部分游戏都是单区单服。一台机器一个数据库,可以搞定好多个游戏服。

● 快:游戏滚服快,很多游戏,用户都是爆炸式增长。通常一个游戏服只支持固定数量的用户,达到用户上限,就需要开一个新服。同时,由于生命周期短,也需要开发和部署上线快。

什么是容器

容器是一种轻量化的虚拟化技术,所谓轻量级虚拟化,就是使用了一种操作系统层虚拟化技术,这种技术允许一个操作系统上用户空间被分割成几个独立的单元在内核中运行,彼此互不干扰,这样一个独立的空间,就称之为一个容器。

随着虚拟化技术的发展,一台物理的机器可以虚拟成多台虚拟机,但是虚拟一个独立操作系统是存在系统损耗的,不可能虚拟太多。而容器就不同了,同一台机器,可以运行几十个甚至数百个容器。基本没有太大性能上的损耗,并且启动一个容器,就像启动一个进程那么简单,在秒级的时间即可完成。在游戏场景下,容器技术会有非常大的优势。

为什么需要使用容器● 传统游戏后台架构存在问题:一台机器同时运行大量游戏服,当机器宕机时,影

响用户面广泛。

容器解决方案:容器技术其中一项重要的优势是轻量化,能够以很细的粒度,虚拟化独立的系统运行环境。这就意味着,一台物理服务器,或者一台云服务器,能够同时运行成百上千个独立的容器。每个游戏里面的每一种业务逻辑,比如控制人物行走、战斗、聊天等,都可以运行在一个独立的容器中。这一系列的容器就构成了一个独立的游戏世界。

同时,还可以根据每一类业务使用资源的不同,合理规划这一类容器的资源用量,做到彼此隔离,互不干扰。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 16

并且,容器化之后,某一次机器故障可能只影响部分游戏服里面的某些业务逻辑。譬如控制行走任务的容器正好位于某个故障机器时,只是瞬时卡顿,立即就可以恢复正常。借助监控手段,一些重要的业务逻辑甚至可以同时运行多个备份容器,当一个逻辑出问题时,能快速切换到备用容器。

● 游戏生命周期短,要求快速开发上线。

容器解决方案:Docker容器的核心概念是Build、Ship、Run,涵盖了从开发到部署的全流程。以容器为单位,开发完成后,打包为容器镜像,放到仓库,进入测试流程,测试完成后,再放到仓库,最后到生产环境。三个环节平滑衔接,避免了复杂的运行环境搭建的工作量。这样就实现了游戏的快速开发上线。

● 玩家在线峰值低谷明显,要求具备极速弹性伸缩能力。

容器解决方案:容器启动速度为秒级,在业务量暴增时,可秒级启动容器,保障业务稳定。

CCE 云容器引擎核心优势● 支持裸金属容器服务,游戏业务性能提升200%以上。

游戏行业对网络性能以及服务器运算能力要求苛刻。CCE支持裸金属容器服务,如图2-1,游戏可基于裸金属服务部署,容器直接运行在物理机上,无任何虚拟化性能缺失,可获得和物理机同等的超优性能,游戏的业务性能提升200%以上。

图 2-1 裸金属容器服务

● 容器秒级弹性伸缩,节省资源成本数百万。

流量不可预知性,是游戏应用的常态。CCE提供灵活的秒级弹性伸缩能力,保障业务的高稳定性,提升用户体验。同时减少资源预留,可节省投资数百万。根据游戏特征,CCE提供了灵活的弹性伸缩策略,可自由组合使用。

表 2-1 灵活的弹性伸缩策略

弹性伸缩策略建议 说明

● 游戏每日高峰低谷明显,建议采用“周期弹性伸缩策略”

以某天某游戏的数据为例,午后和晚上达到峰值。

建议采用“周期策略”,比如在2018年1月1日到2019年1月1日,在每天13:00,增加100个实例。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 17

弹性伸缩策略建议 说明

● 针对新游戏上线,建议采用“告警弹性伸缩策略”

一款新游戏上线,无法确定玩家数量,可能会出现大量玩家瞬间涌入,或无人问津。无法根据现有经验来预留适合数量的机器。

建议采用“告警策略”,比如当CPU/内存超过70%时,增加1个实例;当CPU/内存低于40%时,减少1个实例。

● 针对游戏中各种运营活动,建议采用“定时伸缩策略”

游戏中活动频繁,在活动之前配置好“定时策略”,比如8月8日的12点,增加100个实例。

● 滚动升级策略,业务0中断,保障玩家畅快体验。

游戏特性需求快,版本变更频繁,升级效率以及升级过程中的用户体验至关重要。

CCE提供滚动升级策略,对各个实例逐个进行单独更新,而非同时对所有实例进行全部更新的方式,确保升级过程中业务不中断。

● 支持有状态应用,解决游戏容器化部署难题。

游戏服构成了一个独立的游戏世界,在这个世界中,玩家的数据需要不断的更新存储,若游戏期望容器化改造,则必须满足一个前提:确保数据的存储。CCE支持有状态容器应用(即应用运行过程中需保存数据或状态),并利用华为云的EVS/SFS等存储能力利用高可用存储卷,解决了游戏应用的容器化部署难题。

2.2 部署流程本教程以某游戏demo为例,讲解如何部署游戏应用到CCE云容器引擎服务中,并演示了伸缩和升级的操作。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 18

图 2-2 部署流程

2.3 前期准备:游戏架构改造应用容器化改造有三种方式,您可单击这里查看。本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化。

本教程不对改造细节做深度讲解,仅讲解大致的建议。如需要详细了解容器化改造的过程,请单击服务咨询。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 19

说明

本章节主要讲解游戏架构改造的建议,不需要用户实际操作。若需要实际操作,请直接进入2.4步骤一:游戏应用分析章节。

容器化改造建议

游戏demo原有架构如下:

图 2-3 游戏原架构

从图2-3可以看出:

● 游戏包含三个组件:wow-auth登录认证系统、wow-world游戏服务器、mysql数据库。

● 一台虚机安装了wow-auth登录认证系统及其依赖;两台或多台虚拟机安装mysql数据库及其依赖;三台或多台虚机安装wow-world游戏服务器及其依赖。在当前的架构下,如果有多个游戏服,需要多台虚机来安装。这就引发了这个架构带来的关键问题:部署重,需要准备多台虚拟机,并为每个虚拟机装上不同组件所需的依赖包。

● 扩展差,伸缩困难,维护成本高:新增服务器时,需增加新的虚拟机,再安装游戏服。且多台虚拟机维护十分复杂。

● 升级困难:每次升级需要多台虚拟机逐台配置升级,耗时久且容易出错。

针对该游戏架构,建议做如下修改:

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 20

图 2-4 游戏新架构

如图2-4,将游戏的三个组件(wow-auth登录认证系统、wow-world游戏服务器、mysql数据库)分别容器化,部署在虚拟机中。实现如下优势:

说明

在本demo中,用了mysql作为数据库,并对mysql也做了容器化的改造。在真实商用时,请根据自身业务选择数据库。

● 部署轻便:将游戏的三个组件分别制作为容器镜像,并将镜像上传到容器镜像仓库中。通过CCE云容器引擎可以直接基于该镜像部署容器应用。

● 扩展性好,伸缩迅速:当需要新增游戏服时,再启动一个容器即可。容器可实现秒级启动。

● 升级方便:升级时更换镜像即可快速升级。且CCE支持滚动升级,在升级时无需中断业务。

2.4 步骤一:游戏应用分析在游戏应用部署前,您需要了解需要部署的应用组件,以及各组件之间的关联关系。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 21

图 2-5 游戏 demo 架构

该游戏由四个部分组成:前台的游戏客户端,用户直接访问该客户端。后台有三个组件:mysql数据库、认证系统以及游戏服务器,下表讲解了各组件的说明,以及互相的关联关系。

表 2-2 了解应用环境

类别 说明

应用组件

● 前台:游戏客户端 游戏客户端会提前准备好,用户直接下载该客户端安装游戏。

● 后台:数据库(mysql)

存储游戏数据。

● 后台:游戏认证系统(wow-auth)

主要负责游戏用户登录认证。

● 后台:游戏服务器(wow-world)

游戏大厅。

各组件之间的关系

● wow-auth和wow-world都需要连接mysql数据库,将数据存储到数据库中,本例中通过环境变量的方式连接。

● wow-auth需要连接wow-world,在认证系统确认登录后连接到游戏大厅,本例中通过环境变量的方式连接。

2.5 步骤二:准备环境部署游戏应用前,您需要准备硬件以及华为云的环境,主要包括以下内容:

● 硬件环境:您需要准备一台带有显卡的Windows机器,硬盘至少20G,用于运行游戏客户端。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 22

说明

若您不需要运行游戏,仅需了解该游戏的部署过程,可以不需要准备Windows机器。

● 上传游戏应用镜像:该游戏demo包含三个组件:wow-auth登录认证系统、wow-world游戏服务器、mysql数据库。CCE支持一键部署mysql数据库,无需用户自己制作容器镜像再部署。用户需要准备两个镜像,即:wow-auth登录认证系统、wow-world游戏服务器。

说明

在本教程中,这两个组件的镜像已制作完成,用户可直接下载使用,无需自行制作。若需要了解制作镜像的通用方法,请阅读1 企业管理应用容器化改造(ERP)中关于镜像制作的详细介绍。

硬件环境

您需要准备一台带有显卡的Windows机器,硬盘至少20G,用于运行游戏客户端。

上传游戏应用镜像

从图2-4中可以看出,该游戏demo包含三个组件:wow-auth登录认证系统、wow-world游戏服务器、mysql数据库。

CCE支持一键部署mysql数据库,无需用户自己制作容器镜像再部署。用户需要自行制作两个镜像,即:wow-auth登录认证系统、wow-world游戏服务器。

说明

在本教程中,这两个组件的镜像已制作完成,用户可直接下载使用,无需自行制作。若需要了解制作镜像的通用方法,请阅读1 企业管理应用容器化改造(ERP)中关于镜像制作的详细介绍。

步骤1 购买华为云的弹性云服务器,用于下载并上传镜像。

1. 登录管理控制台,在左上方区域中选择华北-北京一。

2. 在服务列表中,选择“计算 > 弹性云服务器 ECS”,单击页面右上角的“购买弹性云服务器”。

3. 设置购买弹性服务器的参数,除表2-3中参数需要设置外,其余参数保持默认。

表 2-3 购买弹性云服务器

参数 参数说明

计费模式 为节省费用,建议选择“按需付费”,在部署完成后清除资源。

镜像 在公共镜像中,建议选择Ubuntu 16.04 server 64bit(40GB),与编译游戏游戏选用的操作系统保持一致。

登录方式 请设置密码,安全等级建议设置较高级。

云服务器名称 可以不修改,本例修改为ecs-test。

4. 配置完成后,单击“立即购买”。规格确认后,根据界面提示,单击“提交申

请”。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 23

5. 创建成功后,在弹性云服务器列表中可查看到已创建成功的弹性云服务器,状态为“运行中”。

6. 单击“IP地址”栏中弹性公网右侧的 ,获取弹性IP地址。

图 2-6 获取弹性 IP 地址

步骤2 使用远程登录工具,例如Xshell登录弹性云服务器。

ssh root@弹性云服务器弹性IP地址

步骤3 执行如下命令,安装docker。

curl -fsSL get.docker.com -o get-docker.sh

sh get-docker.sh

等待大概5分钟左右,docker安装完成。

步骤4 登录容器镜像服务控制台。单击左侧导航的“我的镜像”,单击右侧“客户端上传”,在Step2中,单击“生成临时docker login指令”。复制该指令到节点上执行。

图 2-7 生成临时 docker login 指令

回显如下表示已认证成功。Login Succeeded

步骤5 针对游戏demo,已提前准备了四个镜像,wow-auth认证系统(5.0和5.1版本)和wow-world游戏服务器(5.0和5.1版本)。各准备两个版本是为了演示后续的升级操作。请执行如下命令拉取镜像到本地:

说明

镜像较大,预计需要耗时5-10分钟,请耐心等待。

docker pull swr.cn-north-1.myhuaweicloud.com/wow/wow:wowauth-5.0

docker pull swr.cn-north-1.myhuaweicloud.com/wow/wow:wowworld-5.0-withmap

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 24

docker pull swr.cn-north-1.myhuaweicloud.com/wow/wow:wowauth-5.1

docker pull swr.cn-north-1.myhuaweicloud.com/wow/wow:wowworld-5.1-withmap

步骤6 查看镜像。

docker images

步骤7 上传wowauth-5.0镜像到容器镜像仓库。

docker tag [镜像名称:版本名称] swr.cn-north-1.myhuaweicloud.com/[组织名称]/[镜像名称:版本名称]

样例如下:

说明

其中gametest为组织名称,需确保全局唯一。若在容器镜像中已创建组织,建议选择已有组织的名称。

docker tag swr.cn-north-1.myhuaweicloud.com/wow/wow:wowauth-5.0registry.cn-north-1.huaweicloud.com/gametest/wow:wowauth-5.0

docker push swr.cn-north-1.myhuaweicloud.com/gametest/wow:wowauth-5.0

请按相同的方法分别上传镜像:wowauth-5.1、wowworld-5.0-withmap、wowworld-5.1-withmap。

步骤8 登录容器镜像服务控制台,单击左侧导航栏中“我的镜像”,单击镜像名称wow,可查看到已有四个镜像版本。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 25

图 2-8 我的镜像

----结束

2.6 步骤三:部署游戏应用在本章节中,您将会把游戏应用部署到CCE云容器引擎中,您需要执行以下操作:

1. 创建集群:集群是运行应用的逻辑分组,包含一组云服务器资源,每个节点对应一台云服务器。首次使用CCE时,您需要创建一个初始集群,并添加一个节点。

2. 部署mysql数据库:通过CCE的容器模板,可一键式部署专业的分布式mysql服务。

3. 部署wow-auth认证系统:您将会把wow-auth认证系统部署到CCE云容器引擎中。

4. 部署wow-world游戏服务器:您将会把wow-world游戏服务器部署到CCE云容器引擎中。

创建集群

集群是运行应用的逻辑分组,包含一组云服务器资源,每个节点对应一台云服务器。首次使用CCE时,您需要创建一个初始集群,并添加一个节点。

步骤1 创建集群前,您需要创建虚拟私有云和密钥对。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 26

说明

若您已有虚拟私有云和密钥对,可重复使用,无需多次创建。

表 2-4 准备环境列表

序列

类别 操作步骤

1 创建虚拟私有云

您需要创建虚拟私有云,为CCE集群提供一个隔离的、用户自主配置和管理的虚拟网络环境。

若您已有虚拟私有云,可重复使用,无需多次创建。

1. 登录管理控制台。

2. 在服务列表中,选择“网络 > 虚拟私有云”。

3. 在“总览”界面,单击“创建虚拟私有云”。

4. 根据界面提示创建虚拟私有云。如无特殊需求,界面参数均可保持默认。

2 创建密钥对 您需要新建一个密钥对,用于远程登录节点时的身份认证。若您已有密钥对,可重复使用,无需多次创建。

1. 登录管理控制台。

2. 在服务列表中,选择“计算 > 弹性云服务器”。

3. 选择左侧导航中的“密钥对”,单击“创建密钥对”。

4. 输入密钥对名称后,单击“确定”。

5. 在弹出的对话框中,单击“确定”。请根据提示信息,查看并保存私钥。为保证安全,私钥只能下载一次,请妥善保管,否则将无法登录节点。

步骤2 登录CCE控制台,在总览页面,单击右侧界面的“购买Kubernetes集群”。

步骤3 输入集群名称cluster-wow,其余参数保持默认,单击“下一步”。

步骤4 配置添加节点的参数。除网络和登录外,其余参数保持默认。

● 节点规格:CPU为4核,内存为8GB。

说明

此规格为部署该游戏demo的最小资源,只能装一个游戏服务器,如需要部署更多服务器,需要扩容节点或选择更高规格的节点。

● 弹性IP:选择“现在购买”,将节点设为可被互联网访问,其余参数保持默认。

说明

选择立即购买时,请注意界面提示“您还可以购买X个弹性IP”。若弹性IP不足,请根据界面提示扩容弹性IP配额。

● 登录方式:选择表2-4中已创建的密钥对,用于登录节点的密钥。

步骤5 单击“立即购买”。查看订单详情无误后,单击“提交”。

集群创建预计需要6-10分钟。请根据界面提示查看集群创建过程。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 27

步骤6 单击“资源管理 > 节点管理”,查看到节点状态为“可用”,弹性IP已绑定。

----结束

部署 mysql 数据库

通过CCE的容器模板,可一键式部署专业的分布式mysql服务。在本例游戏demo中,您只需为wow-auth认证系统和wow-world游戏服务器申请一个mysql服务。若是真实业务,请根据业务需求来部署数据库服务。

步骤1 登录CCE控制台。

步骤2 在左侧导航栏中,单击“模板市场 > 官方模板”,单击“mysql-ndb”下的“安装”。

说明

单击mysql-ndb可以查看该模板的简介和架构。

图 2-9 安装 mysql-ndb

步骤3 设置数据库的基本信息。

● 模板实例名称:自定义名称,例如为wow-mysql。

● 当前模板:mysql-ndb,不可修改。

● 模板版本:1.0.0。

● 部署集群:选择创建集群中创建的集群。

● 命名空间:根据业务需要选择命名空间。

● 部署工作负载规格:选择1X。

● 数据库名称:clustertest。

● 数据库普通用户名称:trinity。此名称是在镜像中设定好的。

● 数据库普通用户登录密码:trinity。此密码是在镜像中设定好的。

● 管理员权限密码:请保持默认。

步骤4 单击“一键安装”,查看订单无误后,单击“提交订单”。

单击“返回模板实例列表”,在“模板实例”中可查看到wow-mysql应用已安装成功。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 28

步骤5 单击wow-mysql名称,可看到mysql的3个实例,待状态为“运行中”,表示mysql创建成功。大约需要5分钟创建成功,请耐心等待。

● wow-mysql-mgmd:MySQL的管理工作负载,主要作用是管理mysql的其它组件。

● wow-mysql-ndbd:负责存储数据。

● wow-mysql-mysqld:是使用NDBCLUSTER存储引擎的传统MySQL服务器。该实例用于从数据应用层访问MySQL应用数据。

步骤6 单击wow-mysql-mysqld名称,进入详情页面。单击“访问方式”页签,获取并记录“访问地址”。

图 2-10 获取访问地址

----结束

部署 wow-auth 认证系统

您将会把wow-auth认证系统部署到CCE云容器引擎中。在部署过程中,wow-auth认证系统将通过环境变量的方式连接mysql数据库,以及wow-world游戏服务器。

步骤1 登录CCE控制台。

步骤2 在CCE左侧导航栏中选择“工作负载 > 无状态负载 Deployment”,单击“创建无状态工作负载”。

说明

在本例游戏demo中,认证系统和游戏服务器都是无状态工作负载,若真实业务是有状态工作负载,一般建议改造为无状态工作负载。以下是无状态工作负载和有状态工作负载的区别:

● 无状态工作负载:在运行中始终不保存任何数据或状态的称为“无状态工作负载”,例如nginx。

● 有状态工作负载:在应用运行过程中会保存数据或状态的称为“有状态工作负载”。例如Mysql,它需要存储产生的新数据。

步骤3 配置工作负载基本信息。

● 工作负载名称:自定义名称,例如wow-auth。

● 集群名称:选择创建集群中创建的集群。

● 命名空间:保持默认。

● 实例数量:建议配置为1,否则资源会不够用。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 29

● 工作负载描述:可不填写。

步骤4 单击“下一步:容器设置”,单击“添加容器”选择镜像,搜索wow,选择wowauth-5.0版本的镜像。

步骤5 其余参数保持默认,请单击容器规格下的“自定义配额”,设置该组件需要的规格。设置完成后,选择0.5X的规格。

说明

计算资源根据应用本身所需设置,本例游戏的wow-auth组件至少需要0.5 Core的CPU,和0.5GiB的内存。

图 2-11 自定义配额

步骤6 展开“环境变量”,配置环境变量,用于连接数据库,以及连接wow-world游戏服务器。

说明

下表中的环境变量都是在镜像中提前设定好的。若不清楚如何配置,请参见部署游戏应用时,环境变量值如何获取?获取对应值。

表 2-5 设置环境变量

变量名称 变量说明 变量/变量引用(示例)

mysqlip 变量值请填写步骤6中获取的数据库访问地址。

10.247.59.224//10.247.130.188

mysqlrootpasswd

数据库管理员权限密码,与步骤3中的管理员权限密码保持一致。

-

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 30

变量名称 变量说明 变量/变量引用(示例)

biboaddress

游戏服务器外部访问地址,可以选择弹性IP方式,或者负载均衡。本例使用弹性IP方式。请选择步骤6中的弹性IP地址。

10.3.2.119

biboport 游戏服务器外部访问端口,需要预先自定义定义设置一个值,范围为30000-32767。

说明该值必须确保在当前集群中全局唯一。本例为了操作方便,指定固定值来连接游戏服务器。若部署真实业务,建议在制作镜像时明确依赖关系。

32500

步骤7 单击“下一步:工作负载访问设置”,单击“添加服务”,设置应用的外部访问方式。

图 2-12 添加服务

● 访问类型:选择“节点访问 ( NodePort )”。

● 服务名称:可以和应用名称保持一致,例如设置为wow-auth。

● 服务亲和:本例选择“集群级别”。

– 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。

– 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。

● 端口配置:

– 协议:设置为TCP协议。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 31

– 容器端口:认证系统的监听端口,本例监听端口为3724。镜像中已写3724,此数据不可填写其它值。

– 访问端口:容器端口映射到节点私有IP上的端口,设置为自动生成。

步骤8 单击“确定”。

步骤9 单击“下一步”,高级设置不需要设置,单击“创建”。

系统跳转到工作负载页面,大概1分钟左右可创建成功。

----结束

部署 wow-world 游戏服务器

您将会把wow-world游戏服务器部署到CCE云容器引擎中。在部署过程中,wow-world认证系统将通过环境变量的方式连接mysql数据库。

步骤1 登录CCE控制台。

步骤2 在CCE左侧导航栏中选择“工作负载 > 无状态负载 Deployment”,单击“创建无状态工作负载”。

步骤3 配置工作负载基本信息。

● 工作负载名称:自定义名称,例如为wow-world。

● 集群名称:选择创建集群中创建的集群。

● 命名空间:保持默认。

● 实例数量:建议配置为1,否则资源会不够用。

● 工作负载描述:可不填写。

步骤4 单击“下一步”,单击“添加容器”选择镜像,搜索wow,选择wowworld-5.0-withmap版本的镜像。

步骤5 容器规格请设置如下。计算资源根据应用本身所需设置,本例游戏的wow-world组件至少需要2 Core的CPU,和2GiB的内存。

图 2-13 自定义配额

步骤6 设置环境变量,用于连接数据库。环境变量说明如表2-6。

说明

若环境变量不清楚如何配置,请参见部署游戏应用时,环境变量值如何获取?查看如何配置。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 32

表 2-6 设置环境变量

变量名称 变量说明 变量/变量引用(示例)

mysqlip 变量值请填写数据库访问地址。 10.247.59.224

mysqlrootpasswd

数据库管理员密码,与步骤3中设置的管理员权限密码一致。

-

步骤7 单击“下一步”,单击“添加服务”,设置工作负载的外部访问方式。

● 访问类型:选择“节点访问 ( NodePort )”。

● 服务名称:可以和工作负载名称保持一致,例如设置为wow-world。

● 服务亲和:本例选择“集群级别”。

– 集群级别:集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。

– 节点级别:只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。

● 协议:设置为TCP协议。

● 容器端口:游戏服务器的监听端口,配置为8085。由于镜像中已写该端口,请不要修改。

● 访问端口:指定端口,需要与部署认证系统时环境变量中指定的biboport值保持一致。若未记录,可参照部署游戏服务器时,访问端口如何获取?获取。

步骤8 单击“确定”。

步骤9 单击“下一步”,高级设置不需要设置,单击“创建”。

系统跳转到工作负载页面,大概1分钟左右工作负载可创建成功。

----结束

2.7 步骤四:运行游戏在本章节中,您将运行已部署好的游戏,登录游戏客户端。

前提条件

已准备好Windows机器,硬盘至少20G,且必须安装有显卡。

操作步骤

步骤1 登录Windows服务器。

步骤2 下载wow游戏客户端,本示例匹配的版本号为:wow_cn_3.3.5.13930,第三方下载链接(该链接仅做参考)。

步骤3 获取服务器地址,以及wow-auth的服务端口。

● 服务器地址:节点的弹性IP地址,请登录CCE控制台,单击左侧导航栏“资源管理> 节点管理”,查看弹性IP地址。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 33

图 2-14 获取弹性 IP 地址

● wow-auth的服务端口:选择CCE左侧导航栏的“工作负载 > 无状态负载Deployment”,单击wow-auth名称,进入详情页面,选择“访问方式”页签,获取其服务端口。

步骤4 配置客户端。

打开游戏客户端中的realmlist.wtf文件,配置入服务器服务信息:

SET realmlist 服务器地址:wow-auth的服务端口

样例如下:

SET realmlist 10.4.10.211:31739

步骤5 双击客户端程序wow,进入游戏。

步骤6 您在真实部署游戏应用时,请对接注册的接口并使用帐户登录,以便验证功能是否正常。

----结束

2.8 步骤五:伸缩游戏应用使用CCE云容器引擎可轻松伸缩容器实例,本章节以wow-auth为例,演示手动伸缩和弹性伸缩。

手动伸缩

步骤1 登录CCE控制台,选择左侧导航栏的“工作负载 > 无状态负载 Deployment”,单击wow-auth名称,进入详情页面。

步骤2 选择“伸缩”页签,单击手动伸缩下的 ,将实例数修改为2,单击“保存”。

图 2-15 手动伸缩

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 34

步骤3 切换到详情页面的“实例列表”页签,可查看到新的实例正在创建中,预计秒级创建

完成,若状态未刷新,请单击右侧的 刷新状态。实例状态为“运行中”。

----结束

弹性伸缩

步骤1 登录CCE控制台,选择左侧导航栏的“工作负载 > 无状态负载 Deployment”,单击wow-auth,进入详情页面。

步骤2 选择“伸缩”页签,单击“弹性伸缩”下的“添加伸缩策略”。

CCE提供灵活的秒级弹性伸缩能力,保障业务的高稳定性,提升用户体验。同时减少资源预留,可节省投资数百万。根据游戏特征,CCE提供了灵活的弹性伸缩策略,可自由组合使用。

表 2-7 灵活的弹性伸缩策略

弹性伸缩策略建议 说明

周期策略 以某天某游戏的数据为例,午后和晚上达到峰值。

建议采用“周期策略”,比如在2018年1月1日到2019年1月1日,在每天13:00,增加100个实例。

告警策略 一款新游戏上线,无法确定玩家数量,可能会出现大量玩家瞬间涌入,或无人问津。无法根据现有经验来预留适合数量的机器。

建议采用“告警策略”,比如当CPU/内存超过70%时,增加1个实例;当CPU/内存低于40%时,减少1个实例。

定时策略 游戏中活动频繁,在活动之前配置好“定时策略”,比如8月8日的12点,增加100个实例。

步骤3 以告警策略为例,演示弹性伸缩的过程。下图的策略指在CPU大于70%时,增加一个实例。

图 2-16 告警策略

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 35

● 策略名称:自定义名称,例如为policy-01。

● 指标:选择CPU使用率

● 策略类型:告警策略

● 触发条件:CPU使用率的平均值大于70%。

● 监控周期:指标统计周期。单击下拉选项进行选择。若设置为60秒,表示每60秒统计一次。

● 连续周期:若设置为1,表示若指标数据连续1个统计周期达到了设定的阈值,则触发策略动作。

● 执行操作:增加1个实例。

步骤4 配置完成后,单击确定。在弹性伸缩下,会出现这个策略。当CPU使用率平均值>70%,连续满足1次后触发该策略。

----结束

2.9 步骤六:升级游戏应用游戏特性需求快,版本变更频繁,升级效率以及升级过程中的用户体验至关重要。

CCE提供滚动升级策略,对各个实例逐个进行单独更新,而非同时对所有实例进行全部更新的方式,确保升级过程中业务不中断。

本章节以wow-auth为例,演示应用的滚动升级。

前提条件

请确保当前待升级的工作负载至少有2个实例。建议在手动伸缩到2个实例后,再进行升级操作。

操作步骤

步骤1 登录CCE控制台。

步骤2 在左侧导航栏中,单击“工作负载 > 无状态负载 Deployment”,单击wow-auth名称,进入详情页面。

步骤3 选择“更新升级”页签。工作负载在创建时,系统会默认为滚动升级。

步骤4 容器化之后,升级非常简单,只需要更换镜像即可。单击“更换镜像”,选择“wowauth-5.1”,单击“确定”。

图 2-17 更换镜像

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 36

步骤5 单击页面右下角的“提交”,在弹出的升级窗口中,单击“确定”。

系统自动跳转到“实例列表”页签,可看到在新创建一个实例,再停止一个实例,始终保证有实例正在运行,保障升级时业务始终不中断。

图 2-18 滚动升级

步骤6 单击右侧的 ,可查看到两个实例都在运行状态,表示已升级成功。

----结束

2.10 步骤七:清除资源您已经完成了游戏应用的部署。节点和应用运行过程中会产生费用,建议您参照本章节创建应用后,删除应用和节点,避免费用产生。

操作步骤

步骤1 删除应用。

1. 登录CCE控制台。

2. 单击左侧导航栏的“工作负载 > 无状态负载 Deployment”。

3. 在“无状态负载 Deployment”页面中,分别单击wow-auth、wow-world后的“更多>删除”。根据系统提示删除工作负载。

4. 在“有状态(StatefulSet)”页面中,分别单击wow-mysql-mgmd、wow-mysql-ndbd、wow-mysql-mysqld后的“删除”。根据系统提示删除工作负载。

步骤2 删除集群资源。

1. 登录CCE控制台。

2. 单击左侧导航栏的“资源管理 > 集群管理”。

3. 单击待删除集群后的“删除集群”,根据系统提示删除集群。

步骤3 删除安装docker的弹性云服务器资源。

1. 登录ECS控制台。

2. 选择新建的ecs-cy服务器,单击该服务器后的“更多 > 删除”,勾选“释放云服务器绑定的弹性IP地址”和“删除云服务器挂载的数据盘”,单击“确定”,根据界面提示删除ECS。

----结束

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 37

2.11 FAQ

部署游戏应用时,环境变量值如何获取?

步骤1 登录CCE控制台。

步骤2 在左侧导航栏,选择“工作负载 > 有状态(StatefulSet)”。

步骤3 单击“wow-mysql-mysqld”工作负载,进入工作负载详情。

步骤4 选择“访问方式”页签,环境变量中mysqlip对应的值请参见图2-19。

图 2-19 数据库访问地址

步骤5 选择“更新升级”页签,mysqlrootpasswd对应的值请参见图2-20中MYSQL_ROOT_PASSWORD对应的值。

图 2-20 数据库管理员密码

步骤6 在CCE控制台左侧导航栏中,选择“资源管理 > 节点管理”,查看创建集群中创建节点的弹性IP。biboaddress对应的值即该弹性IP地址。

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 38

图 2-21 弹性 IP 地址

----结束

部署游戏服务器时,访问端口如何获取?

步骤1 在CCE控制台左侧导航栏中,选择“工作负载”,单击wow-auth名称,进入详情页面。

步骤2 选择更新升级页签,展开高级设置,查看biboport端口号。

图 2-22 获取访问端口

----结束

云容器引擎最佳实践 2 游戏应用容器化部署(WOW)

文档版本 01 (2020-02-24) 版权所有 © 华为技术有限公司 39