【问题标题】:Unable to pull public docker image packages from GitHub through Kubernetes无法通过 Kubernetes 从 GitHub 拉取公共 docker 镜像包
【发布时间】:2020-09-16 10:50:15
【问题描述】:

我在 GitHub 中创建了一个 sample Node.js project 并为其创建了一个 docker 映像。我将 docker 映像作为一个包上传到同一个存储库中。这是一个公共回购。我创建了一个 kubernetes 配置 yaml 文件,将此图像用作 pod 图像。以下是yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
spec:
  selector:
    matchLabels:
      component: node-server
  template:
    metadata:
      labels:
        component: node-server
    spec:
      containers:
        - name: node-server
          image: docker.pkg.github.com/lethalbrains/intense_omega/io_service:latest
          ports:
            - containerPort: 3000
      imagePullSecrets:
        - name: dockerconfigjson-github-com
---
apiVersion: v1
kind: Service
metadata:
  name: server-cluster-ip-service
spec:
  selector:
    component: node-server
  ports:
    - port: 3000
      targetPort: 3000
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/inress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /api/
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 3000 

使用 Kubectl 应用此文件并检查 pod 详细信息后,我收到 ImagePullBackOff 错误。

我什至尝试using this option 将 dockerconfigjson 密码与 Github 个人访问令牌一起使用,但仍然是 sam 结果。

编辑:

添加了来自 pod 描述的错误消息

【问题讨论】:

  • 运行kubectl describe pod查看事件,它会给你一个更详细的错误信息。
  • @coderanger,添加了来自 pod 描述的错误消息
  • 你能检查一下你在节点上运行 docker pull 是否有效吗?
  • @hoque,我可以从我的机器上拉出 docker 容器。但是我已经在我的环境中配置了我的 github 访问密钥。所以我在另一台机器上尝试了以下错误 - no basic auth credentials
  • 我认为问题在于提供的 imagepullsecrets 。请确保您使用您提供的凭据调用 pull image

标签: docker github kubernetes continuous-integration


【解决方案1】:

这似乎是 GitHub 注册表的问题,正在讨论 here。

我可以推荐的是将图像推送到docker hub,或者创建私有仓库,您可以在Using a private Docker Registry with Kubernetes 阅读。

似乎有一种解决方法,但我没有测试过。 由@sudomaxime 发布,here 提供:

对于那些以下人员来说,这是一个令人讨厌的小解决方法:

  • 在解决此问题之前,不要介意失去蓝/绿部署
  • 不要介意 10-15 秒的应用启动时间
  • 使用 docker swarm / docker stack deploys
  • 使用 CI 脚本进行部署

在您的 CI 脚本调用中:

$ docker stack rm {{ your_stack_name }}
$ until [ -z $(docker stack ps {{ your_stack_name }} -q) ]; do sleep 1; done
$ docker stack deploy --with-registry-auth -c docker-compose.yml {{ your_stack_name }}

基本上,您要求 Docker 调度程序停止 {{ your_stack_name }} 编排器下的所有服务。 docker swarm 的一个小窍门是docker stack rm 会立即返回,即使某些服务没有正确关闭,当您再次尝试部署时可能会导致网络错误。这就是为什么我们使用一个小的内联脚本until [ -z $(docker stack ps {{ your_stack_name }} -q) ]; do sleep 1; done 来等待正确的返回。

希望它可以省去一些人的麻烦。我想类似的临时修复会帮助你。

这是一个非常令人沮丧的问题,对于我们必须使用蓝/绿部署的应用,我们购买了一个私有存储库来解决该问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-09
    • 2023-02-01
    • 1970-01-01
    • 2019-08-28
    • 2018-11-16
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多