Java开发

mac docker desktop k8s 部署 spring

2024-11-02  本文已影响0人  _浅墨_
一、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

下面是具体的部署步骤:

  1. 准备工作

    • 确保安装了 Docker Desktop
    • 在 Docker Desktop 设置中启用 Kubernetes
    • 确保你的 SpringBoot 项目能正常打包
  2. 打包 SpringBoot 项目

mvn clean package
  1. 构建 Docker 镜像
docker build -t springboot-app:latest .
  1. 部署到 Kubernetes
# 创建 deployment
kubectl apply -f deployment.yaml

# 创建 service
kubectl apply -f service.yaml
  1. 验证部署状态
# 查看 deployment 状态
kubectl get deployments

# 查看 pod 状态
kubectl get pods

# 查看 service 状态
kubectl get services
  1. 访问应用

常用调试命令:

# 查看 pod 详细信息
kubectl describe pod <pod-name>

# 查看 pod 日志
kubectl logs <pod-name>

# 进入 pod 容器
kubectl exec -it <pod-name> -- /bin/sh

如果需要更新应用:

  1. 修改代码并重新打包
  2. 构建新的 Docker 镜像(建议更新标签)
  3. 更新 deployment.yaml 中的镜像标签
  4. 重新应用配置文件

提示:

二、遇到问题
我将为您详细介绍如何使用 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

下面是具体的部署步骤:

  1. 准备工作

    • 确保安装了 Docker Desktop
    • 在 Docker Desktop 设置中启用 Kubernetes
    • 确保你的 SpringBoot 项目能正常打包
  2. 打包 SpringBoot 项目

mvn clean package
  1. 构建 Docker 镜像
docker build -t springboot-app:latest .
  1. 部署到 Kubernetes
# 创建 deployment
kubectl apply -f deployment.yaml

# 创建 service
kubectl apply -f service.yaml
  1. 验证部署状态
# 查看 deployment 状态
kubectl get deployments

# 查看 pod 状态
kubectl get pods

# 查看 service 状态
kubectl get services
  1. 访问应用

常用调试命令:

# 查看 pod 详细信息
kubectl describe pod <pod-name>

# 查看 pod 日志
kubectl logs <pod-name>

# 进入 pod 容器
kubectl exec -it <pod-name> -- /bin/sh

如果需要更新应用:

  1. 修改代码并重新打包
  2. 构建新的 Docker 镜像(建议更新标签)
  3. 更新 deployment.yaml 中的镜像标签
  4. 重新应用配置文件

提示:

需要我详细解释任何步骤吗?


这个错误是因为 Kubernetes 无法拉取 `mf-efficiency:latest` 镜像。出现这个问题的原因是当使用 Docker Desktop 的 Kubernetes 时,需要确保本地镜像能被 Kubernetes 识别到。让我帮你解决这个问题:

1. 首先确认本地是否有这个镜像:
```bash
docker images | grep mf-efficiency
  1. 如果本地有这个镜像,需要做以下处理:

方案一:使用 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"

  1. 应用更新后的配置:
# 删除现有的 pod,让 Kubernetes 重新创建
kubectl delete pod mf-efficiency-74bc6fd6f9-bqr7v

# 如果使用了新的 deployment 配置文件
kubectl apply -f deployment.yaml
  1. 检查部署状态:
kubectl get pods
kubectl describe pod <new-pod-name>

建议:

  1. 在生产环境中,最好使用私有镜像仓库或 Docker Hub
  2. 使用明确的镜像版本标签,避免使用 latest
  3. 如果是测试环境,使用 imagePullPolicy: Never 是最简单的解决方案

三、最终效果

部署成功后,访问:
http://localhost:30001/MFEfficiency/hello

注:以上内容参考 claude.ai

上一篇 下一篇

猜你喜欢

热点阅读