docker - 在 Kubernetes 集群中部署内部 docker 镜像

标签 docker kubernetes kubeadm

我尝试部署一个我构建的 docker 镜像,它不在公共(public)或私有(private)注册表上。

我使用 imagePullPolicy: IfNotPresent用于 Kubernetes 部署。

我使用 kubeadm v1.12 的错误:

Normal   Scheduled       35s                default-scheduler       Successfully assigned default/test-777dd9bc96-chgc7 to ip-10-0-1-154
Normal   SandboxChanged  32s                kubelet, ip-10-0-1-154  Pod sandbox changed, it will be killed and re-created.
Normal   BackOff         30s (x3 over 31s)  kubelet, ip-10-0-1-154  Back-off pulling image "test_kube"
Warning  Failed          30s (x3 over 31s)  kubelet, ip-10-0-1-154  Error: ImagePullBackOff
Normal   Pulling         15s (x2 over 34s)  kubelet, ip-10-0-1-154  pulling image "test"
Warning  Failed          13s (x2 over 33s)  kubelet, ip-10-0-1-154  Failed to pull image "test": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test_kube, repository does not exist or may require 'docker login'
Warning  Failed          13s (x2 over 33s)  kubelet, ip-10-0-1-154  Error: ErrImagePull

我的部署文件:
apiVersion: apps/v1beta1
kind: Deployment
vmetadata:
  name: test-kube
spec:
  template:
    metadata:
  labels:
    app: test
spec:
  containers:
  - name: test
    image: test
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3000
    env:
    - name: SECRET-KUBE
      valueFrom:
        secretKeyRef:
          name: secret-test
          key: username

docker images]


REPOSITORY  TAG
test   latest 
test   test  

在我尝试的部署文件中

image: test and with image: test:test



同样的错误:

Error: ErrImagePull

最佳答案

  • 基于具有拉/推权限的 docker 注册表用户创建一个 secret
  • 将其用作 imagePullSecret

  • 或者
  • 预拉部署节点上的镜像

  • 创建secret及使用详情:

    Kubernetes 集群使用 docker-registry 类型的 Secret 向容器注册表进行身份验证以提取私有(private)镜像。

    创建此 Secret,将其命名为 regcred:
    kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
    

    在哪里:
    <your-registry-server> is your Private Docker Registry FQDN. (https://index.docker.io/v1/ for DockerHub)
    <your-name> is your Docker username.
    <your-pword> is your Docker password.
    <your-email> is your Docker email.
    

    然后创建一个使用该 key 的 pod:
    apiVersion: v1
    kind: Pod
    metadata:
      name: private-reg
    spec:
      containers:
      - name: private-reg-container
        image: <your-private-image>
      imagePullSecrets:
      - name: regcred
    

    对于本地镜像用例,请参阅此帖子:

    Pull a local image to run a pod in Kubernetes

    关于docker - 在 Kubernetes 集群中部署内部 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973242/

    相关文章:

    java - 将事件发布到单个微服务实例

    kubernetes - 如何在防火墙后面执行 "kubeadm init"v1.6.4

    docker - Kubernetes 不显示节点

    postgresql - 在 k8s/Skaffold 中为 Postgres 容器映射本地卷和端口绑定(bind)

    mysql - 脚本化 Jenkinsfile 中的多个 Docker

    azure - 了解 Azure Kubernetes 服务 (AKS)

    kubernetes - 无法创建 pod 沙箱 : rpc error: code = Unknown desc = failed to set up sandbox container

    node.js - Docker NPM 安装时出现奇怪的 Git 错误

    postgresql - 将 postgres docker 实例连接到 dotnet core 3.1 给出 "nodename nor servname provided, or not known error"

    docker - 如何在 Kubernetes 中保存数据?我试过 Persistent Volume 但它没有解决问题