k8s 部署微服务操作手册
k8s 部署微服务示例
以 api-project 为例,以封装完成的镜像和 Jar 包作为起点的 k8s 部署微服务流程示例
预备工作
- api-backend:提供数据库对齐的基础 CRUD 服务,信息管理后端,数据库相关,已封装成镜像并上传至镜像仓库
- api-interface:提供独立的简单接口调用服务,数据库无关,已封装成镜像并上传至镜像仓库
- api-gateway:提供请求转发服务,需要引入 configMap,已封装成 Jar 包
具体流程
命名空间创建
kubectl create namespace 2024-graduation-design-test
常用操作别名
alias kggt='kubectl get all -n 2024-graduation-design-test -o wide'
alias kcgt='kubectl -n 2024-graduation-design-test'
部署 api-interface
配置文件声明
---
apiVersion: v1
kind: Service
metadata:
name: api-interface-service
namespace: 2024-graduation-design-test
labels:
app: api-interface
spec:
type: NodePort
ports:
- port: 8100
targetPort: 8100
selector:
app: api-interface
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-interface
namespace: 2024-graduation-design-test
labels:
app: api-interface
spec:
replicas: 3
selector:
matchLabels:
app: api-interface
template:
metadata:
labels:
app: api-interface
spec:
imagePullSecrets:
- name: registry-auth-secret
containers:
- name: api-interface-pod
image: 172.16.17.46:8085/library/xxx/api-project/api-interface:v1
ports:
- containerPort: 8100
配置文件加载
kubectl apply -f api-interface.yaml
测试
kggt # 查询分配的 NodePort
curl http://172.16.17.38:NodePort/api/interface/name/get?name="Ba11ooner"
部署 api-backend
配置文件声明
---
apiVersion: v1
kind: Service
metadata:
name: api-backend-service
namespace: 2024-graduation-design-test
labels:
app: api-backend
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: api-backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-backend
namespace: 2024-graduation-design-test
labels:
app: api-backend
spec:
replicas: 3
selector:
matchLabels:
app: api-backend
template:
metadata:
labels:
app: api-backend
spec:
imagePullSecrets:
- name: registry-auth-secret
containers:
- name: api-backend-pod
image: 172.16.17.46:8085/library/xxx/api-project/api-backend:v1
ports:
- containerPort: 8080
配置文件加载
kubectl apply -f api-backend.yaml
测试
kggt # 查询分配的 NodePort
curl http://172.16.17.38:NodePort/api/backend/user/hello
部署 api-gateway
Dockerfile 编写
FROM openjdk:8
COPY target/api-gateway-0.0.1-SNAPSHOT.jar .
EXPOSE 8090
CMD ["java", "-jar", "api-gateway-0.0.1-SNAPSHOT.jar", "--spring.config.location=/path/application.yaml"]
docker images | grep api-gateway
docker build -t xxx/api-gateway:v1 .
镜像打包
# 打标签
docker tag xxx/api-gateway:v1 172.16.17.46:8085/library/xxx/api-project/api-gateway:v1
# 推送
docker push 172.16.17.46:8085/library/xxx/api-project/api-gateway:v1
动态配置
kggt # 查询分配的 NodePort
键值对创建,即配置文件创建
server:
port: 8090
spring:
application:
name: api-gateway
main:
allow-bean-definition-overriding: true
cloud:
gateway:
globalcors: # 跨域处理
corsConfigurations:
'[/**]':
allowedOrigins:
- "http://172.16.17.37:5500"
- "http://localhost:8000"
allowedMethods:
- GET
- POST
allowedHeaders: "*"
allowCredentials: true
default-filters:
- AddResponseHeader=source, api-gateway # 流量染色,说明响应源于 api-gateway
routes:
- id: backend_route # 请求转发到 api-backend
uri: http://172.16.17.38:NodePort
predicates:
- Path=/api/backend/**
- id: interface_route # 请求转发到 api-interface
uri: http://172.16.17.38:NodePort
predicates:
- Path=/api/interface/**
dubbo:
application:
name: consumer-client
registry:
address: nacos://172.16.17.37:8848
username: nacos
password: nacos
api: #测试用
client:
access-key: 5ad1086d8f347665f184ab61ebe37c87
secret-key: ef4e4ac32b5bad82682baf50fb2e7dd3
键值对加载
kcgt create configmap api-gateway-config --from-file=application.yaml=/path
configMap 使用,即配置文件声明
---
apiVersion: v1
kind: Service
metadata:
name: api-gateway-service
namespace: 2024-graduation-design-test
labels:
app: api-gateway
spec:
type: NodePort
ports:
- port: 8090
targetPort: 8090
selector:
app: api-gateway
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-gateway
namespace: 2024-graduation-design-test
labels:
app: api-gateway
spec:
replicas: 1
selector:
matchLabels:
app: api-gateway
template:
metadata:
labels:
app: api-gateway
spec:
imagePullSecrets:
- name: registry-auth-secret
containers:
- name: api-gateway-pod
image: 172.16.17.46:8085/library/xxx/api-project/api-gateway:v1
ports:
- containerPort: 8090
# 将 configMap 中的文件加载到容器中
volumeMounts: # 加载数据卷
- name: config
mountPath: "/path" # 目标路径
readOnly: true # 是否只读
volumes: # 引用configmap
- name: config # 指定数据卷名称,随意设置
configMap: # 指定数据卷类型为 configMap
name: api-gateway-config # 指定要加载的 configMap 名称
items:
- key: "application.yaml" # configMap 中的 key
path: "application.yaml" # 将 key 的 value 转换成文件
配置文件加载
kubectl apply -f api-gateway.yaml
测试
kggt # 查询分配的 NodePort
curl http://172.16.17.39:NodePort/api/backend/user/hello
curl http://172.16.17.39:NodePort/invoke/get?name=Ba11ooner
curl http://172.16.17.39:NodePort/api/interface/name/get?name="Ba11ooner"
部署流程总结
- 准备镜像文件
- 本地镜像
- 远程镜像:使用前提是做好镜像仓库的配置
- 编写 k8s 资源配置文件
- 载入 k8s 资源配置文件
知识补充
镜像上传
#一、微服务工程打包
mvn clean package
#二、docker镜像构建 本地构建 进入travelservice服务的文件夹
docker build -t travelservice:v1.0.0 .
#三、镜像打标签
docker tag travelservice:v1.0.0 172.16.17.46:8085/library/travelservice:v1.0.0
#四、推送到harbor镜像仓库
docker push 172.16.17.46:8085/library/travelservice:v1.0.0
#五、运行本地的yaml文件 进入yaml文件所在文件夹
kubectl apply -f yaml
镜像调试
k8s 资源状态查询
kcg describe deployment xxx-api-project
Pod 内部日志查看
kubectl logs -f test-k8s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏