avatar
tkat0.dev
Published on

TektonでRustのコンテナビルドする際のmount=type=cacheを有効にする

Table of Contents

Summary

  • Tekton で Rust のコンテナをビルドしたい
    • Tekton は CI/CD ツールで、趣味用の Kubernetes クラスタで運用している
  • Rust のコンテナビルドの高速化方法は様々あるが、個人的には mount=type=cache をつけてキャッシュしてしまうのが楽
  • Tekton でコンテナビルドする方法はいくつかあるが、mount=type=cache に対応しているもので簡単に利用できたのは buildah だった
  • しかし、Tekton Hub にある Task そのままではキャッシュを有効にできないため変更が必要
    • キャッシュするディレクトリの PVC をつくり、mount してやる

Task buildah.yaml の変更

以下のように、オリジナルの Task を変更した

buildah.yaml

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: buildah
  ...
spec:
  ...
  steps:
  - name: build
    image: $(params.BUILDER_IMAGE)
    workingDir: $(workspaces.source.path)
    script: |
      [[ "$(workspaces.sslcertdir.bound)" == "true" ]] && CERT_DIR_FLAG="--cert-dir $(workspaces.sslcertdir.path)"
      [[ "$(workspaces.dockerconfig.bound)" == "true" ]] && export DOCKER_CONFIG="$(workspaces.dockerconfig.path)"
      buildah ${CERT_DIR_FLAG} --storage-driver=$(params.STORAGE_DRIVER) bud \
        $(params.BUILD_EXTRA_ARGS) --format=$(params.FORMAT) \
        --tls-verify=$(params.TLSVERIFY) --layers \
        -f $(params.DOCKERFILE) -t $(params.IMAGE) $(params.CONTEXT)
      ...
    volumeMounts:
    - name: varlibcontainers
      mountPath: /var/lib/containers
    - name: buildah-cache
      mountPath: /var/tmp/buildah-cache
    securityContext:
      privileged: true
  volumes:
  - name: varlibcontainers
    persistentVolumeClaim:
      claimName: build-cache
  - name: buildah-cache
    persistentVolumeClaim:
      claimName: build-mount-cache

build-cache.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: build-cache
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: build-mount-cache
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

変更後にkubectl apply -fして反映。

変更点は、

まとめ

  • Tekton で Rust の Docker ビルドを高速化するために、キャッシュを有効にする方法を説明した
  • ストレージがフルになったときの対応などしないといけなそうだが、趣味環境なのでそのときに考える