Ctyun-Operate-Competition

天翼云竞赛 (服务上云)

天翼云访问地址: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
./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
ubuntu
ufw allow 7000

测试访问应用

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

1
apt install 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;
}
}
}
Contents
  1. 1. 天翼云竞赛 (服务上云)
    1. 1.1. 简介
      1. 1.1.1. 初赛部分试题与培训文档
      2. 1.1.2. 决赛部分试题资料
    2. 1.2. 实操部分
      1. 1.2.1. 第一步:创建 虚拟私有云的 VPC 和 子网
      2. 1.2.2. 第二步:安全组配置
      3. 1.2.3. 第三步:弹性IP配置
      4. 1.2.4. 第四步:开启弹性云主机
      5. 1.2.5. 第五步:应配置
      6. 1.2.6. 第六步:制作镜像
      7. 1.2.7. 第七步:弹性负载均衡创建
      8. 1.2.8. 第八步 弹性伸缩配置
      9. 1.2.9. 第九步 将负载均衡器的弹性 IP 给评委
      10. 1.2.10. 第十步 天翼云数据库部分(数据库创建比较慢,所以比赛时VPC创建完成后建议创建数据库)
      11. 1.2.11. 第十一步 天翼云对象存储部分
      12. 1.2.12. 第十二步 天翼云函数计算部分
      13. 1.2.13. 第十三步 AOne 零信任客户端安装
      14. 1.2.14. nginx 反代
|