繁体   English   中英

无法从 GitHub 到 Kubernetes 拉取公共 docker 映像包

[英]Unable to pull public docker image packages from GitHub through Kubernetes

我在 GitHub 中创建了一个示例 Node.js 项目,并为此创建了一个 docker 图像。 我将 docker 图像作为 package 上传到同一存储库中。 这是一个公共回购。 我创建了一个 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 错误。

在此处输入图像描述

我什至尝试使用 dockerconfigjson secret 和 Github 个人访问令牌的选项,但仍然是 sam 结果。

编辑:

添加了来自 pod 描述的错误消息在此处输入图像描述

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

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

似乎有一种解决方法,但我没有测试过。 它由@sudomaxime发布,可在此处获取:

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

  • 在解决此问题之前,不要介意丢失蓝/绿部署
  • 不要介意 10-15 秒的应用程序启动时间
  • 使用 docker 群 / docker 堆栈部署
  • 使用 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 until [ -z $(docker stack ps {{ your_stack_name }} -q) ]; do sleep 1; done until [ -z $(docker stack ps {{ your_stack_name }} -q) ]; do sleep 1; done以等待适当的回报。

希望它可以节省一些人的头痛。 我想一个类似的临时修复会帮助你。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM