5分钟上手spring-petclinic容器化部署:从YAML到K8s完整指南

5分钟上手spring-petclinic容器化部署:从YAML到K8s完整指南

【免费下载链接】spring-petclinic A sample Spring-based application 【免费下载链接】spring-petclinic 项目地址: https://gitcode.com/gh_mirrors/sp/spring-petclinic

你是否还在为Spring应用的Kubernetes部署配置头疼?本文将以spring-petclinic项目为实例,通过解析k8s/db.ymlk8s/petclinic.yml两个核心配置文件,带你快速掌握微服务容器化部署的关键步骤。读完本文你将获得:

  • 数据库与应用分离部署的最佳实践
  • Kubernetes资源配置的常见陷阱规避
  • 健康检查与探针配置的实战技巧

部署架构概览

spring-petclinic的Kubernetes部署采用经典的"前端-后端-数据库"三层架构,通过两个YAML文件实现完整资源定义:

mermaid

数据库配置深度解析(k8s/db.yml)

该文件包含三个核心资源对象,实现PostgreSQL数据库的安全部署:

1. 敏感信息管理:Secret对象

apiVersion: v1
kind: Secret
metadata:
  name: demo-db
type: servicebinding.io/postgresql
stringData:
  type: "postgresql"
  provider: "postgresql"
  host: "demo-db"
  port: "5432"
  database: "petclinic"
  username: "user"
  password: "pass"

关键配置说明

  • 使用servicebinding.io/postgresql类型实现与Spring Cloud的自动绑定
  • 所有数据库连接参数集中管理,避免明文配置风险
  • 与后续Deployment通过secretKeyRef实现安全引用

2. 网络访问:Service对象

apiVersion: v1
kind: Service
metadata:
  name: demo-db
spec:
  ports:
    - port: 5432
  selector:
    app: demo-db

设计亮点

  • 通过标签选择器app: demo-db关联后端Pod
  • 使用ClusterIP类型(默认)实现仅集群内部访问
  • 固定端口5432便于应用配置引用

3. 工作负载:Deployment对象

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-db
  labels:
    app: demo-db
spec:
  selector:
    matchLabels:
      app: demo-db
  template:
    metadata:
      labels:
        app: demo-db
    spec:
      containers:
        - image: postgres:18.0
          name: postgresql
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: demo-db
                  key: username
          ports:
            - containerPort: 5432
              name: postgresql
          livenessProbe:
            tcpSocket:
              port: postgresql
          readinessProbe:
            tcpSocket:
              port: postgresql
          startupProbe:
            tcpSocket:
              port: postgresql

健康检查策略

  • 三重探针保障数据库可用性:
    • startupProbe:判断容器是否启动完成
    • readinessProbe:判断是否可接收请求
    • livenessProbe:判断是否需要重启容器
  • 采用TCP端口探测方式,适合数据库服务特性

应用配置实战指南(k8s/petclinic.yml)

该文件定义Spring Boot应用的部署配置,重点关注与数据库的安全集成:

1. 服务暴露:NodePort类型Service

apiVersion: v1
kind: Service
metadata:
  name: petclinic
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: petclinic

访问设计

  • 使用NodePort类型允许外部网络访问
  • 端口映射关系:80(Service) → 8080(容器)
  • 标签选择器app: petclinic关联应用Pod

2. 应用部署:Deployment对象

apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
  labels:
    app: petclinic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: petclinic
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
        - name: workload
          image: dsyer/petclinic
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: postgres
            - name: SPRING_APPLICATION_JSON
              value: |
                {
                  "management.endpoint.health.probes.add-additional-paths": true
                }
          ports:
            - name: http
              containerPort: 8080
          livenessProbe:
            httpGet:
              path: /livez
              port: http
          readinessProbe:
            httpGet:
              path: /readyz
              port: http
          volumeMounts:
            - mountPath: /bindings/secret
              name: binding
              readOnly: true
      volumes:
        - name: binding
          projected:
            sources:
              - secret:
                  name: demo-db

核心配置解析

  • 环境变量SPRING_PROFILES_ACTIVE: postgres指定数据库配置文件
  • 健康检查端点/livez/readyz与Spring Boot Actuator集成
  • 通过Projected Volume实现数据库Secret的安全挂载

一键部署操作指南

  1. 克隆项目代码库
git clone https://gitcode.com/gh_mirrors/sp/spring-petclinic
cd spring-petclinic
  1. 应用数据库配置
kubectl apply -f k8s/db.yml
  1. 部署应用服务
kubectl apply -f k8s/petclinic.yml
  1. 验证部署状态
kubectl get pods
kubectl get services petclinic

常见问题与解决方案

问题场景排查方向解决方案
应用无法连接数据库1. Secret挂载是否正确
2. Service DNS解析
3. 网络策略限制
检查k8s/petclinic.yml中volumeMounts配置
探针检测失败1. 应用启动时间不足
2. Actuator端点是否开启
增加探针initialDelaySeconds参数
外部无法访问1. NodePort端口范围
2. 防火墙规则
3. 节点网络策略
使用kubectl describe service petclinic检查端口映射

部署架构优化建议

  1. 高可用改进

    • 数据库使用StatefulSet替代Deployment
    • 添加PersistentVolume确保数据持久化
    • 配置PodDisruptionBudget避免同时宕机
  2. 安全增强

    • 使用Namespace隔离不同环境
    • 为ServiceAccount配置最小权限
    • 启用NetworkPolicy限制Pod间通信
  3. 监控集成

    • 添加Prometheus监控注解
    • 配置Grafana仪表盘
    • 实现基于Metrics的HPA自动扩缩容

通过本文介绍的配置文件解析和部署流程,你已经掌握了Spring Boot应用在Kubernetes环境的核心部署技巧。实际生产环境中,建议结合项目src/main/java/org/springframework/samples/petclinic/PetClinicApplication.java的源码分析,进一步优化资源配置参数。收藏本文,下次部署Spring应用时即可快速参考!

【免费下载链接】spring-petclinic A sample Spring-based application 【免费下载链接】spring-petclinic 项目地址: https://gitcode.com/gh_mirrors/sp/spring-petclinic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值