微服务 | 说明 |
API 网关 | 基于 Spring Cloud Zuul 的网关,是调用后台 API 的聚合入口,提供反向路由和负载均衡(Eureka+Ribbon)、限流熔断(Hystrix)等功能。CLIENT 单页应用和 ZUUL 网关暂住在一起,简化部署。 |
服务注册和发现 | 基于 Spring Cloud Eureka 的服务注册中心。业务服务启动时通过 Eureka 注册,服务之间调用也通过 Eureka 进行服务发现。 |
授权认证服务 | 基于 Spring Security OAuth2 的授权认证中心。客户端登录时通过 AUTHSERVICE 获取访问令牌。服务之间调用也通过 AUTHSERVICE 获取访问令牌(走客户端模式)。令牌校验方式,各资源服务器通过 AUTHSERVICE 集中校验令牌。 |
配置服务 | 基于 Spring Cloud Config 的配置中心,集中管理所有 Spring 服务的配置文件。 |
软负载和限流熔断 | 基于 Spring Cloud Ribbon&Hystrix,Zuul 调用后台服务,服务之间相互调用都通过 Ribbon 实现软负载,也通过 Hystrix 实现熔断限流保护。 |
METRICS & DASHBOARD | 基于 Spring Cloud Turbine + Hystrix Dashboard,对所有 Hystrix 产生的 Metrics 流进行聚合,并展示在 Hystrix Dashboard 上。 |
网络规划 | 说明 |
Region / AZ | 南京 / 南京一区 |
VPC | CIDR:10.0.0.0/16 |
子网 Subnet-Basic | 南京一区,CIDR:10.0.1.0/24 |
子网 Subnet-K8S | 南京一区,CIDR:10.0.2.0/24 |
Nacos 集群 | 采用 3 台 “标准型SA2” 1C2G 机型的 CVM 构建 Nacos 集群,对应的 IP 为:10.0.1.9,10.0.1.14,10.0.1.15 |
组件 | 版本 | 来源 | 备注 |
K8S | 1.8.4 | 腾讯云 | TKE 托管模式 |
MongoDB | 4.0 | 腾讯云 | TencentDB for MongoDB WiredTiger 引擎版 |
CLS | N/A | 腾讯云 | 日志服务 |
TSW | N/A | 腾讯云 | 采用 Skywalking 8.4.0 版的 agent 接入,点此 下载 |
Java | 1.8 | 开源社区 | Docker 镜像:java:8-jre |
SrpingCloud | Finchley.RELEASE | 开源社区 |
# 下载 mongo client, 解压,进入 bin 目录wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.18.tgztar -zxvf mongodb-linux-x86_64-3.6.18.tgzcd mongodb-linux-x86_64-3.6.18/bin# 使用下面命令初始化 mongodb,其中 mongouser 为创建 mongodb 实例时创建的管理员账号./mongo -u mongouser -p --authenticationDatabase "admin" [mongodb的IP]/piggymetrics mongo-init.js
➜ account-service tree├── Dockerfile├── skywalking│ ├── account.config│ └── skywalking-agent.zip├── pom.xml├── src│ ....├── target│ .....│ └── account-service.jar└── account-service.iml
FROM java:8-jre# 容器中的工作目录为/appWORKDIR /app# 将本地打包出来的应用添加到镜像中ADD ./target/account-service.jar# 将 skywalking agent 拷贝到镜像中COPY ./skywalking/skywalking-agent.zip# 解压 skywalking agent 并删除原始压缩文件RUN unzip skywalking-agent.zip && rm -f skywalking-agent.zip# 添加 skywalking 的配置文件COPY ./skywalking/account.config ./skywalking-agent/config/agent.config# 启动应用CMD ["java", "-Xmx256m", "-javaagent:/app/skywalking-agent/skywalking-agent.jar", "-jar", "/app/account-service.jar"]# 应用的端口说明EXPOSE 6000
ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
:docker tag
命令,按命名规范对镜像重命名。# 推荐的构建方式,可省去二次打 tag 操作sudo docker build -t ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]# 本地构建 account-service 镜像,最后一个 . 表示 Dockerfile 存放在当前目录(user-service)下➜ account-service docker build -t ccr.ccs.tencentyun.com/piggymetrics/account-service:1.0.0 .# 将已存在镜像按命名规范对镜像重命名sudo docker tag [ImageId] ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
docker images | grep piggymetrics
docker login --username=[腾讯云账号 ID] ccr.ccs.tencentyun.com
sudo docker login --username=[腾讯云账号 ID] ccr.ccs.tencentyun.com
docker push ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
用户 home/.kube
下的 config 文件中(若 config 文件已有内容,需要替换),以确保每次访问都能进入默认集群中。如果选择不保存为 .kube
下的 config 文件中,则可参考控制台集群APIServer信息下的 通过Kubectl连接Kubernetes集群操作说明。如下图所示:
kubectl create namespace piggymetrics
kubctl create –f namespace.yaml
# 创建命名空间 piggymetricsapiVersion: v1kind: Namespacemetadata:name: piggymetricsspec:finalizers:- kubernetes
# 创建 ConfigMapapiVersion: v1kind: ConfigMapmetadata:name: piggymetrics-envnamespace: piggymetricsdata:# MongDB 的 IP 地址MONGODB_HOST: 10.0.1.13# TSW 接入地址,后文介绍SW_AGENT_COLLECTOR_BACKEND_SERVICES: ap-shanghai.tencentservicewatcher.com:11800
# 创建 SecretapiVersion: v1kind: Secretmetadata:name: piggymetrics-keysnamespace: piggymetricslabels:qcloud-app: piggymetrics-keysdata:# 请将下面的 XXX 替换为实际值MONGODB_USER: XXXMONGODB_PASSWORD: XXXSW_AGENT_AUTHENTICATION: XXXtype: Opaque
---kind: ServiceapiVersion: v1metadata:name: config-servernamespace: piggymetricsspec:clusterIP: Noneports:- name: httpport: 8888targetPort: 8888protocol: TCPselector:app: configversion: v1---apiVersion: apps/v1kind: StatefulSetmetadata:name: confignamespace: piggymetricslabels:app: configversion: v1spec:serviceName: "config-server"replicas: 1selector:matchLabels:app: configversion: v1template:metadata:labels:app: configversion: v1spec:terminationGracePeriodSeconds: 10containers:- name: configimage: ccr.ccs.tencentyun.com/piggymetrics/config-server:2.0.03ports:- containerPort: 8888protocol: TCP
参数 | 说明 |
replicas | 表示需要创建的 Pod 数量。 |
image | 镜像的地址。 |
imagePullSecrets | |
env | 定义了 pod 的环境变量和取值。 ConfigMap 中定义的 key-value 可使用 configMapKeyRef 引用。 Secret 中定义的 key-value 可使用 secretKeyRef 引用。 |
ports | 指定容器的端口号,account-service 的端口号为6000。 |
# account-service DeploymentapiVersion: apps/v1kind: Deploymentmetadata:name: account-servicenamespace: piggymetricslabels:app: account-serviceversion: v1spec:replicas: 1selector:matchLabels:app: account-serviceversion: v1template:metadata:labels:app: account-serviceversion: v1spec:containers:- name: account-serviceimage: ccr.ccs.tencentyun.com/piggymetrics/account-service:1.0.1env:# mongodb 的IP地址- name: MONGODB_HOSTvalueFrom:configMapKeyRef:key: MONGODB_HOSTname: piggymetrics-envoptional: false# mongodb 用户名- name: MONGODB_USERvalueFrom:secretKeyRef:key: MONGODB_USERname: piggymetrics-keysoptional: false# mongodb 密码- name: MONGODB_PASSWORDvalueFrom:secretKeyRef:key: MONGODB_PASSWORDname: piggymetrics-keysoptional: false# TSW 接入点- name: SW_AGENT_COLLECTOR_BACKEND_SERVICESvalueFrom:configMapKeyRef:key: SW_AGENT_COLLECTOR_BACKEND_SERVICESname: piggymetrics-envoptional: false# TSW 接入 token- name: SW_AGENT_AUTHENTICATIONvalueFrom:secretKeyRef:key: SW_AGENT_AUTHENTICATIONname: piggymetrics-keysoptional: falseports:# 容器端口- containerPort: 6000protocol: TCPimagePullSecrets: # 拉取镜像的 token- name: qcloudregistrykey
service.kubernetes.io/qcloud-loadbalancer-internal-subnetid
注解,在 service 部署时,会创建内网类型 CLB。一般建议事先创建好 CLB,service 的部署 YAML 中使用注解 service.kubernetes.io/loadbalance-id
直接指定,可提升部署效率。 # 部署 gateway serviceapiVersion: v1kind: Servicemetadata:name: gatewaynamespace: piggymetricsannotations:# 请替换成 Subnet-K8S 子网的 CLB 实例 IDservice.kubernetes.io/loadbalance-id: lb-hfyt76cospec:externalTrafficPolicy: Clusterports:- name: httpport: 80targetPort: 4000protocol: TCPselector: # 将后端服务 gateway 和该 Service 进行映射app: gatewayversion: v1type: LoadBalancer
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigmetadata:name: account-log-rulespec:clsDetail:extractRule: {}# 单行文本logType: minimalist_log# 日志主题IDtopicId: 8438cc9b-888f-469f-9cff-9891270a0a13inputDetail:# 容器标准输出containerStdout:container: account-serviceincludeLabels:app: account-serviceversion: v1namespace: piggymetricstype: container_stdout
SW_AGENT_COLLECTOR_BACKEND_SERVICES
SW_AGENT_AUTHENTICATION
{PUT}/{accountName}
抛出了 NestedServletException 异常,从而导致该接口不可用。
本页内容是否解决了您的问题?