全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

镜像仓库与 K8s 集成

Kubernetes 需要从镜像仓库拉取镜像,下面介绍集成方法。

ImagePullSecret

创建 Secret

Bash
# 从 Docker 配置创建
kubectl create secret generic regcred \
  --from-file=.dockerconfigjson=/home/user/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson

# 或手动创建
kubectl create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username=user \
  --docker-password=password \
  --docker-email=user@example.com

使用 Secret

YAML
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-app
      image: registry.example.com/my-app:v1.0
  imagePullSecrets:
    - name: regcred

认证问题排查

查看拉取状态

Bash
# 查看 Pod 事件
kubectl describe pod my-pod

# 常见错误
# ErrImagePull: 认证失败
# ImagePullBackOff: 重试中

查看日志

Bash
# 查看 kubelet 日志
journalctl -u kubelet

# 过滤镜像拉取错误
journalctl -u kubelet | grep "Failed to pull image"

限流问题

Docker Hub 限流

YAML
Docker Hub 限流:
- 匿名用户:100 次/6 小时
- 认证用户:200 次/6 小时
- 付费用户:无限

解决方案

YAML
# 使用镜像缓存代理
# registry-mirror 配置
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
        - name: my-app
          image: mirror.gcr.io/my-app:v1.0  # 使用镜像

自建镜像代理

YAML
# Harbor 作为 K8s 镜像代理
# 配置代理缓存
# 减少直接访问 Docker Hub

镜像拉取策略

YAML
spec:
  containers:
    - name: my-app
      image: my-app:v1.0
      imagePullPolicy: Always  # 总是拉取
      # imagePullPolicy: IfNotPresent  # 本地无则拉
      # imagePullPolicy: Never  # 仅使用本地

私有仓库集成

Harbor 集成

Bash
# Harbor 配置项目权限
# K8s 使用 ServiceAccount 拉取

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-sa
secrets:
  - name: harbor-secret

AWS ECR 集成

text
# 获取 ECR 认证
aws ecr get-login-password --region us-east-1 | \
  kubectl create secret docker-registry ecr-secret \
    --docker-server=<account>.dkr.ecr.us-east-1.amazonaws.com \
    --username=AWS \
    --password-stdin

要点总结

  • ImagePullSecret 配置 K8s 拉取私有镜像认证
  • kubectl create secret docker-registry 创建认证密钥
  • ErrImagePull/ImagePullBackOff 是常见拉取失败错误
  • Docker Hub 限流可通过镜像代理或付费账号解决
  • imagePullPolicy 控制拉取策略:Always/IfNotPresent/Never

📝 发现内容有误?点击此处直接编辑

← 上一篇 本地开发 Minikube/Kind
下一篇 → 容器化数据库调优
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库