簡體   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