docker buildkit не поддерживается демоном в кластере AWS EKS kubernetes

Я использую Build Toolkit для создания образа докера для каждого микросервиса.

./build.sh

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

Это работает на моей машине с докером (18.09.2).

Однако это не работает с Jenkins, я настроил его следующим образом:

  • EKS снабжен модулем Terraform

    module "eks" {
      source   = "terraform-aws-modules/eks/aws"
      version  = "5.0.0"
      # ....
    }
    
  • Jenkins развернут на EKS (v1.12.10-eks-ffbd9, docker://18.6.1) через эту диаграмму Helm.

  • Плагины Jenkins, определенные в разделе Значения выпуска helm:

    • кубернетес:1.18.1
    • рабочий процесс:2.33
    • рабочий процесс-агрегатор:2.6
    • привязка учетных данных:1.19
    • git:3.11.0
    • синий океан: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 kubernetes:1.18.1?

2 ответа

Согласно источникам docker-ce для запускаbuildkit сеанс, есть два требования для успешной проверки isSessionSupported:

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

Так:

  • проверьте версию вашего docker-cli библиотека
  • и является HasExperimental опция включена.

Чтобы проверить, поддерживает ли он Experimantal, вы можете запустить из оболочки:

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

Поддержка Docker buildkit вышла из экспериментальной версии 18.09, поэтому вам может потребоваться обновить Docker внутри EKS:

ЭКС (v1.12.10-eks-ffbd9, докер://18.6.1

Или, возможно, у вас есть старый образ (18-dindдолжен быть достаточно новым, но более старая версия этого тега, указывающая на 18.06 или 18.03, не будет). Ты можешь попробовать18.09-dind а также 19-dind которые должны работать, если сборка действительно происходит внутри dind.

Другие вопросы по тегам