mac docker desktop k8s 部署 springboot 项目

一、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. 访问应用
  • 通过 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

如果需要更新应用:

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

提示:

  • 确保 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

下面是具体的部署步骤:

  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. 访问应用
  • 通过 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

如果需要更新应用:

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

提示:

  • 确保 Docker Desktop 的 Kubernetes 集群正常运行
  • 如果遇到镜像拉取问题,确保使用了正确的镜像名称和标签
  • 资源限制可以根据实际需求在 deployment.yaml 中调整
  • 建议在生产环境使用私有镜像仓库

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


这个错误是因为 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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容