利用sevicestage部署Python Flask应用
利用sevicestage部署Python Flask应用
ServiceStage是面向企业的应用管理与运维平台,提供应用开发、构建、发布、监控及运维等一站式解决方案,支持Java、Go、PHP、Node.js、Docker、Tomcat、ServiceComb及Spring Cloud等运行环境,让企业应用上云更简单。
下面以其中一个解决方案来试着操作一下,如下图是web应用解决方案。
环境部署
首先从混合云ManageOne的首页菜单进入servicestage控制台,
创建集群
在左侧的基础设施页签下点集K8S集群(CCE)进入,Kubernetes集群管理页面,点击右上角创建Kubernetes集群以创建集群。在弹出的选择集群类型中按需求选择创建的环境类型,这里我们选择创建鲲鹏集群。
点击后页面会跳转到CCE集群的创建集群页面,输入想要创建的集群名称,以及VPC及子网,这里建议创建一个单独的VPC进行隔离。点击下一步:创建节点。
创建节点选择现在添加,并按实际情况选择region和可用区,节点规格按实际需求进行添加,这里我们选择2U4G的规格以节约资源。按需求选择操作系统(鲲鹏集群默认使用EulerOS 2.8)以及是否使用弹性IP,登陆方式选择为密码,再最下方选择节点创建数量,这里选择3个。点击下一步:安装插件。
插件只选择安装必选的coredns以及storage-driver就好,这里直接点击下一步:配置确认。再次确认后点击提交。
创建成功后的集群可以在CCE云容器引擎>资源管理>集群管理下进行管理。我们可以在这里对集群进行管理,比如安装插件,创建节点,休眠或者删除集群。也可以使用命令行工具对集群进行管理。
创建环境
集群创建成功后,返回servicestage控制台,在之前的基础设施中应该可以看到创建中/可用的集群。在servicestage控制台左侧的页签点集环境管理,点击左上角的创建环境以创建一个环境。
环境是用于应用部署和运行的计算、存储、网络等基础设施的集合,环境内网络互通。 我们可以把相同VPC下的CCE集群加上多个ELB、RDS、DCS实例组合为一个环境,如:开发环境、测试环境、预生成环境、生产环境。支持用户按环境维度来管理资源部署服务,减少具体基础设施运维管理的复杂性。
填写环境名称,并在基础资源中点选之前创建的集群资源,可选资源中可以选择已经创建的ELB、EIP等资源。这里我们选择一个ELB以及一个EIP资源,点集立即创建,创建一个环境。
创建好的环境可以在环境管理页面看到,
创建应用
应用是一个功能相对完备的业务系统,由一个或多个特性相关的组件组成。如我们把天气预报作为一个应用,包含weather和forecast两个组件。以应用维度组织多个组件,支持应用的全链路灰度发布和在不同环境的快速克隆。
在servicestage左侧导航栏中点集应用管理,进入应用列表,点集右上角的创建应用。
创建组件
应用组件是组成应用的某个业务特性实现,以代码或者软件包为载体,可独立部署运行。如天气预报系统里面的forecast组件。集成构建、流水线,支持组件在多环境的持续发布;集成契约定义、发布管理,支持契约生成代码、契约校验。
在应用管理页面点击刚刚创建的应用,进入应用管理页面,点击组件列表可以看到本应用下已经创建好的组件。点集新增组件来创建一个新的组件。
在选择组件类型页面选择通用型组件,因为我们暂时无法为应用组件绑定域名,所以无法创建Web组件。
在跳转页面填写组件名称,并选择Docker为服务框架。确认后点击创建。
到此组件就创建好了,但是组件中还没有部署相关的服务,我们需要先利用容器镜像服务SWR制作并上传我们的服务镜像。
制作并上传镜像
制作镜像需要在一台安装有Docker的虚拟机上进行制作,这里可以直接使用CCE集群所创建的节点,这样可以方便的登陆SWR的镜像仓库,进行pull/push操作,但是由于我们要制作的是python镜像,其中的一些包的依赖在官方的EulerOS的yum源中没有,我们这里演示选择一台CentOS的虚拟机来制作镜像。
项目的结构如图所示
首先登陆节点,获得root权限,
# 创建workdirmkdir flask-democd flask-demo# 创建工程文件touch flask-demo/start.py flask-demo/Dockerfile flask-demo/requirements.txt flask-demo/gunicorn.conf.py
start.py 是flask工程的启动文件,这里简单的做一个示例
#start.pyfrom flask import Flask app = Flask(__name__)@app.route('/')def hello(): return "hello docker&flask"if __name__ == '__main__': app.run(debug=True)
requiremtnts.txt是工程依赖的包,
gunicorn gevent click==7.1.2Flask==1.1.2itsdangerous==1.1.0Jinja2==2.11.2MarkupSafe==1.1.1Werkzeug==1.0.1
gunicorn.conf.py是gunicorn的配置文件,
workers = 5 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量bind = "0.0.0.0:80"
Dockerfile是构建Docker镜像用的
FROM python:3.6WORKDIR /Project/demo COPY requirements.txt ./RUN pip install -r requirements.txt COPY . .CMD ["gunicorn", "start:app", "-c", "./gunicorn.conf.py"]
其中,第二行 WORKDIR 后面写的是要部署到服务器上的路径,最后一行里面的 start 是我们上面写的 python 启动文件名,app 是启动文件里面要启动的应用名(变量名)
完成这两个文件的创建之后,执行如下命令,就可以开始构建Docker镜像:
sudo docker build -t 'flask-demo' .
需要注意的是这个过程需要一点时间,因为它有几百兆。 构建完成之后,通过如下命令查看镜像列表,可以发现 flask-demo显示在其中:
sudo docker images
接下来可以使用SWR的的镜像仓库,将镜像push上去,
客户端上传的操作适用于CCE集群内的节点,这里我们使用另一种方法
docker save flask-demo > flask-demo.tar
然后通过xftp传到本地后再上传到SWR镜像仓库。
部署组件
打开servicestage应用的组件列表,在之前创建的组件的操作栏点击部署,在组件配置中选择我们刚刚制作好的镜像flask-demo,确认规格后点击创建。
创建成功的组件会应用管理组件下的环境视图中看到。点击该视图的外部访问地址的设置,进行对组件的访问设置。
点击添加服务并按如下内容设置,容器端口是组件内Docker服务的端口,这里gunicorn设置的是80,访问端口是外部浏览器访问服务的端口。
注意ELB负载均衡会占用80端口,所以访问端口不能填80,这里我们选择8080。
点击确定,并访问服务地址,出现如下内容则表明服务部署成功。
总结
servicestage+cce+swr的组合拳提供了简单易用的部署和监控服务,集群的弹性伸缩功能可以帮助应用更加高效节能的应对高并发的业务场景。
- 点赞
- 收藏
- 关注作者
评论(0)