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

在Minikube中部署SQL Server镜像拉取超时问题求助

问题描述

在Minikube集群中部署SQL Server(使用mcr.microsoft.com/mssql/server镜像)时,出现镜像拉取超时失败,事件日志如下:

Events:
  Type     Reason          Age                   From     Message
  ----     ------          ----                  ----     -------
  Normal   Pulling         38h (x77 over 47h)    kubelet  Pulling image "mcr.microsoft.com/mssql/server"
  Normal   BackOff         38h (x1658 over 47h)  kubelet  Back-off pulling image "mcr.microsoft.com/mssql/server"
  Warning  Failed          38h (x79 over 47h)    kubelet  Failed to pull image "mcr.microsoft.com/mssql/server": rpc error: code = Unknown desc = context deadline exceeded

Docker Desktop中可正常拉取并运行该镜像,已尝试指定镜像标签(如:2019-latest)、设置imagePullPolicy为IfNotPresent或Never,但Kubernetes无法识别本地镜像。

排查与解决方案

1. 让Minikube识别本地Docker镜像

Minikube运行在独立环境中,使用自身的Docker daemon,直接在Docker Desktop拉取的镜像默认不会同步到Minikube,需手动导入:

  • 方法一:切换到Minikube的Docker环境后拉取镜像
    # 查看并应用Minikube的Docker环境变量
    minikube docker-env
    # 根据输出执行对应命令(Windows PowerShell示例:& minikube -p minikube docker-env --shell powershell | Invoke-Expression)
    # 拉取指定版本的SQL Server镜像
    docker pull mcr.microsoft.com/mssql/server:2019-latest
    
  • 方法二:直接将本地镜像导入Minikube
    minikube image load mcr.microsoft.com/mssql/server:2019-latest
    
  • 完成后,在Deployment配置中设置imagePullPolicy: Never,强制Kubernetes使用本地镜像,不再尝试远程拉取。

2. 延长镜像拉取超时时间

SQL Server镜像体积较大(约1.5GB+),Minikube默认拉取超时可能不足,可通过启动参数调整kubelet的超时设置:

# 先停止Minikube
minikube stop
# 启动时设置拉取超时为30分钟(可根据网络情况调整)
minikube start --extra-config=kubelet.image-pull-progress-deadline=30m

3. 检查Minikube网络连通性

若Minikube节点无法访问MCR镜像源,会导致拉取失败:

  • 进入Minikube节点测试网络:
    minikube ssh
    # 测试能否连通MCR
    curl -v https://mcr.microsoft.com
    
  • 若无法连通,需配置代理启动Minikube:
    minikube start --docker-env HTTP_PROXY=http://你的代理地址:端口 --docker-env HTTPS_PROXY=http://你的代理地址:端口
    

4. 优化Deployment配置细节

  • PVC名称mysql-pv-claim与SQL Server用途不符,建议改为mssql-pv-claim,避免后续维护混淆;
  • securityContext.privileged: true并非SQL Server运行的必要条件,若无特殊权限需求,可移除该配置,减少潜在安全风险。

修改后的Deployment示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
  namespace: mynamespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mssql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mssql
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - image: mcr.microsoft.com/mssql/server:2019-latest
        name: mssql
        imagePullPolicy: Never
        env:
        - name: ACCEPT_EULA
          value: "Y"
        - name: SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: SA_PASSWORD
        ports:
        - containerPort: 1433
          name: mssql
        volumeMounts:
        - name: mssqldb
          mountPath: /var/opt/mssql
      volumes:
      - name: mssqldb
        persistentVolumeClaim:
          claimName: mssql-pv-claim

内容的提问来源于stack exchange,提问作者Mikhail Skirukha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:09:23