本教程教大家通过阿里云服务器搭建一个由nginx做代理转发的javaweb系统,所有的请求通过nginx
转发到对应的tomcat下。
1、阿里云Ubuntu服务器一台
2、ssh远程连接工具
window下可以使用xshell,putty,securecrt。推荐使用xshell个人觉得比较方便。
Mac或者linux都可以直接使用控制台连接
3、下载安装所需要资源包(tomcat7,nginx1.6,nginx配置 linux环境证书更新脚本),把下载好的resource.zip上传到服务器上
本例中resource包放在 /home/resource下
resource.zip
在开始安装具体的软件前我们需要安装一些支持性环境或者软件,创建好文件夹。
1、更新apt-get命令
apt-get -y update
2、安装mysql依赖查询和其他所需要用到的程序
apt-get -y install unzip build-essential libncurses5-dev libfreetype6-dev libxml2-dev libssl-dev libcurl4-openssl-dev libjpeg62-dev libpng12-dev libfreetype6-dev libsasl2-dev libpcre3-dev autoconf libperl-dev libtool libaio*
3、清除防火墙设置
iptables -F
4、解压resource.zip,切换到resource文件夹中
unzip /home/resource.zip
5、更新ssl证书
./env/update_openssl.sh
6、创建所需要用到的文件夹,我们需要创建的文件结构如下
/home
|- www
|- java1.7 //java环境安装文件夹
|- tomcat7 // tomcat文件夹
|- nginx // nginx根目录
|-sites-enabled //nginx配置文件目录
|-log //日志文件目录
|- webresource
|- static //nginx文件上传目录
mkdir -p /home/www/tomcat7
1、安装tomcat
mv apache-tomcat-7.0.63 /home/www/tomcat7
2、安装java运行环境,命令的意思是下载jdk、解压jdk压缩文件、移动解压后的文件
wget
设置java环境变量
echo 'export JAVA_HOME=/home/www/java1.7' >> /etc/profile
3、安装ngix
创建文件夹,解压文件
touch /home/www/log/nginx/access.log
切换工作目录
cd /home/www/nginx/
开始安装
./configure
修改配置文件
cd /home/resource
启动nginx,我们在nginx的root路径下写入一个index.html文件然后启动nginx
touch /home/www/webresource/static/index.html
启动成功后你可以通过访问ip看到一个写着hellow的网站
配置nginx代理tomcat,我们在 /home/www/nginx/sites-enabled 文件下创建一个叫tomcat的文件,文件内容如下,表示nginx将代理www.test.com这个域名,并且转发到本地的tomcat监听端口下。
server {
4、mysql数据库安装
sudo apt-get -y install mysql-server
修改远程登录权限 ,mysql默认是不开启远程登录的,如要需要开启则需要修改配置
需要改动一下 /etc/mysql/my.cnf文件把#bind-address=127.0.0.1节点注释掉
注意最新版本mysql my.cnf中已经不再配置具体参数,而是分成了2个文件
#bind-address 需要在/etc/mysql/mysql.conf.d/mysqld.cnf中修改
修改完成后重启mysql
service mysql restart
创建mysql远程登录用户,给用户授权数据库管理权限。这里创建了一个testdb数据库,然后创建了一个用户,用户名为:testdb_user,密码为:testdbpassword。这个用户就可以远程登录mysql数据库了
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
5、安全软件
考虑到服务器端的安全问题,大家可以选择性的安装一些安全软件如安全狗,
wget
启动安全狗
service safedog restart
进入管理界面
sdui
久之前,小编就买了一年的阿里云服务器,也购买了域名,一直都没有时间,加上自己对linux的知识不足,最后小编终于把wordpress和tomcat同时部署在一个服务器上,
先简单说说阿里云的购买流程,如果你的域名不需要备案,只是能够访问那么简单的多,
wordpress部署部分
在阿里云部署购买云主机CES或轻应用服务器,
如果你在24岁以下,进行学生认证,那么一平均一个月9.9元,
在系统选择上,windows会有可视化的界面,不会linux的可以选择windows
想搭建自己的博客的可以选择wordpress;
只是部署java项目可以直接选择系统镜像的centos
域名购买
域名可以选择一个自己喜欢的,看一下不同的后缀名交流,查看一下价格
这里需要填写个人相关信息
并且通过实名认证
在控制台的域名就可看到自己购买的域名,选择解析,填写刚才购买服务器的ip地址就解析完成了
这时回到轻应用服务器列表,
按照图中的命令就可以进行操作,设置wordpress的站点信息,这里阿里云有完整的参考文档,这里我就不写了,可以参考这个文章
java项目部署
java项目部署需要tomcat jdk 和mysql 本地电脑与服务传递文件需要使用ftp,以及开启相关端口,在阿里云的安全组开启如图的安全规则,
使用远程连接工具链接阿里云:
ftp安装:
ftp的安装
这里小编一直没有使用安装上传文件成功过,
百度了ftp的文件的配置,执行了安装命令,使用Suceure File Transfer就可以进行文件上传
mysql安装
安装mysql:
依次运行一下命令
cd /tmpwget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql mysql-server mysql-devel -y
开启服务
systemctl start mysql.service
查看是否开启成功
netstat -anp|grep 3306
通过Yum安装的mysql的管理员账户是没有密码的, 如下命令设置为admin
mysqladmin -u root password admin mysql -uroot -padmin
创建一个用户
>insert into mysql.user(Host,User,Password) values("localhost","用户名",password("密码")); 赋予远程连接等权限 >grant all privileges on *.* to '用户名'@'%' identified by '密码';刷新权限flush privileges;
就可以使用mysql管理工具进行管理
在wordpress部署的时候,会默认安装mysql,所以我们就不需要自己再装mysql了
需要自己创建一个用户,赋予权限,不能修改默认的数据库密码,否则wordpress会链接不上数据库导致博客网页不能访问,
jdk安装
CentOS 7.3 可能会默认安装open jdk,如果没有的话,本地在oracle下载tar.gz格式的jdk
上传到服务器,复制到一个文件夹 解压然后
vim vim /etc/profile
在打开的文件最后一行,
加入#java environmentexport JAVA_HOME=/usr/java/安装的jdk目录export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarexport PATH=$PATH:${JAVA_HOME}/bin/etc/profile
还有就是在线安装
yum -y install java-1.8.0-openjdk.x86_64
接着运行
java -version
出现当前java版本即表示java安装成功了
tomcat安装
tomcat 也可以进行在线安装
cd /tmp wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.92/bin/apache-tomcat-7.0.92.tar.gz tar xzf apache-tomcat-7.0.92.tar.gz mv apache-tomcat-7.0.92 /usr/local/tomcat7 运行 /usr/local/tomcat7/bin/startup.sh 检查 netstat -anp|grep 8080
开启防火墙的8080端口 包括阿里云的安全组
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload #重启firewall
在浏览器进行测试
也可以在tomca官网下载linux的tomcat压缩包,上传到阿里云,解压启动服务开放端口
通过后就可以将自己的数据库导入阿里云的数据库,
将自己的java项目打包(打包前将连接参数修改)
复制到tomcat的webapps下,地址栏输入
ip:8080/项目名
就可以访问自己的项目了
如果不想要项目名.就将原来的ROOT删除,项目的war包重命名为ROOT
这里基本就配置完成,这里小编介绍的相对简单,有兴趣的可以参考
http://how2j.cn/k/deploy2linux/deploy2linux-breif/1591.html
这里有详细到命令的介绍
最后说一下小编遇到的问题
ftp上传文件问题:开始小编安装了ftp一直不能上传,最后使用了Suceure File Transfer就可以进行上传了
还有就是,开始小编使用在线安装,一直不成功最后使用了上传的方式安装成功
小编使用wordpress的数据库,输入mysql -u root - u 提示找不到命令,然后可能是环境变量找不到命令.在阿里云上找到了mysql的安装位置,创建一个软连接到/usr/bin目录下,解决
**不要轻易修改mysql的命令,否则会导致wordpress不能访问
多个项目部署到tomcat是,注意路径问题,存在访问路径添加项目名时,第一种方式;修改项目的所有请求路径,第二种,再创建一个tomcat 修改端口号
小编写的比较简单,配置过程中还要参考其他资料,大佬勿喷
多用户量大并发度高的应用系统为了避免发布过程中的流量有损,一般选择在流量较小的半夜发布,虽然这样做有效果,但不可控导致背后的研发运维成本对企业来说是一笔不小的负担。基于此,阿里云微服务引擎 MSE 在应用发布过程中,通过应用下线时进行自适应等待+主动通知,应用上线时就绪检查与微服务生命周期对齐+服务预热等技术手段所提供的微服务应用无损上下线功能,能有效帮助企业规避线上发布所出现的流量资损。
常见的流量有损现象出现的原因包括但不限于以下几种:
无损下线
其中的服务无法及时下线问题,如下图 1 所示:
图1. Spring Cloud 应用消费者无法及时感知提供者服务下线
对于 Spring Cloud 应用,当应用的两个实例 A’ 和 A 中的 A 下线时,由于 Spring Cloud 框架为了在可用性和性能方面做平衡,消费者默认是 30s 去注册中心拉取最新的服务列表,因此 A 实例的下线不能被实时感知,此时消费者继续通过本地缓存继续调用 A 就会出现调用已下线实例出现流量有损。
针对该问题,阿里云微服务引擎 MSE 基于 Java Agent 字节码技术设计实现的无损下线功能如下图 2 所示:
图2. 无损下线方案
在该套无损下线方案中,服务提供者应用仅需接入 MSE,相比一般的有损下线。应用在下线前会有一段自适应等待时期,该时期待下线应用会通过主动通知的方式,向其在自适应等待阶段发送了请求的服务消费者发送下线事件,消费者接收到下线事件后会主动拉取注册中心服务实例列表以便实时感知应用下线事件避免调用已下线实例造成应用下线流量有损。
无损上线
延迟加载是软件框架设计中最常见的一种策略,例如在 Spring Cloud 框架中 Ribbon 组件的拉取服务列表初始化时机默认是要等到服务的第 1 次调用时刻,例如下图 3 是 Spring Cloud 应用中第 1 次和第 2 次通过 RestTemplate 调用远程服务的请求耗时情况:
图3. 应用启动资源初始化与正常运行过程中耗时情况对比
由测试结果可见,第一次调用由于进行了一些资源初始化,耗时是正常情况的数倍之多。因此把新应用发布到线上直接处理大流量极易出现大量请求响应慢,资源阻塞,应用实例宕机的现象。针对该类大流量下应用资源初始化慢问题,MSE 提供的小流量预热功能通过调节刚上线应用所分配的流量帮助其在进行充分预热后再处理正常流量从而对新实例进行保护。小流量预热过程如下图 4 所示:
图4. 小流量服务预热过程 QPS 与启动时间关系图
除了针对上述应用第一次调用初始化慢所造成的有损上线问题,MSE 还提供了资源预建连接、延迟注册、确保 Kubernetes 就绪检查通过前完成服务注册和确保 Kubernetes 就绪检查通过前完成服务预热等一整套无损上线手段来满足各类不同应用的无损上线需求,整套方案如图 5 所示:
图5. MSE 无损上线方案
接下来将演示阿里云微服务引擎 MSE 在应用发布时提供的无损上下线和服务预热能力最佳实践。假设应用的架构由 Zuul 网关以及后端的微服务应用实例(Spring Cloud)构成。具体的后端调用链路有购物车应用 A,交易中心应用 B,库存中心应用 C,这些应用中的服务之间通过 Nacos 注册中心实现服务注册与发现。
前提条件
开启 MSE 微服务治理
准备工作
注意,本实践所使用的 Agent 目前还在灰度中,需要对应用 Agent 进行灰度升级,升级文档:
https://help.aliyun.com/document_detail/392373.html
应用部署在不同的 Region(暂时仅支持国内 Region)请使用对应的 Agent 下载地址:
http://arms-apm-cn-[regionId].oss-cn-[regionId].aliyuncs.com/2.7.1.3-mse-beta/
注意替换地址中的[RegionId],RegionId 是阿里云 RegionId。
例如 Region 北京 Agent 地址为:
http://arms-apm-cn-beijing.oss-cn-beijing.aliyuncs.com/2.7.1.3-mse-beta/
应用部署流量架构图
图6. 演示应用部署架构
流量压力来源
在 spring-cloud-zuul 应用中,如图 6 所示,其分别向 spring-cloud-a 的灰度版本和正常版本以 QPS 为 100 的速率同时进行服务调用。
部署 Demo 应用程序
将下面的内容保存到一个文件中,假设取名为 mse-demo.yaml,并执行 kubectl apply -f mse-demo.yaml 以部署应用到提前创建好的 Kubernetes 集群中(注意因为 demo 中有 CronHPA 任务,所以请先在集群中安装 ack-kubernetes-cronhpa-controller 组件,具体在容器服务-Kubernetes->市场->应用目录中搜索组件在测试集群中进行安装),这里我们将要部署 Zuul,A, B 和 C 三个应用,其中 A、B 两个应用分别部署一个基线版本和一个灰度版本,B 应用的基线版本关闭了无损下线能力,灰度版本开启了无损下线能力。C 应用开启了服务预热能力,其中预热时长为 120 秒。
# Nacos Server
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nacos-server
name: nacos-server
spec:
replicas: 1
selector:
matchLabels:
app: nacos-server
template:
metadata:
labels:
app: nacos-server
spec:
containers:
- env:
- name: MODE
value: standalone
image: registry.cn-shanghai.aliyuncs.com/yizhan/nacos-server:latest
imagePullPolicy: Always
name: nacos-server
resources:
requests:
cpu: 250m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
# Nacos Server Service 配置
---
apiVersion: v1
kind: Service
metadata:
name: nacos-server
spec:
ports:
- port: 8848
protocol: TCP
targetPort: 8848
selector:
app: nacos-server
type: ClusterIP
#入口 zuul 应用
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-cloud-zuul
spec:
replicas: 1
selector:
matchLabels:
app: spring-cloud-zuul
template:
metadata:
annotations:
msePilotAutoEnable: "on"
msePilotCreateAppName: spring-cloud-zuul
labels:
app: spring-cloud-zuul
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: LANG
value: C.UTF-8
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-zuul:1.0.1
imagePullPolicy: Always
name: spring-cloud-zuul
ports:
- containerPort: 20000
# A 应用 base 版本,开启按照机器纬度全链路透传
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a
name: spring-cloud-a
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-a
msePilotAutoEnable: "on"
labels:
app: spring-cloud-a
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: profiler.micro.service.tag.trace.enable
value: "true"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a
ports:
- containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20001
initialDelaySeconds: 10
periodSeconds: 30
# A 应用 gray 版本,开启按照机器纬度全链路透传
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a-gray
name: spring-cloud-a-gray
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a-gray
strategy:
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud -a
msePilotAutoEnable: "on"
labels:
app: spring-cloud-a-gray
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: profiler.micro.service.tag.trace.enable
value: "true"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a-gray
ports:
- containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20001
initialDelaySeconds: 10
periodSeconds: 30
# B 应用 base 版本,关闭无损下线能力
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-b
name: spring-cloud-b
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-b
strategy:
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-b
msePilotAutoEnable: "on"
labels:
app: spring-cloud-b
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: micro.service.shutdown.server.enable
value: "false"
- name: profiler.micro.service.http.server.enable
value: "false"
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-b
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20002
initialDelaySeconds: 10
periodSeconds: 30
# B 应用 gray 版本,默认开启无损下线功能
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-b-gray
name: spring-cloud-b-gray
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-b-gray
template:
metadata:
annotations:
alicloud.service.tag: gray
msePilotCreateAppName: spring-cloud-b
msePilotAutoEnable: "on"
labels:
app: spring-cloud-b-gray
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-b-gray
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
lifecycle:
preStop:
exec:
command:
- /bin/sh
- '-c'
- >-
wget http://127.0.0.1:54199/offline 2>/tmp/null;sleep
30;exit 0
livenessProbe:
tcpSocket:
port: 20002
initialDelaySeconds: 10
periodSeconds: 30
# C 应用 base 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-c
name: spring-cloud-c
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-c
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-c
msePilotAutoEnable: "on"
labels:
app: spring-cloud-c
spec:
containers:
- env:
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-c
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
livenessProbe:
tcpSocket:
port: 20003
initialDelaySeconds: 10
periodSeconds: 30
#HPA 配置
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-b
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-b
jobs:
- name: "scale-down"
schedule: "0 0/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 0/5 * * * *"
targetSize: 2
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-b-gray
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-b-gray
jobs:
- name: "scale-down"
schedule: "0 0/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 0/5 * * * *"
targetSize: 2
---
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: spring-cloud-c
spec:
scaleTargetRef:
apiVersion: apps/v1beta2
kind: Deployment
name: spring-cloud-c
jobs:
- name: "scale-down"
schedule: "0 2/5 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "10 2/5 * * * *"
targetSize: 2
# zuul 网关开启 SLB 暴露展示页面
---
apiVersion: v1
kind: Service
metadata:
name: zuul-slb
spec:
ports:
- port: 80
protocol: TCP
targetPort: 20000
selector:
app: spring-cloud-zuul
type: ClusterIP
# a 应用暴露 k8s service
---
apiVersion: v1
kind: Service
metadata:
name: spring-cloud-a-base
spec:
ports:
- name: http
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: spring-cloud-a
---
apiVersion: v1
kind: Service
metadata:
name: spring-cloud-a-gray
spec:
ports:
- name: http
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: spring-cloud-a-gray
# Nacos Server SLB Service 配置
---
apiVersion: v1
kind: Service
metadata:
name: nacos-slb
spec:
ports:
- port: 8848
protocol: TCP
targetPort: 8848
selector:
app: nacos-server
type: LoadBalancer
由于我们对 spring-cloud-b 跟 spring-cloud-b-gray 应用均开启了定时 HPA,模拟每 5 分钟进行一次定时的扩缩容。
登录 MSE 控制台,进入微服务治理中心->应用列表->spring-cloud-a->应用详情,从应用监控曲线,我们可以看到 spring-cloud-a 应用的流量数据:
gray 版本的流量在 pod 扩缩容的过程中请求错误数为 0,无流量损失。未打标的版本由于关闭了无损下线功能,在 pod 扩缩容的过程中有 20 个从 spring-cloud-a 发到 spring-cloud-b 的请求出现报错,发生了请求流量损耗。
我们在 spring-cloud-c 应用开启了定时 HPA 模拟应用上线过程,每隔 5 分钟做一次伸缩,在扩缩容周期内第 2 分钟第 0 秒缩容到 1 个节点,第 2 分钟第 10 秒扩容到 2 个节点。
在预热应用的消费端 spring-cloud-b 开启服务预热功能。
在预热应用的服务提供端 spring-cloud-c 开启服务预热功能。预热时长配置为 120 秒。
观察节点的流量,发现节点流量缓慢上升。并且能看到节点的预热开始和结束时间,以及相关的事件。
从上图可以看到开启预热功能的应用重启后的流量会随时间缓慢增加,在一些应用启动过程中需要预建连接池和缓存等资源的慢启动场景,开启服务预热能有效保护应用启动过程中缓存资源有序创建保障应用安全启动从而实现应用上线的流量无损。
方案介绍 & 实操
更多方案设计细节,请点击下方链接观看微服务应用如何实现无损上下线主题直播视频回放:
https://yqh.aliyun.com/live/detail/27936
[1]创建 Kubernetes 托管版集群:https://help.aliyun.com/document_detail/95108.htm#task-skz-qwk-qfb
[2]开通 MSE 微服务治理:https://help.aliyun.com/document_detail/347625.htm#task-2140253
原文链接:https://developer.aliyun.com/article/872430?utm_content=g_1000331001
本文为阿里云原创内容,未经允许不得转载。
*请认真填写需求信息,我们会在24小时内与您取得联系。