You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot+Kubernetes环境中Couchbase及应用镜像拉取失败问题

问题:Kubernetes部署Spring Boot+Couchbase时镜像拉取超时

我正在实现Spring Boot整合Couchbase的示例,已完成Docker化流程,在Minikube的Kubernetes环境部署时遇到镜像拉取超时问题。启动Minikube并打开仪表盘后,执行kubectl apply -f k8s命令,出现以下错误:

Failed to pull image "couchbase:latest": rpc error: code = Unknown desc = context deadline exceeded

同时,自定义应用todowithcouchbase也抛出同类错误:

Failed to pull image "noyandocker/todowithcouchbase:latest": rpc error: code = Unknown desc = context deadline exceeded

以下是相关配置文件:

1. app-config.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  COUCHBASE_BUCKET: "todo_list"
  COUCHBASE_HOST: "couchbase"

2. couchbase-pv.yml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: couchbase-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data/couchbase
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: couchbase-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

3. couchbase-secret.yml

apiVersion: v1
kind: Secret
metadata:
  name: couchbase-secret
type: Opaque
data:
  username: QWRtaW5pc3RyYXRvcg== # Base64编码的'Administrator'
  password: MTIzNDU2           # Base64编码的'123456'

4. couchbase-statefulset.yml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: couchbase
spec:
  selector:
    matchLabels:
      app: couchbase
  serviceName: couchbase
  replicas: 1
  template:
    metadata:
      labels:
        app: couchbase
    spec:
      containers:
        - name: couchbase
          image: couchbase:latest
          ports:
            - containerPort: 8091
            - containerPort: 11210
          env:
            - name: COUCHBASE_ADMINISTRATOR_USERNAME
              valueFrom:
                secretKeyRef:
                  name: couchbase-secret
                  key: username
            - name: COUCHBASE_ADMINISTRATOR_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: couchbase-secret
                  key: password
            - name: COUCHBASE_BUCKET
              valueFrom:
                configMapKeyRef:
                  name: app-config
                  key: COUCHBASE_BUCKET
          volumeMounts:
            - name: couchbase-storage
              mountPath: /opt/couchbase/var
      volumes:
        - name: couchbase-storage
          persistentVolumeClaim:
            claimName: couchbase-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: couchbase-service
spec:
  selector:
    app: couchbase
  ports:
    - name: admin-port
      protocol: TCP
      port: 8091
      targetPort: 8091
    - name: data-port
      protocol: TCP
      port: 11210
      targetPort: 11210
  type: NodePort

5. todowithcouchbase-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: todowithcouchbase
spec:
  replicas: 1
  selector:
    matchLabels:
      app: todowithcouchbase
  template:
    metadata:
      labels:
        app: todowithcouchbase
    spec:
      containers:
        - name: todowithcouchbase
          image: noyandocker/todowithcouchbase:latest
          ports:
            - containerPort: 2323
          envFrom:
            - configMapRef:
                name: app-config
            - secretRef:
                name: couchbase-secret
---
apiVersion: v1
kind: Service
metadata:
  name: todowithcouchbase-service
spec:
  selector:
    app: todowithcouchbase
  ports:
    - protocol: TCP
      port: 2323
      targetPort: 2323
  type: NodePort

解决方案:镜像拉取超时问题排查与修复

1. 检查并修复Minikube网络连接

Minikube节点可能无法访问Docker Hub,先测试连通性:

minikube ssh
curl -I https://hub.docker.com

若无法访问,重启Minikube并使用国内镜像加速:

minikube delete
minikube start --image-mirror-country='cn' --registry-mirror=https://registry.docker-cn.com

2. 提前在Minikube节点拉取镜像

直接在Minikube内部拉取所需镜像,避免部署时的网络延迟:

minikube ssh
docker pull couchbase:latest
docker pull noyandocker/todowithcouchbase:latest

拉取完成后重新执行部署命令:kubectl apply -f k8s

3. 替换latest标签为具体版本号

避免latest标签导致的镜像解析不稳定,换成明确版本。比如将couchbase:latest改为couchbase:7.2.0,自定义镜像使用固定版本标签(如noyandocker/todowithcouchbase:v1.0),修改配置文件中的image字段后重新部署。

4. 调整镜像拉取超时时间

在Deployment/StatefulSet的容器配置中添加超时参数:

containers:
- name: couchbase
  image: couchbase:latest
  imagePullPolicy: IfNotPresent
  args: ["--timeout", "300s"]

或修改Minikube的Kubelet配置:

minikube ssh
echo "imagePullTimeout: 5m0s" >> /var/lib/kubelet/config.yaml
systemctl restart kubelet

5. 设置合理的镜像拉取策略

在容器字段中添加IfNotPresent策略,本地已有镜像时不再重复拉取:

imagePullPolicy: IfNotPresent

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:13:17