微服务 | 说明 |
QCBM-Front | |
QCBM-Gateway | API 网关,接受前端的 HTTP 请求,并将其转化为后台的 Dubbo 请求。 |
User-Service | 基于 Dubbo 的微服务,提供用户注册、登录、鉴权等功能。 |
Favorites-Service | 基于 Dubbo 的微服务,提供用户图书收藏功能。 |
Order-Service | 基于 Dubbo 的微服务,提供用户订单生成和查询等功能。 |
Store-Service | 基于 Dubbo 的微服务,提供图书信息的存储等功能。 |
网络规划 | 说明 |
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 |
yum install java-1.8.0-openjdk.x86_6
java - version
➜ user-service tree├── Dockerfile├── assembly│ ....├── bin│ ....├── pom.xml├── src│ ....├── target│ .....│ └── user-service-1.0.0.zip└── user-service.iml
FROM java:8-jreARG APP_NAME=user-serviceARG APP_VERSION=1.0.0ARG FULL_APP_NAME=${APP_NAME}-${APP_VERSION}# 容器中的工作目录为 /appWORKDIR /app# 将本地打包出来的应用添加到镜像中COPY ./target/${FULL_APP_NAME}.zip .# 创建日志目录 logs,解压并删除原始文件和解压后的目录RUN mkdir logs \\&& unzip ${FULL_APP_NAME}.zip \\&& mv ${FULL_APP_NAME}/** . \\&& rm -rf ${FULL_APP_NAME}*# user-service 的启动脚本和参数ENTRYPOINT ["/app/bin/user-service.sh"] CMD ["start", "-t"]# dubbo 端口号EXPOSE 20880
nohup java ${OPTIONS} -jar user-service.jar > ${LOG_PATH} 2>&1 &
需改成 java ${OPTIONS} -jar user-service.jar > ${LOG_PATH} 2>&1
。 ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
:docker tag
命令,按命名规范对镜像重命名。# 推荐的构建方式,可省去二次打 tag 操作sudo docker build -t ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]# 本地构建 user-service 镜像,最后一个 . 表示 Dockerfile 存放在当前目录(user-service)下➜ user-service docker build -t ccr.ccs.tencentyun.com/qcbm/user-service:1.0.0 .# 将已存在镜像按命名规范对镜像重命名sudo docker tag [ImageId] ccr.ccs.tencentyun.com/[namespace]/[ImageName]:[镜像版本号]
docker images
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 文件已有内容,则需要替换),以确保每次访问都能进入默认集群中。如果选择不将 API 认证 Token 保存在 .kube
下的 config 文件中,则可参考控制台集群APIServer信息下的 通过Kubectl连接Kubernetes集群操作说明。如下图所示:
kubectl create namespace qcbm
shkubctl create –f namespace.yaml
apiVersion: v1kind: Namespacemetadata:name: qcbmspec:finalizers:- kubernetes
# 创建 ConfigMapapiVersion: v1kind: ConfigMapmetadata:name: qcbm-envnamespace: qcbmdata:NACOS_HOST: 10.0.1.9MYSQL_HOST: 10.0.1.13REDIS_HOST: 10.0.1.16NACOS_PORT: "8848"MYSQL_PORT: "3306"REDIS_PORT: "6379"SW_AGENT_COLLECTOR_BACKEND_SERVICES: xxx # TSW 接入地址,后文介绍
# 创建 SecretapiVersion: v1kind: Secretmetadata:name: qcbm-keysnamespace: qcbmlabels:qcloud-app: qcbm-keysdata:# xxx 为base64 编码后的字符串,可使用 shell 命令 “echo -n 原始字符串 | base64” 生成MYSQL_ACCOUNT: xxxMYSQL_PASSWORD: xxxREDIS_PASSWORD: xxxSW_AGENT_AUTHENTICATION: xxx # TSW 接入 token,后文介绍type: Opaque
参数 | 说明 |
replicas | 表示需要创建的 pod 数量。 |
image | 镜像的地址。 |
imagePullSecrets | |
env | 定义了 pod 的环境变量和取值。 ConfigMap 中定义的 key-value 可使用 configMapKeyRef 引用。 Secret 中定义的 key-value 可使用 secretKeyRef 引用。 |
ports | 指定容器的端口号,由于是 Dubbo 应用,所以端口号为20880 |
# user-service DeploymentapiVersion: apps/v1kind: Deploymentmetadata:name: user-servicenamespace: qcbmlabels:app: user-serviceversion: v1spec:replicas: 1selector:matchLabels:app: user-serviceversion: v1template:metadata:labels:app: user-serviceversion: v1spec:containers:- name: user-serviceimage: ccr.ccs.tencentyun.com/qcbm/user-service:1.1.4env:- name: NACOS_HOST # dubbo服务注册中心nacos的IP地址valueFrom:configMapKeyRef:key: NACOS_HOSTname: qcbm-envoptional: false- name: MYSQL_HOST # Mysql 地址valueFrom:configMapKeyRef:key: MYSQL_HOSTname: qcbm-envoptional: false- name: REDIS_HOST # Redis的IP地址valueFrom:configMapKeyRef:key: REDIS_HOSTname: qcbm-envoptional: false- name: MYSQL_ACCOUNT # Mysql 账号valueFrom:secretKeyRef:key: MYSQL_ACCOUNTname: qcbm-keysoptional: false- name: MYSQL_PASSWORD # Mysql 密码valueFrom:secretKeyRef:key: MYSQL_PASSWORDname: qcbm-keysoptional: false- name: REDIS_PASSWORD # Redis 密码valueFrom:secretKeyRef:key: REDIS_PASSWORDname: qcbm-keysoptional: false- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES # Skywalking 后端服务地址valueFrom:configMapKeyRef:key: SW_AGENT_COLLECTOR_BACKEND_SERVICESname: qcbm-envoptional: false- name: SW_AGENT_AUTHENTICATION # Skywalking agent 连接后端服务的认证 tokenvalueFrom:secretKeyRef:key: SW_AGENT_AUTHENTICATIONname: qcbm-keysoptional: falseports:- containerPort: 20880 # dubbo 端口号protocol: TCPimagePullSecrets: # 拉取镜像时需要使用的 key,QCBM 所有服务的镜像已开放为公共镜像,故此处可省略- name: qcloudregistrykey
service.kubernetes.io/qcloud-loadbalancer-internal-subnetid
注解,在 service 部署时,会创建内网类型 CLB。一般建议事先创建好 CLB,service 的部署 YAML 中使用注解 service.kubernetes.io/loadbalance-id
直接指定,可提升部署效率。 # 部署 qcbm-front serviceapiVersion: v1kind: Servicemetadata:name: qcbm-frontnamespace: qcbmannotations:# Subnet-K8S 子网的 CLB 实例 IDservice.kubernetes.io/loadbalance-id: lb-66pq34pkspec:externalTrafficPolicy: Clusterports:- name: httpport: 80targetPort: 80protocol: TCPselector: # 将后端服务 qcbm-gateway 和该 Service 进行映射app: qcbm-frontversion: v1type: LoadBalancer
# 部署 qcbm-front ingressapiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata:name: frontnamespace: qcbmannotations:ingress.cloud.tencent.com/direct-access: "false"kubernetes.io/ingress.class: qcloudkubernetes.io/ingress.extensiveParameters: '{"AddressIPVersion":"IPV4"}'kubernetes.io/ingress.http-rules: '[{"host":"qcbm.com","path":"/","backend":{"serviceName":"qcbm-front","servicePort":"80"}}]'spec:rules:- host: qcbm.comhttp:paths:- path: /backend: # 关联到后端服务serviceName: qcbm-frontservicePort: 80
apiVersion: cls.cloud.tencent.com/v1kind: LogConfigmetadata:name: user-log-rulespec:clsDetail:extractRule: {}# 单行文本logType: minimalist_log# 日志主题 user-log 的 IDtopicId: 0c544491-03c9-4ed0-90c5-9bedc0973478inputDetail:# 日志所在的容器、工作负载以及日志输出目录containerFile:container: user-servicefilePattern: '*.log'logPath: /app/logsnamespace: qcbmworkload:kind: deploymentname: user-service# 日志采集类型为容器文件路径type: container_file
本页内容是否解决了您的问题?