天翼云竞赛 (服务上云) 天翼云访问地址:https://console.ctyun.cn
简介 比赛当天要使用的服务:弹性云主机、虚拟私有云、弹性IP、弹性负载均衡、对象存储、函数计算等服务,部署业务系统
初赛部分试题与培训文档 参考文档:下载
决赛部分试题资料 参考文档:下载
实操部分 第一步:创建 虚拟私有云的 VPC 和 子网 1 2 3 4 5 6 注意: ① 虚拟私有云都是 华东1 ② 配置VPC的名称 ③ VPC的网段(IPV4) 192.168.0.0/16 ④ 创建 VPC 的同时,会创建一个子网 ⑤ 数据库创建比较慢,所以比赛时VPC创建完成后建议创建数据库
第二步:安全组配置
配置入方向规则
配置出方向规则
第三步:弹性IP配置 比赛时候:弹性IP会提前给我们申请好
第四步:开启弹性云主机 注意:这边只列出选择配置时需要配置的选项,其他默认下一步即可。
比赛要求:
CPU架构: X86 计算
CPU核数: 2,内存:4GB
规格: 通用型
镜像
镜像类型: 公共镜像
镜像(视频中用的镜像): Ubuntu Server 22.04 64 位
比赛:会用到任意版本的 Linux,如果你想用 Windows 机器也可以用 Windows
所以比赛时,我会考虑用 OpenEuler
第五步:应配置 比赛会给一个 app-server1-demo 应用包
目前已知:改应用是一个单线程的程序
参考程序:下载
获取文件
将业务程序的文件下载下来 放到 opt 下,在 opt 下用 wget http://。。。 下载,若没有提供下载链接,是直接发到本地的话 app-server1-demo,那就本地下载后,再通过如下工具传到服务器上:
filelizia
winscp也可以
sftp
xshell的rzsz
添加执行权限
1 chmod +x app-server1-demo
查看应用包命令
生成配置文件生成示例并启动应用
1 2 ./app-server1-demo democonfig ./app-server1-demo democonfig >> config.json
程序启动
1 ./app-server1-demo start -config config.json
端口开放
测试访问应用
1 2 3 4 # 测试地址 curl http://218.193.144.69:7000 # 比赛用的链接 curl http://218.193.144.69:7000/calc?input=1
配置 systemd 自启动服务
1 2 # systemd 文件路径 /etc/systemd/system
systemd 配置文件(文件名:app-server1-demo.service)
1 如果想要一台机器上跑多个应用,需要注意更改 ExecStart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [Unit] Description=app-server1-demo Service Documentation=https://sevattal.github.io After=network-online.target Wants=network-online.target [Service] Type=simple User=root ExecStart=/opt/app-server1-demo start -config /opt/config.json ExecStop=/bin/kill -s QUIT $MAINPID Restart=always StandOutput=syslog StandError=inherit [Install] WantedBy=multi-user.target
通过 systemctl 启动
1 2 3 systemctl daemon-reload systemctl start app-server1-demo systemctl enable app-server1-demo
第六步:制作镜像
第七步:弹性负载均衡创建
添加监听器
添加后端主机
配置后端主机端口和权重
第八步 弹性伸缩配置 伸缩配置
弹性行伸缩组配置
第九步 将负载均衡器的弹性 IP 给评委 地址:http://{负载均衡器 弹性IP}:7000
打分机制:评委根据压测后的结果打分。
第十步 天翼云数据库部分(数据库创建比较慢,所以比赛时VPC创建完成后建议创建数据库)
为数据库建立专门的安全组
创建数据库
某台需要连接数据库的云主机安装 pg client 客户端
1 2 3 4 5 # ubuntu 安装客户端 apt install postgresql-client # open euler 安装客户端 yum install postgresql-devel
psql 命令登录数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 连接数据库 psql -h 218.193.158.60 -p 5432 -U test -W testdb # 查看有内些数据库 \l # 切换库 \c {dbname} # 引用初始化脚本 \i /path/to/your/file.sql # 建立用户授权 create user test with password 'test123'; create database testdb with encoding='utf8' owner=test; grant all privileges on database testdb to test;
第十一步 天翼云对象存储部分 python SDK
参考文档:下载
python 安装
1 2 # 由于兼容了boto3 ,所以只要安装boto3即可 pip install boto3
获取 access_key 和 secret_key
终端节点地址获取
案例测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from boto3.session import Session import boto3 # access_key access_key = "" # secret_key secret_key = "" # ZOS 集群节点 url = "" session = Session(access_key, secret_key) s3_client = session.client("s3", endpoint_url=url) # Bucket 为桶的名称, Key 为文件名称 resp = s3_client.getobject(Bucket="bucket-179393974", Key="test.txt") data = resp['Body'].read() print(data)
第十二步 天翼云函数计算部分 部署比赛方给的 python 代码
对于代码的依赖,如 python,java 的话,需要在 "层" 那边建立好,然后在函数中引用该层即可引用依赖。
注意:只有函数只有配置了触发器才能再公网访问到
案例代码参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 import logging import os HELLO_WORLD = b'Hello world!\n' access_key = os.environ.get("ak", "341XVE9FEI4C8GFA4ZP7") def handler(environ, start_response): print("...Successfully entered user http function...") # 输出日志信息 logging.getLogger().info("using default user logger...") # 测试 evnrion 是否被正确解析 for key, value in environ.items(): if key.startswith('HTTP_'): # 对请求的信息进行处理 pass path = environ['PATH_INFO'] method = environ['REQUEST_METHOD'] body = environ["wsgi.input"].read() print("path:", path) print("method:", method) print("body:", body) if path == "/api/post" and method == "POST": # 返回响应 status = '200 0K' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [body] if method == "GET": # 返回相应 status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return ["你请求的路径是%s, 环境变量ak是%s"%(path, access_key)] # 返回相应 status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [HELLO_WORLD]
调用命令参考
1 2 3 4 5 # GET 请求 curl {函数地址}/111 # Post 请求 curl -d '要传输的信息' -X POST {函数地址}/api/post
第十三步 AOne 零信任客户端安装 地址:https://www.ctyun.cn/products/accessone?track=source_MK-medium_cpc-content_se1000686
说明
1 2 3 4 5 6 7 在某一台云服务器安装 docker 运行上面给出的 docker命令 ubuntu 安装docker 环境 apt install docker.io 运行上述的 docker 命令
添加应用配置
获取连接器的公网IP
vpc网段内的机器相互访问(配置安全组)
下载 AOne 零信任客户端
https://cdn.ctyun.cn/h5/ct0ftrust/index.html#/terminalManage/clientDownload?key=654112BF72E30E6AAE78A6FFF338BA29
nginx 反代 参考文档:下载
安装 nginx
nginx 负载均衡配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { upstream load_banance { #负载均衡方法,可选:least_conn,ip_hash等,不填写则为轮询方式; # 服务器的访问地址,最好使用服务器的私有IP以获得更好的性能和安全性。 server 127.0.0.1:7001; server 127.0.0.1:7002; } server { # 负载均衡的监听端口 listen 7000 default_server; listen [::]:7000 default_server; # 负载均衡服务器的服务名称,没有时填写 _ server_name _; location / { # 代理转发,注意这个load_banance要与 upstream 后的字符串相同 proxy_pass http://load_banance; } } }