Kubernetes拉取MS SQL Server Express公共镜像时遇ImagePullBackOff问题
问题描述
跟随Les Jackson的微服务教程部署MS SQL Server时,Pod始终处于ImagePullBackOff状态。执行kubectl describe pod后显示拉取镜像时出现rpc error: code = Unknown desc = context deadline exceeded错误。使用本地Docker Desktop Kubernetes,镜像为公共镜像,确认路径正确,更换版本也无效。
部署文件
apiVersion: apps/v1 kind: Deployment metadata: name: mssql-depl spec: replicas: 1 selector: matchLabels: app: mssql template: metadata: labels: app: mssql spec: containers: - name: mssql image: mcr.microsoft.com/mssql/server:2017-latest ports: - containerPort: 1433 env: - name: MSSQL_PID value: "Express" - name: ACCEPT_EULA value: "Y" - name: SA_PASSWORD valueFrom: secretKeyRef: name: mssql key: SA_PASSWORD volumeMounts: - mountPath: /var/opt/mssql/data name: mssqldb volumes: - name: mssqldb persistentVolumeClaim: claimName: mssql-claim --- apiVersion: v1 kind: Service metadata: name: mssql-clusterip-srv spec: type: ClusterIP selector: app: mssql ports: - name: mssql protocol: TCP port: 1433 # this is default port for mssql targetPort: 1433 --- apiVersion: v1 kind: Service metadata: name: mssql-loadbalancer spec: type: LoadBalancer selector: app: mssql ports: - protocol: TCP port: 1433 # this is default port for mssql targetPort: 1433
持久卷声明
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mssql-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 200Mi
Pod状态
commands-depl-688f77b9c6-vln5v 1/1 Running 0 2d21h mssql-depl-5cd6d7d486-m8nw6 0/1 ImagePullBackOff 0 4m54s platforms-depl-6b6cf9b478-ktlhf 1/1 Running 0 2d21h
关键事件
Warning Failed 102s kubelet Failed to pull image "mcr.microsoft.com/mssql/server:2017-latest": rpc error: code = Unknown desc = context deadline exceeded
排查方向与解决方法
- 本地手动拉取镜像:直接在终端执行
docker pull mcr.microsoft.com/mssql/server:2017-latest,确认是否能成功拉取。如果本地拉取也超时,说明是网络问题,需要检查网络连接,或者配置Docker镜像加速源。 - 检查Docker Desktop网络配置:进入Docker Desktop设置 -> Resources -> Network,确认代理配置是否正确,是否开启VPN导致网络异常,尝试关闭VPN后重新拉取。
- 测试Kubernetes镜像拉取功能:部署一个简单的镜像(比如
nginx:alpine),验证Kubernetes的镜像拉取通道是否正常。如果这个镜像也拉取不到,说明Kubernetes的网络配置存在问题。 - 调整镜像拉取策略:在Deployment的容器配置中添加
imagePullPolicy: IfNotPresent,让K优先使用本地已有的镜像,避免重复拉取。 - 修改PVC访问模式:当前PVC使用
ReadWriteMany模式,Docker Desktop默认存储类可能不支持该模式,尝试改为ReadWriteOnce,单节点Kubernetes集群通常只需要单节点读写权限,修改后重新部署PVC和Deployment。
内容的提问来源于stack exchange,提问作者Ceres
相关产品推荐
相关产品推荐

