Background/Requirement
现在有SpringBoot3+外部Pgsql的Java项目,基于MicrosoftJDK17,需要deploy到公司内部Kubenetes ,需要1个deployment.yml 1个service.yml 1个ingess.yml 1个secret.yml,能帮我draft一些模板吗?
powered by https://zhengkai.blog.csdn.net/
Deployment.yml
-
用于定义如何在 Kubernetes 集群中部署您的应用。
-
主要包括:
-
副本数(replicas):要运行的应用实例数量(用于高可用性)。
-
容器镜像:指定应用的 Docker 镜像。
-
环境变量:可以传递数据库连接信息或其他配置。
-
资源管理:定义 CPU 和内存的请求/限制。
-
-
简单来说,
deployment.yml
是管理和部署应用的核心配置。
apiVersion: apps/v1
kind: Deployment
#https://zhengkai.blog.csdn.net/
metadata:
name: springboot-app
labels:
app: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: your-docker-image:latest
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
valueFrom:
secretKeyRef:
name: pgsql-secret
key: jdbc-url
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: pgsql-secret
key: username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: pgsql-secret
key: password
resources:
limits:
memory: "512Mi"
cpu: "500m"
requests:
memory: "256Mi"
cpu: "250m"
Service.yml
-
用于将
Deployment
暴露为 Kubernetes 集群内的网络服务。 -
主要功能:
-
将应用的多个副本绑定到一个服务(负载均衡)。
-
定义端口映射,例如暴露 8080 端口让外部访问。
-
-
Service
使 Pod 能够与其他组件(例如数据库、客户端)通信。
apiVersion: v1
kind: Service
metadata:
name: springboot-app-service
spec:
selector:
app: springboot-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Ingress.yml
-
用于配置外部 HTTP/HTTPS 访问服务的入口点。
-
主要功能:
-
定义域名和路径路由规则(例如将
your-domain.com/api
定向到后端服务)。 -
提供负载均衡和 SSL 支持(如果设置了证书)。
-
-
Ingress
是外部访问您的 Spring Boot 应用的关键配置。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: springboot-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: springboot-app-service
port:
number: 80
Secret.yml
-
用于安全地存储敏感信息,例如数据库密码、API 密钥等。
-
主要功能:
-
加密数据:以 Base64 编码的形式存储机密内容。
-
数据引用:通过环境变量或其他方式提供给 Pod。
-
-
Secret
有助于在保障安全性的前提下管理敏感信息。
apiVersion: v1
kind: Secret
metadata:
name: pgsql-secret
type: Opaque
data:
jdbc-url: <base64-encoded-jdbc-url>
username: <base64-encoded-username>
password: <base64-encoded-password>