mcpField
K
k8s-kaniko-job

k8s-kaniko-job

github.com/norberiaクラウド・DevOps0269 回インストール8 週間前に更新
リポジトリ

k8s-kaniko-job について

k8s-kaniko-jobは、Docker daemonのないKubernetesサンドボックスでLinux/amd64イメージをビルドしてプッシュするスキルです。VersityGW S3経由でコンテキストを渡してKaniko Jobを実行し、イメージダイジェストを返します。

主な機能

  1. 01Kubernetes名前空間内でのイメージビルド
  2. 02Kaniko Jobによるビルド実行
  3. 03VersityGW S3へのコンテキスト配置
  4. 04イメージのプッシュとダイジェスト取得
  5. 05失敗時の状態とログ末尾の表示

活用シーン

  1. 01Dockerのないサンドボックスでのイメージビルド
  2. 02コミットタグ付きイメージのGHCRへのプッシュ
  3. 03デプロイ用のダイジェスト固定イメージ参照の取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/norberia/sealos-skills-next --skill k8s-kaniko-job

インストール後、Claude Code で/k8s-kaniko-jobを入力して読み込まれたか確認します。

同梱ファイルscripts/kaniko-build.py

詳細

K8s Kaniko Job

Docker デーモンがない場合に、Kubernetes 名前空間内で linux/amd64 イメージをビルドします。1 つのスクリプトですべての処理を行います。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、最大 1800 秒のアクティブ期限、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 の状態、Kaniko ログの末尾を出力します。

症状原因 → 対処
Job Pod の executor イメージが ImagePullBackOff になるクラスターが gcr.io/kaniko-project/executor をプルできません → 報告してください。ローカルへのフォールバックはありません
Kaniko ログに error uploading context/S3 connection refused が表示されるJob から VersityGW エンドポイントに接続できません → .sealos/build-runtime.json.s3Endpoint を確認してください。Job の接続先に 127.0.0.1 を指定しないでください
Kaniko ログのプッシュ時に 401/403 が表示されるトークンのスコープまたは所有者が一致していません → スクリプトの事前チェック出力で認証済みログイン名を確認してください
Dockerfile のビルドエラーワークスペース内の Dockerfile を修正して再実行してください。実行のたびに新しい Job が作成されます
Job の期限を超過したビルドに時間がかかりすぎています → コンテキストを縮小し(.dockerignore)、より小さいベースイメージを使ってください

ビルド専用の Secret(use-sealos-ghcr-auth-*)は名前空間内に作成され、TTL は設定されません。Job 自体は 1 時間後にガベージコレクションされます。ユーザーから依頼がない限り、クリーンアップはサンドボックスの終了処理に任せてください。

GITHUB_TOKEN、S3 認証情報、Secret のペイロードを出力しないでください。Secret を --build-arg で渡さないでください。ビルド引数は Job 仕様で確認できます。

コメント