- 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 だった
- buildah
- kaniko は非対応
- buildkit はセットアップするもうまく動かなかった(詳細は未検証)
- しかし、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
して反映。
変更点は、
buildah bud
の引数の--no-cache
を--layers
にして、レイヤーのキャッシュを有効にする- https://github.com/tektoncd/catalog/issues/265
- もともと emptyDir()で--layers をつけていて、Tekton の run 間でキャッシュが有効でない →--no-cache にした経緯がある
--layers
のキャッシュを永続化するための PVC を追加 (build-cache)mount=type=cache
のキャッシュを永続化するための PVC を追加(build-mount-cache)
まとめ
- Tekton で Rust の Docker ビルドを高速化するために、キャッシュを有効にする方法を説明した
- ストレージがフルになったときの対応などしないといけなそうだが、趣味環境なのでそのときに考える