【问题标题】:ImagePullBackOff: Back-off pulling image "argoproj/argosay:v2"ImagePullBackOff: 后退​​拉图像\"argoproj/argosay:v2\"
【发布时间】:2023-01-22 01:02:41
【问题描述】:

我已经在 AWS EKS 上配置了 Argo 工作流。 EKS 托管在私有子网上,即无法上网。

  1. 我将 workflow-controller 图像、argo-server 图像和 executor-image 上传到我的私人 ECR
  2. 为了在 EKS 上安装 Argo 工作流,我修改了 install.yaml file,如下所示。

    // Workflow-controller

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: workflow-controller
      namespace: argo
    spec:
      selector:
        matchLabels:
          app: workflow-controller
      template:
        metadata:
          labels:
            app: workflow-controller
        spec:
          containers:
          - args:
            - --configmap
            - workflow-controller-configmap
            - --executor-image
            - <aws_account_no>.dkr.ecr.eu-central-1.amazonaws.com/argoworkflow:argoexec-v3.4.4
            command:
            - workflow-controller
            env:
            - name: LEADER_ELECTION_IDENTITY
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            image: <aws_account_no>.dkr.ecr.eu-central-1.amazonaws.com/argoworkflow:workflow-controller-3.4.4
            livenessProbe:
              failureThreshold: 3
              httpGet:
                path: /healthz
                port: 6060
              initialDelaySeconds: 90
              periodSeconds: 60
              timeoutSeconds: 30
            name: workflow-controller
            ports:
            - containerPort: 9090
              name: metrics
            - containerPort: 6060
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                - ALL
              readOnlyRootFilesystem: true
              runAsNonRoot: true
          nodeSelector:
            kubernetes.io/os: linux
          priorityClassName: workflow-controller
          securityContext:
            runAsNonRoot: true
          serviceAccountName: argo
    
    

    // Argo Server deployment file

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: argo-server
      namespace: argo
    spec:
      selector:
        matchLabels:
          app: argo-server
      template:
        metadata:
          labels:
            app: argo-server
        spec:
          containers:
          - args:
            - server
            env: []
            image: <aws_account_no>.dkr.ecr.eu-central-1.amazonaws.com/argoworkflow:argocli-v3.4.4
            name: argo-server
            ports:
            - containerPort: 2746
              name: web
            readinessProbe:
              httpGet:
                path: /
                port: 2746
                scheme: HTTPS
              initialDelaySeconds: 10
              periodSeconds: 20
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                - ALL
              readOnlyRootFilesystem: true
              runAsNonRoot: true
            volumeMounts:
            - mountPath: /tmp
              name: tmp
          nodeSelector:
            kubernetes.io/os: linux
          securityContext:
            runAsNonRoot: true
          serviceAccountName: argo-server
          volumes:
          - emptyDir: {}
            name: tmp
    

    没有其他变化。

    1. kubectl apply -f install.yaml

    我能够使用我的 ECR 图像运行工作流程,但是当我运行 steps/DAG 时,它会给出错误消息。因为在后台它正在通过互联网搜索 argoproj/argosay:v2 图像,即 docker。但由于它托管在私有子网中,因此无法找到图像。

    有没有办法将此图像上传到 aws ECR(私有存储库)并在安装过程中引用该图像(install.yaml)?

【问题讨论】:

    标签: kubernetes workflow argo-workflows


    【解决方案1】:

    拉取镜像,标记它,将它推送到您的私有注册表。 但是,您需要从某个地方访问您的私有注册表。

    docker pull imagename
    docker tag imagename registryUrl/imagename
    docker push registry/imagename
    

    在您的部署中使用:

     image: registryUrl:imageName
    

    现在您的部署将尝试访问您的注册表,该注册表应受密码保护。

    使用用户名和密码在部署运行的命名空间中创建一个秘密。

    然后使用秘密:

      containers:
      - name: my-container
        image: registryUrl/myimage
      imagePullSecrets:
      - name: regcred # name of the secret you created
    

    整个过程描述here

    如果您绝对无法访问互联网来拉/推图像,还有另一种可能性。

    docker image save myimage -o filename
    

    这会创建一个包含图像的文件,您可以传输该文件,然后您可以从该文件重新创建图像:

    docker image import file
    

    如果这对您来说是一个选项,请点击 docker docu 的链接。

    Image save

    image import

    【讨论】:

      猜你喜欢
      • 2020-08-30
      • 2022-12-11
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2022-10-31
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多