来自 Private Artifactory 的 K8s 镜像拉取

问题描述

我正在使用下面的清单来运行一些 k8s 作业,但是由于以下错误,我无法成功提交作业。

apiVersion: batch/v1
kind: Job
metadata:
  name: spark-on-eks
spec:
  template:
    spec:
      imagePullSecrets:
      - name: mycreds
      containers:
        - name: spark
          image: repo:buildversion
          command:  
            - "/bin/sh"
            - "-c"
            - '/opt/spark/bin/spark-submit \
            --master k8s://EKSEndpoint \
            --deploy-mode cluster \
            --name spark-luluapp \
            --class com.ll.jsonclass \
            --conf spark.jars.ivy=/tmp/.ivy \
            --conf spark.kubernetes.container.image=repo:buildversion \
            --conf spark.kubernetes.namespace=spark-pi \
            --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark-sa \
            --conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
            --conf spark.kubernetes.authenticate.executor.serviceAccountName=spark-sa \
            --conf spark.kubernetes.driver.pod.name=spark-job-driver \
            --conf spark.executor.instances=4 \
            local:///opt/spark/examples/App-buildversion-SNAPSHOT.jar \
            [mks,env,reg,"dd.mm.yyyy","true","off","db-comp-results","XX","XXX","XXXXX",$$,###] '

      serviceAccountName: spark-pi
      restartPolicy: Never
  backoffLimit: 4

错误:错误:ImagePullBackOff 正常拉取镜像“repo/buildversion” 警告失败 无法拉取映像“repo/buildversion”:rpc 错误:代码 = 未知描述 = 来自守护进程的错误响应:未经授权:客户端没有清单权限

我检查了我列出的机密,这些机密已经创建并与已部署的应用程序一起使用。

这个问题是否与用作 pods/jobs 的秘密注入的 init 容器有关,或者我的清单中缺少的东西,此外,我在其中一个 Jenkins Slave 上作为 Auotmation 的一部分运行在上面的步骤,它适用于其他应用程序 pod(不确定 k8s 作业)

解决方法

您是否在 Artifactory 中使用端口、docker 路径或反向代理配置?

首先在另一台机器上验证你可以拉取镜像。

即(码头路径)

docker login ${ARTIFACTORY_URL}
docker pull ${ARTIFACTORY_URL}/repo/image:tag

鉴于命名约定,我相信您可能正在使用反向代理配置:

"repo:buildversion"

在这种情况下,您需要对 repo 进行 docker 登录:

docker login repo
docker push repo:buildversion

这对于 k8s 意味着您可能使用了错误的 docker-server URL,这就是为什么即使使用有效的 API 密钥也无法进行身份验证。

如果您使用反向代理,请尝试以下操作:

kubectl create secret docker-registry mycred \
  --docker-server=repo \
  --docker-username=<your-name> \
  --docker-password=<your-api-key> \
  --docker-email=<your-email>

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...