使用 kaniko 在 k8s 集群中构建镜像

在 k8s 集群中构建镜像并不是一个负责的问题,主要是要将构建好的镜像推送到 private docker register 会有点麻烦,因为权限认证的问题,在 docker pull 的时候,我们使用 imagePullSecrets 设置来解决这个问题。

谷歌开发一个 kaniko 工具,用于解决在 k8s 中构建镜像相关的问题,这个工具允许你给他配置 docker auth 信息,命令如下:

  1. 基于已有的 credentials 创建 k8s secret

    1
    2
    3
    kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=$HOME/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson
  2. 配置中使用这个 secret

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    pipeline {
    agent {
    kubernetes {
    //cloud 'kubernetes'
    yaml """
    kind: Pod
    metadata:
    name: kaniko
    spec:
    containers:
    - name: kaniko
    image: gcr.io/kaniko-project/executor:debug-539ddefcae3fd6b411a95982a830d987f4214251
    imagePullPolicy: Always
    command:
    - /busybox/cat
    tty: true
    volumeMounts:
    - name: jenkins-docker-cfg
    mountPath: /root
    volumes:
    - name: jenkins-docker-cfg
    projected:
    sources:
    - secret:
    name: regcred
    items:
    - key: .dockerconfigjson
    path: .docker/config.json
    """
    }
    }
    stages {
    stage('Build with Kaniko') {
    environment {
    PATH = "/busybox:/kaniko:$PATH"
    }
    steps {
    git 'https://github.com/jenkinsci/docker-jnlp-slave.git'
    container(name: 'kaniko', shell: '/busybox/sh') {
    sh '''#!/busybox/sh
    /kaniko/executor -f `pwd`/Dockerfile -c `pwd` --insecure --skip-tls-verify --cache=true --destination=mydockerregistry:5000/myorg/myimage
    '''
    }
    }
    }
    }
    }

参考链接: