AWS EKS kubernetes集群中的守护程序不支持docker buildkit

时间:2019-09-09 03:10:53

标签: docker jenkins kubernetes terraform docker-buildkit

我正在使用Build Toolkit为每个微服务构建docker映像。

./ build.sh

export DOCKER_BUILDKIT=1
# ....
docker build -t ....
# ... 

这可以在我使用docker(18.09.2)的计算机上使用。

但是,它不适用于Jenkins,我将其设置如下:

  • EKS已配备Terraform模块

    module "eks" {
      source   = "terraform-aws-modules/eks/aws"
      version  = "5.0.0"
      # ....
    }
    
  • Jenkins通过此Helm Chart部署在EKS(v1.12.10-eks-ffbd9docker://18.6.1)上。

  • helm版本的值中定义的詹金斯插件:

    • kubernetes:1.18.1
    • workflow-job:2.33
    • 工作流聚合器:2.6
    • credentials-binding:1.19
    • git:3.11.0
    • blueocean:1.19.0
    • bitbucket-oauth:0.9
  • Jenkins Pipeline是声明性的,它使用Pod模板,其中容器图像为docker:18-dind,容器名称为dind

  • 这是我的Jenkinsfile

    pipeline {
      agent {
        kubernetes {
          defaultContainer 'jnlp'
          yamlFile 'jenkins-pod.yaml'
        }
      }
      stages {
        stage('Build Backends') {
          steps {
            container('dind') {
              sh 'chmod +x *sh'
              sh './build.sh -t=dev'
            }
            containerLog 'dind'
          }
        }
      }
    

    }

Jenkins执行此管道时,显示此错误:

buildkit not supported by daemon

我不确定应该升级哪个软件才能使docker-buildkit正常工作?以及哪个版本?

  • Terraform eks模块现在是5.0.0吗?

  • docker:18-dind图片,其行为类似于临时Jenkins奴隶的环境?

  • Jenkins插件kubernetes:1.18.1吗?

2 个答案:

答案 0 :(得分:2)

对Docker buildkit的支持是从18.09开始进行的,因此您可能需要在EKS内升级Docker:

  

EKS(v1.12.10-eks-ffbd9,docker://18.6.1

或者您有一个旧的dind图像(18-dind应该足够新,但是指向18.06或18.03的该标签的较旧版本则不够)。您可以尝试18.09-dind19-dind,如果构建实际上是在Dind内部进行的,那么它们都应该起作用。

答案 1 :(得分:1)

根据docker-ce sources开始buildkit会话,进行成功检查isSessionSupported有两个要求:

  • dockerCli.ServerInfo().HasExperimental
  • versions.GreaterThanOrEqualTo(dockerCli.Client().ClientVersion(), "1.31"

因此,请检查您的docker-cli库的版本以及是否启用了HasExperimental选项。

要检查它是否具有实验支持,可以从shell运行:

docker version -f '{{.Server.Experimental}}'