Kubernetes电商微服务项目部署实战指南
一、项目概述与架构1.1 项目背景本文以商城Wolf Mall电商项目为例演示如何将传统的微服务架构完整迁移到Kubernetes平台。该项目采用典型的微服务架构包含商品服务、订单服务、会员服务、购物车服务、网关服务等多个独立模块。1.2 技术栈容器编排Kubernetes服务注册与配置中心NacosAPI网关Spring Cloud Gateway数据库MySQL镜像仓库阿里云容器镜像服务日志管理主机路径挂载1.3 部署架构图text客户端 → Ingress(Nginx) → Gateway服务 → 各业务微服务 ↓ Nacos注册中心 ↓ MySQL数据库二、微服务镜像准备与推送2.1 登录镜像仓库在部署前需要将所有微服务打包成Docker镜像并推送到私有镜像仓库bash# 登录阿里云镜像仓库 docker login --usernamefox666 registry.cn-hangzhou.aliyuncs.com2.2 打标签与推送为每个微服务镜像打标签并推送到仓库bash# 以商品服务为例 docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-product:[镜像版本号] docker push registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-product:[镜像版本号]版本号建议使用语义化版本号如1.0.0、1.0.1等便于版本管理和回滚。2.3 创建镜像拉取密钥对于私有镜像仓库需要在K8s中创建Secret用于拉取镜像bashkubectl create secret docker-registry myregistrykey \ --docker-serverregistry.cn-hangzhou.aliyuncs.com \ --docker-usernamewolf666 \ --docker-passwordxxx参数说明myregistrykey密钥名称可自定义docker-server镜像仓库地址docker-username仓库用户名docker-password仓库密码三、微服务Deployment部署3.1 商品服务部署配置创建wolfmall-product-deployment.yaml文件yamlapiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-product-deployment labels: app: wolfmall-product spec: replicas: 2 # 副本数根据负载调整 selector: matchLabels: app: wolfmall-product template: metadata: labels: app: wolfmall-product spec: hostNetwork: true # 主机网络模式初学者建议使用 imagePullSecrets: - name: myregistrykey # 引用私有仓库密钥 containers: - name: wolfmall-product image: registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-product:0.0.5 imagePullPolicy: Always # 镜像拉取策略 ports: - containerPort: 8866 # 容器内部端口 env: - name: TZ value: Asia/Shanghai # 时区设置 - name: spring.cloud.nacos.config.server-addr value: 192.168.65.174:8848 # Nacos配置中心地址 - name: LOG_FILE value: /var/logs # 日志文件路径 volumeMounts: - mountPath: /var/logs name: log-volume volumes: - name: log-volume hostPath: path: /mydata/k8s-app/wolfmall-product/logs关键配置解析hostNetwork: true使用主机网络模式简化网络配置适合初学者imagePullPolicyAlways每次创建Pod都重新拉取镜像默认IfNotPresent宿主机不存在时才拉取Never只使用本地镜像环境变量配置通过环境变量传递应用配置数据卷挂载将日志目录挂载到主机路径便于日志收集3.2 部署执行与验证bash# 应用Deployment配置 kubectl apply -f tulingmall-product-deployment.yaml # 查看部署状态 kubectl get pods -l apptulingmall-product # 查看Pod详细信息 kubectl describe pod [pod名称]3.3 其他微服务部署采用相同模式部署其他微服务主要区别在于服务名称、镜像标签和端口号认证中心服务端口9999yaml# wolfmall-authcenter-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-authcenter-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-authcenter image: registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-authcenter:0.0.5 ports: - containerPort: 9999 env: - name: spring.cloud.nacos.config.server-addr value: 192.168.65.174:8848网关服务端口8888yaml# wolfmall-gateway-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-gateway-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-gateway image: registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-gateway:0.0.5 ports: - containerPort: 8888 env: - name: spring.cloud.nacos.config.server-addr value: 192.168.65.174:8848订单服务端口8844yaml# wolfmall-order-curr-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-order-curr-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-order-curr image: registry.cn-hangzhou.aliyuncs.com/fox666/wolfmall-order-curr:0.0.5 ports: - containerPort: 8844购物车服务端口8855yaml# wolfmall-cart-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-cart-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-cart image: registry.cn-hangzhou.aliyuncs.com/wolf666/wolfmall-cart:0.0.5 ports: - containerPort: 8855唯一ID服务端口8833yaml# wolfmall-unqid-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-unqid-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-unqid image: registry.cn-hangzhou.aliyuncs.com/wolf666/wolfmall-unqid:0.0.5 ports: - containerPort: 8833会员服务端口8877yaml# wolfmall-member-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: wolfmall-member-deployment spec: replicas: 1 template: spec: containers: - name: wolfmall-member image: registry.cn-hangzhou.aliyuncs.com/wolf666/wolfmall-member:0.0.5 ports: - containerPort: 8877四、Service配置与暴露4.1 商品服务Service配置创建wolfmall-product-service.yamlyamlapiVersion: v1 kind: Service metadata: name: wolfmall-product-service spec: type: NodePort # 节点端口类型可通过节点IP访问 selector: app: wolfmall-product # 选择器匹配Pod标签 ports: - name: http protocol: TCP port: 8866 # Service端口 targetPort: 8866 # Pod容器端口4.2 部署与验证bash# 应用Service配置 kubectl apply -f wolfmall-product-service.yaml # 查看Service详情 kubectl describe svc wolfmall-product-service # 查看分配的NodePort kubectl get svc wolfmall-product-service4.3 访问测试通过NodePort访问商品服务bash# 获取节点IP和端口 NODE_IP192.168.65.180 # 实际节点IP NODE_PORT30997 # 分配的NodePort # 访问商品查询接口 curl http://${NODE_IP}:${NODE_PORT}/pms/productInfo/274.4 其他服务Service配置所有微服务的Service配置结构相似只需修改名称、选择器和端口yaml# 通用模板 apiVersion: v1 kind: Service metadata: name: [服务名]-service spec: type: NodePort selector: app: [服务名] ports: - name: http protocol: TCP port: [服务端口] targetPort: [服务端口]五、Ingress网关配置5.1 Ingress Controller安装首先确保集群已安装Ingress Nginx Controllerbash# 查看Ingress Controller状态 kubectl get pods -n ingress-nginx -o wide # 安装命令参考官方文档 # https://kubernetes.github.io/ingress-nginx/deploy/#quick-start5.2 创建Ingress资源创建wolfmall-gateway-ingress.yamlyamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: wolfmall-gateway-ingress spec: ingressClassName: nginx # 指定Ingress Controller rules: - host: gateway.tuling.com # 自定义域名 http: paths: - path: / pathType: Prefix backend: service: name: wolfmall-gateway-service # 后端Service port: number: 8888 # Service端口5.3 应用与验证bash# 应用Ingress配置 kubectl apply -f wolfmall-gateway-ingress.yaml # 查看Ingress状态 kubectl get ing # 查看Ingress详情 kubectl describe ing wolfmall-gateway-ingress5.4 本地hosts配置在客户端机器配置hosts将域名指向Ingress Controller节点IPbash# Windows系统C:\Windows\System32\drivers\etc\hosts # Linux/Mac系统/etc/hosts # 添加记录IP为Ingress部署节点IP 192.168.65.137 gateway.wolf.com5.5 访问测试配置完成后通过域名访问网关服务bashcurl http://gateway.wolf.com六、外部中间件集成6.1 K8s DNS验证首先验证集群DNS服务是否正常bash# 运行测试容器 kubectl run curl --imageradial/busyboxplus:curl -it --rm # 进入容器后执行 nslookup kubernetes.default # 预期输出 # Server: 10.96.0.10 # Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local # Name: kubernetes.default # Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local6.2 MySQL外部访问配置对于集群外部的MySQL通过Endpoint和Service进行映射创建mysql-product.yamlyaml# Service定义 apiVersion: v1 kind: Service metadata: name: mysql-product spec: ports: - name: mysql-product port: 3306 protocol: TCP targetPort: 3306 type: NodePort # Endpoint定义指向外部MySQL apiVersion: v1 kind: Endpoints metadata: name: mysql-product subsets: - addresses: - ip: 192.168.65.71 # 外部MySQL服务器IP ports: - name: mysql-product port: 3306 protocol: TCP6.3 部署与验证bash# 应用配置 kubectl apply -f mysql-product.yaml # 指定命名空间部署 kubectl apply -f mysql-product.yaml -n wolfmall # 测试连接 kubectl run mysql-test --imagemysql:8.0 -it --rm \ -- mysql -hmysql-product.wolfmall -uroot -p6.4 Nacos外部访问配置创建nacos-external.yamlyaml# Service定义 apiVersion: v1 kind: Service metadata: name: nacos spec: ports: - port: 8848 name: nacos targetPort: 8848 - port: 9848 name: client-rpc targetPort: 9848 - port: 9849 name: raft-rpc targetPort: 9849 type: NodePort # Endpoint定义 apiVersion: v1 kind: Endpoints metadata: name: nacos subsets: - addresses: - ip: 192.168.65.174 # 外部Nacos服务器IP ports: - port: 8848 name: nacos - port: 9848 name: client-rpc - port: 9849 name: raft-rpc6.5 微服务连接Nacos配置在微服务Deployment中修改Nacos连接地址为K8s Service域名yamlenv: - name: spring.cloud.nacos.config.server-addr value: nacos.default:8848 # 使用K8s Service名称域名解析规则完整格式[service-name].[namespace].svc.cluster.local简写格式[service-name].[namespace]同命名空间可省略namespace[service-name]七、生产环境优化配置7.1 移除hostNetwork模式生产环境建议使用标准的ClusterIP或NodePort模式yaml# 修改Deployment配置 spec: # hostNetwork: true # 注释或删除此行 containers: - name: wolfmall-product # 其他配置不变...7.2 资源配置与限制添加资源请求和限制确保服务质量yamlcontainers: - name: wolfmall-product resources: requests: memory: 512Mi cpu: 250m limits: memory: 1Gi cpu: 500m7.3 健康检查配置添加就绪和存活探针yamlcontainers: - name: wolfmall-product livenessProbe: httpGet: path: /actuator/health port: 8866 initialDelaySeconds: 60 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health port: 8866 initialDelaySeconds: 30 periodSeconds: 57.4 多环境配置管理使用ConfigMap管理不同环境的配置yaml# 创建ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: app-config data: application-prod.yaml: | spring: datasource: url: jdbc:mysql://mysql-product:3306/wolfmall application-dev.yaml: | spring: datasource: url: jdbc:mysql://localhost:3306/wolfmall_dev # 在Deployment中引用 containers: - name: wolfmall-product env: - name: SPRING_PROFILES_ACTIVE value: prod volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: app-config八、常见问题与解决方案8.1 镜像拉取失败错误信息textFailed to pull image registry.cn-hangzhou.aliyuncs.com/fox666/tulingmall-member:0.0.5: rpc error: code Unknown desc Error response from daemon: pull access denied解决方案确保已创建正确的镜像拉取Secret在Deployment中正确引用Secret验证镜像仓库地址、用户名、密码是否正确bash# 重新创建Secret kubectl create secret docker-registry myregistrykey \ --docker-serverregistry.cn-hangzhou.aliyuncs.com \ --docker-usernamewolf666 \ --docker-password正确密码 # 验证Deployment配置 kubectl get deployment tulingmall-member-deployment -o yaml | grep imagePullSecrets8.2 服务无法访问排查步骤检查Pod状态kubectl get pods检查Service选择器是否匹配Pod标签检查网络策略和防火墙规则查看Pod日志kubectl logs [pod-name]8.3 配置文件不生效排查步骤验证ConfigMap是否正确创建检查环境变量名称是否匹配应用配置查看应用启动日志确认配置加载确保配置文件的格式正确8.4 资源不足现象Pod处于Pending状态解决方案检查节点资源使用情况kubectl describe nodes调整Pod的资源请求和限制清理不需要的资源或扩展集群九、部署总结与最佳实践9.1 部署流程总结镜像准备构建、打标签、推送镜像到仓库密钥配置创建镜像拉取Secret部署服务创建Deployment和Service网络配置配置Ingress实现外部访问中间件集成通过Endpoint连接外部服务验证测试检查服务状态和功能9.2 最佳实践建议版本控制所有YAML文件纳入版本控制系统环境分离开发、测试、生产环境使用不同配置监控告警部署Prometheus监控和告警规则日志收集使用EFK或ELK栈集中管理日志持续部署集成CI/CD流水线自动化部署备份策略定期备份重要数据和配置9.3 后续优化方向服务网格引入Istio实现更细粒度的流量管理自动扩缩容配置HPA基于指标自动调整副本数金丝雀发布实现渐进式发布降低风险安全加固配置网络策略、RBAC、Pod安全策略性能优化调整JVM参数、数据库连接池等配置

相关新闻

股市估值差异对国际技术标准制定的影响

股市估值差异对国际技术标准制定的影响

股市估值差异对国际技术标准制定的影响关键词:股市估值差异、国际技术标准制定、技术创新、市场竞争、产业发展摘要:本文深入探讨了股市估值差异对国际技术标准制定的影响。首先介绍了研究的背景、目的、范围以及预期读者等内容。接着阐述了股市估值差异…

2026/5/17 3:34:08 阅读更多 →
大数据存算分离架构的跨区域数据同步

大数据存算分离架构的跨区域数据同步

大数据存算分离架构下跨区域数据同步的深度剖析 关键词:大数据、存算分离架构、跨区域数据同步、数据一致性、分布式系统、数据传输协议、同步策略 摘要:本文深入探讨大数据存算分离架构中的跨区域数据同步问题。首先阐述大数据存算分离架构的背景与发…

2026/7/3 5:27:48 阅读更多 →
生物技术公司SpyGlass美股上市:大涨65% 公司市值8.4亿美元

生物技术公司SpyGlass美股上市:大涨65% 公司市值8.4亿美元

雷递网 雷建平 2月7日临床后期生物技术公司SpyGlass Pharma(股票代码:“SGP”)昨日在美国纳斯达克上市。SpyGlass发行价937.5万股,发行价16美元, 募资总额为1.5亿美元。SpyGlass开盘价为24美元,较发行价上涨50%&#x…

2026/7/6 5:22:27 阅读更多 →

最新新闻

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南

如何让Windows开始菜单回归经典:Open-Shell-Menu完整配置与个性化终极指南 【免费下载链接】Open-Shell-Menu Classic Shell Reborn. 项目地址: https://gitcode.com/gh_mirrors/op/Open-Shell-Menu 想要找回经典的Windows开始菜单体验吗?Open-Sh…

2026/7/6 19:57:18 阅读更多 →
社会洗牌的变化创造了过去不存在的可能性。

社会洗牌的变化创造了过去不存在的可能性。

它揭示的是社会系统如何运行,而不是一句励志口号。“社会洗牌的变化创造了过去不存在的可能性。”很多人容易理解成:变化一定带来机会。其实,这种理解并不准确。 更准确地说应该是:变化会改变"可能性空间"(P…

2026/7/6 19:57:18 阅读更多 →
如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南

如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南

如何从零开始为syzkaller内核模糊测试工具做贡献:新手完全指南 【免费下载链接】syzkaller syzkaller is an unsupervised coverage-guided kernel fuzzer 项目地址: https://gitcode.com/gh_mirrors/sy/syzkaller 你是否曾经想为开源内核安全项目做贡献&…

2026/7/6 19:55:17 阅读更多 →
EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案

EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案

EhViewer开源项目深度解析:构建现代化漫画浏览体验的Android解决方案 EhViewer是一个基于Material Design 2设计语言的开源Android漫画浏览应用,为E-Hentai平台用户提供了优雅、高效的内容浏览体验。这个项目不仅解决了漫画爱好者在移动设备上访问和浏览…

2026/7/6 19:55:17 阅读更多 →
FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧

FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧

FancySelect与iOS设备兼容性:智能适配与强制覆盖技巧 【免费下载链接】FancySelect A better select for discerning web developers everywhere. 项目地址: https://gitcode.com/gh_mirrors/fa/FancySelect FancySelect是一个为挑剔的Web开发者精心打造的选…

2026/7/6 19:53:14 阅读更多 →
为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来

为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来

为什么DocuSeal能让文档签署从繁琐到极简?3分钟了解开源电子签名的未来 【免费下载链接】docuseal Open source DocuSign alternative. Create, fill, and sign digital documents ✍️ 项目地址: https://gitcode.com/GitHub_Trending/do/docuseal 想象一下…

2026/7/6 19:53:14 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻