一、Docker Desktop Kubernetes 集群部署 SpringBoot 项目
# 1. 首先创建Dockerfile,将以下内容保存为Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# 2. 创建Kubernetes部署配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mf-efficiency
spec:
replicas: 2
selector:
matchLabels:
app: mf-efficiency
template:
metadata:
labels:
app: mf-efficiency
spec:
containers:
- name: mf-efficiency
image: mf-efficiency:latest
# 强制使用本地镜像,不去远程拉取
# 注意,如果没有这个设置,则需要配置远程 docker hub 配置
imagePullPolicy: Never
ports:
- containerPort: 8001
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "500m"
# 3. 创建Service配置文件 service.yaml
apiVersion: v1
kind: Service
metadata:
name: mf-efficiency-service
spec:
type: NodePort
selector:
app: mf-efficiency
ports:
- port: 8001
targetPort: 8001
nodePort: 30001
下面是具体的部署步骤:
-
准备工作
- 确保安装了 Docker Desktop
- 在 Docker Desktop 设置中启用 Kubernetes
- 确保你的 SpringBoot 项目能正常打包
打包 SpringBoot 项目
mvn clean package
- 构建 Docker 镜像
docker build -t springboot-app:latest .
- 部署到 Kubernetes
# 创建 deployment
kubectl apply -f deployment.yaml
# 创建 service
kubectl apply -f service.yaml
- 验证部署状态
# 查看 deployment 状态
kubectl get deployments
# 查看 pod 状态
kubectl get pods
# 查看 service 状态
kubectl get services
- 访问应用
- 通过
localhost:30001
访问应用(30001 是在 service.yaml 中配置的 nodePort)
常用调试命令:
# 查看 pod 详细信息
kubectl describe pod <pod-name>
# 查看 pod 日志
kubectl logs <pod-name>
# 进入 pod 容器
kubectl exec -it <pod-name> -- /bin/sh
如果需要更新应用:
- 修改代码并重新打包
- 构建新的 Docker 镜像(建议更新标签)
- 更新 deployment.yaml 中的镜像标签
- 重新应用配置文件
提示:
- 确保 Docker Desktop 的 Kubernetes 集群正常运行
- 如果遇到镜像拉取问题,确保使用了正确的镜像名称和标签
- 资源限制可以根据实际需求在 deployment.yaml 中调整
- 建议在生产环境使用私有镜像仓库
二、遇到问题
我将为您详细介绍如何使用 Docker Desktop 的 Kubernetes 集群部署 SpringBoot 项目。
```yaml
# 1. 首先创建Dockerfile,将以下内容保存为Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
# 2. 创建Kubernetes部署配置文件 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: springboot-app:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "500m"
# 3. 创建Service配置文件 service.yaml
apiVersion: v1
kind: Service
metadata:
name: springboot-service
spec:
type: NodePort
selector:
app: springboot-app
ports:
- port: 8080
targetPort: 8080
nodePort: 30001
下面是具体的部署步骤:
-
准备工作
- 确保安装了 Docker Desktop
- 在 Docker Desktop 设置中启用 Kubernetes
- 确保你的 SpringBoot 项目能正常打包
打包 SpringBoot 项目
mvn clean package
- 构建 Docker 镜像
docker build -t springboot-app:latest .
- 部署到 Kubernetes
# 创建 deployment
kubectl apply -f deployment.yaml
# 创建 service
kubectl apply -f service.yaml
- 验证部署状态
# 查看 deployment 状态
kubectl get deployments
# 查看 pod 状态
kubectl get pods
# 查看 service 状态
kubectl get services
- 访问应用
- 通过
localhost:30001
访问应用(30001 是在 service.yaml 中配置的 nodePort)
常用调试命令:
# 查看 pod 详细信息
kubectl describe pod <pod-name>
# 查看 pod 日志
kubectl logs <pod-name>
# 进入 pod 容器
kubectl exec -it <pod-name> -- /bin/sh
如果需要更新应用:
- 修改代码并重新打包
- 构建新的 Docker 镜像(建议更新标签)
- 更新 deployment.yaml 中的镜像标签
- 重新应用配置文件
提示:
- 确保 Docker Desktop 的 Kubernetes 集群正常运行
- 如果遇到镜像拉取问题,确保使用了正确的镜像名称和标签
- 资源限制可以根据实际需求在 deployment.yaml 中调整
- 建议在生产环境使用私有镜像仓库
需要我详细解释任何步骤吗?
这个错误是因为 Kubernetes 无法拉取 `mf-efficiency:latest` 镜像。出现这个问题的原因是当使用 Docker Desktop 的 Kubernetes 时,需要确保本地镜像能被 Kubernetes 识别到。让我帮你解决这个问题:
1. 首先确认本地是否有这个镜像:
```bash
docker images | grep mf-efficiency
- 如果本地有这个镜像,需要做以下处理:
方案一:使用 docker hub(推荐)
# 1. 给镜像打标签,添加你的 Docker Hub 用户名
docker tag mf-efficiency:latest your-username/mf-efficiency:latest
# 2. 登录到 Docker Hub
docker login
# 3. 推送镜像到 Docker Hub
docker push your-username/mf-efficiency:latest
# 4. 修改 deployment.yaml 中的镜像名称
kubectl set image deployment/mf-efficiency mf-efficiency=your-username/mf-efficiency:latest
方案二:强制使用本地镜像(适用于测试环境)
# 1. 修改 deployment.yaml,添加 imagePullPolicy
apiVersion: apps/v1
kind: Deployment
metadata:
name: mf-efficiency
spec:
replicas: 1
selector:
matchLabels:
app: mf-efficiency
template:
metadata:
labels:
app: mf-efficiency
spec:
containers:
- name: mf-efficiency
image: mf-efficiency:latest
imagePullPolicy: Never # 强制使用本地镜像,不去远程拉取
ports:
- containerPort: 8001
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "512Mi"
cpu: "500m"
- 应用更新后的配置:
# 删除现有的 pod,让 Kubernetes 重新创建
kubectl delete pod mf-efficiency-74bc6fd6f9-bqr7v
# 如果使用了新的 deployment 配置文件
kubectl apply -f deployment.yaml
- 检查部署状态:
kubectl get pods
kubectl describe pod <new-pod-name>
建议:
- 在生产环境中,最好使用私有镜像仓库或 Docker Hub
- 使用明确的镜像版本标签,避免使用 latest
- 如果是测试环境,使用
imagePullPolicy: Never
是最简单的解决方案
三、最终效果
部署成功后,访问:
http://localhost:30001/MFEfficiency/hello
注:以上内容参考 claude.ai