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

Abd*_*UMI 5 jenkins docker kubernetes terraform docker-buildkit

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

./build.sh

export DOCKER_BUILDKIT=1
# ....
docker build -t ....
# ... 
Run Code Online (Sandbox Code Playgroud)

这可以在我的机器上使用 docker (18.09.2) 运行。

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

  • EKS 配置有 Terraform 模块

    module "eks" {
      source   = "terraform-aws-modules/eks/aws"
      version  = "5.0.0"
      # ....
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • Jenkins通过此Helm Chart部署在 EKS( v1.12.10-eks-ffbd9, ) 上。docker://18.6.1

  • Jenkins 插件在 helm 版本的值中定义:

    • Kubernetes:1.18.1
    • 工作流程作业:2.33
    • 工作流程聚合器:2.6
    • 凭证绑定:1.19
    • git:3.11.0
    • 蓝海:1.19.0
    • 位桶-oauth:0.9
  • Jenkins Pipeline 是声明式的,它使用 Pod 模板,其中容器映像为docker:18-dind,容器名称为dind

  • 这是我的 Jenkins 文件

    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'
          }
        }
      }
    
    Run Code Online (Sandbox Code Playgroud)

    }

当 Jenkins 执行此管道时,它显示以下错误:

buildkit not supported by daemon
Run Code Online (Sandbox Code Playgroud)

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

  • Terraform eks 模块现在是 5.0.0?

或者

  • docker:18-dind 图像的行为类似于短暂的 Jenkins 奴隶的环境?

或者

  • 詹金斯插件kubernetes:1.18.1

Yas*_*sen 5

根据docker-ce 来源isSessionSupported,成功检查启动会话有两个要求buildkit

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

所以:

  • 检查你的docker-cli库的版本
  • 并且HasExperimental选项已启用。

要检查它是否有实验支持,请运行:

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