k8s-kaniko-job について
k8s-kaniko-jobは、DockerデーモンのないKubernetes名前空間でlinux/amd64イメージをビルドするスキルです。ビルドコンテキストをまとめてKaniko Jobを実行し、イメージダイジェストと参照を返します。
主な機能
- 01KubernetesでKanikoを使ったイメージビルド
- 02VersityGW S3経由のコンテキスト転送
- 03ランタイム設定に基づくビルド構成
- 04イメージダイジェストと参照の出力
- 05秘匿情報を伏せたJobマニフェスト生成
活用シーン
- 01Dockerデーモンがない環境でのイメージビルド
- 02タグ付きイメージのGHCRへの公開
- 03生成されたJob構造の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ labring/ sealos-skills --skill k8s-kaniko-jobインストール後、Claude Code で/k8s-kaniko-jobを入力して読み込まれたか確認します。
同梱ファイルscripts/kaniko-build.pyscripts/test_kaniko_build.py
詳細
K8s Kaniko ジョブ
Docker デーモンが存在しない場合に、Kubernetes 名前空間内で linux/amd64 イメージをビルドします。スクリプトがフロー全体を管理するため、独自に Job や Secret を作成しないでください。
python3 scripts/kaniko-build.py --image ghcr.io/<owner>/<repo>:<tag> \
[--context <dir>] [--dockerfile <path-relative-to-context>] \
[--build-arg KEY=value ...]
scripts/ はこのスキルのディレクトリを基準に解決してください。.sealos/build-runtime.json を見つけられるように、プロジェクトのワークスペースからスクリプトを実行してください。
仕組み
tar the context (excludes .git/.sealos/.versitygw-*)
→ DevBox-local VersityGW S3 store (POSIX dir, served on port 1319)
→ Kaniko Job in the current namespace pulls s3://... via the
Job-reachable endpoint from .sealos/build-runtime.json
→ pushes the tagged image to ghcr.io with a build-only registry Secret
→ digest captured from the pod termination message
すべてが次の順序で自動的に解決されます:CLI フラグ → .sealos/build-runtime.json(コントロールプレーンが書き込みます。Job から到達可能な s3Endpoint、S3 の secretKeyRef、ビルド期限)→ DevBox のランタイム環境変数(KANIKO_CONTEXT_POSIX_DIR、S3_ENDPOINT、SEALOS_DEVBOX_JWT_SECRET、…)→ デフォルト値。Job は backoffLimit: 0、最大 1800s のアクティブ期限、ttlSecondsAfterFinished: 3600、現在の ServiceAccount を使用して実行されます。
前提条件
kubectlがサンドボックスの名前空間を参照していること(kubeconfig は注入されます。このスクリプトがリージョン、ワークスペース、その他の名前空間を選択することはありません)。write:packagesスコープを持つGITHUB_TOKEN。対象イメージの所有者は、トークンのログイン名を小文字にしたものと一致している必要があります:ghcr.io/<login>/<repo>:<tag>。タグにはコミット SHA またはタイムスタンプを使用し、latestは使用しないでください。- Job/Secret の作成と Pod/ログの読み取りを行う名前空間権限。
- コンテキスト内に Dockerfile があること(存在しない場合は先に作成してください。ルールは
../use-sealos/references/build.md§1 を参照。このファイルの buildx/レジストリに関するセクションはここでは適用されません)。
結果の確認
成功すると、標準出力に digest と image_ref(ghcr.io/<owner>/<repo>@sha256:...)を含む JSON が出力されます。デプロイメントマニフェストでは image_ref を優先してください。ダイジェストのピン留めにより、タグが変更されても参照先が維持されます。digest が null の場合(まれなケースですが、終了メッセージが失われた場合)、image のタグ参照を使用してください。
pull は後続のプル動作を示します:
-
anonymous— パッケージは公開されています。プルシークレットは不要です。 -
private— GHCR パッケージはデフォルトで非公開です。名前空間にプルシークレットを作成し、ワークロードから参照してください (imagePullSecrets: [{name: <app>-pull}]、名前は固定のリテラル値です):kubectl create secret docker-registry <app>-pull \ --docker-server=ghcr.io --docker-username=<login> \ --docker-password="$GITHUB_TOKEN" \ --dry-run=client -o yaml | kubectl apply -f - -
indeterminate— 最初の Pod のプルを監視して確認し、ErrImagePullが発生した場合はプルシークレットを追加してください。
失敗時の切り分け
失敗時、スクリプトは Job と名前空間を報告しますが、認証情報が含まれる可能性のある Pod の生ログや Kubernetes のエラーテキストは出力しません。指定された Job と Pod を直接調査し、機密情報を伏せた内容のみを要約してください。
| 症状 | 原因 → 対処 |
|---|---|
Job の Pod で、実行イメージの ImagePullBackOff が発生する | クラスターが gcr.io/kaniko-project/executor をプルできません → 報告してください。ローカルでの代替手段はありません |
Kaniko ログ:error uploading context/S3 接続拒否 | Job が VersityGW エンドポイントに到達できません → .sealos/build-runtime.json.s3Endpoint を確認してください。Job の接続先に 127.0.0.1 を指定しないでください |
Kaniko ログ:プッシュ時に 401/403 | トークンのスコープまたは所有者の不一致 → Job の作成前にスクリプトが両方を検証します。トークンとイメージ所有者を非公開で確認してください |
| Dockerfile のビルドエラー | ワークスペース内の Dockerfile を修正して再実行してください。実行ごとに新しい Job が作成されます |
| Job の期限超過 | ビルドに時間がかかりすぎています → コンテキストを縮小し(.dockerignore)、より小さいベースイメージを使用してください |
ビルド専用 Secret(use-sealos-ghcr-auth-*)は名前空間内に作成され、TTL はありません。Job 自体は 1 時間後にガベージコレクションされます。ユーザーから依頼がない限り、クリーンアップはサンドボックスの終了処理に任せてください。
GITHUB_TOKEN、S3 認証情報、Secret のペイロードは決して出力しないでください。Secret を --build-arg で渡さないでください。ビルド引数は Job の仕様に表示されます。--render-only は構造を確認するための合成された、機密情報を伏せた Job マニフェストを出力します。ランタイム契約やビルド引数の値は公開されません。