GoogleContainerTools / skaffold

Easy and Repeatable Kubernetes Development
https://skaffold.dev/
Apache License 2.0
15.08k stars 1.63k forks source link

Cloud Native Buildpacks with arm64 #9508

Open michielboekhoff opened 3 months ago

michielboekhoff commented 3 months ago

Expected behavior

When running skaffold run / skaffold build, I expect the image to be built for linux/arm64 (when the Kubernetes nodes are running linux/arm64). This should behave, effectively, the same as a pack build which now supports arm64

Actual behavior

The following warning is printed to stdout:

WARN[0000] builder for artifact "app" doesn't support building for target platforms: "linux/arm64". Building for supported platforms "linux/amd64" instead.  subtask=app task=Build

after which the container is built for linux/amd64.

I suspect this is related to this line which enforces amd64 for Buildpacks (which is no longer true).

Information

apiVersion: skaffold/v4beta11
kind: Config
metadata:
  name: app
build:
  artifacts:
    - image: app
      buildpacks:
        builder: heroku/builder:24
        buildpacks:
          - docker://docker.io/heroku/buildpack-dotnet:0.1.1
manifests:
  rawYaml:
    - deploy/deployment.yml
    - deploy/service.yml

Steps to reproduce the behavior

skaffold build on an arm64 arch (like an M1 or a linux/arm64 machine)

ipolonskij commented 1 month ago

I face the same issue with:

apiVersion: skaffold/v4beta11
kind: Config
metadata:
  name: app
build:
  platforms: ["linux/arm64"]
  local:
    push: false
  tagPolicy:
    gitCommit: {}
  artifacts:
    - image: backend
      platforms:
        - linux/arm64
      context: backend
      buildpacks:
        builder: dashaun/builder-arm:20240403
        env:
          - BP_JVM_VERSION=21
          - BP_ARCH=arm64
deploy:
  helm:
    releases:
      - name: backend
        chartPath: kubernetes/backend
        valuesFiles:
          - kubernetes/backend/values.yaml
        version: 0.1.0
      - name: database
        chartPath: bitnami/postgresql
        version: 15.5.38
        valuesFiles:
          - kubernetes/postgres/values.yaml
ipolonskij commented 4 weeks ago

I upgraded to macOS 15.1 but face the same error.

michielboekhoff commented 3 weeks ago

@ipolonskij - I think it's because CNBs in Skaffold are only supported on x86_64, not on arm yet. I've been tinkering with a patch but it depends on the CNB you use as well. Most don't support arm yet, though the Heroku CNB does.