From 2b9892f7340db84a3d3f616b7f4c2437178fccb1 Mon Sep 17 00:00:00 2001 From: HarshwardhanPatil07 Date: Tue, 22 Sep 2026 17:25:49 +0530 Subject: [PATCH 1/3] feat: add Kubernetes 1.37 support Signed-off-by: HarshwardhanPatil07 --- .github/workflows/integration-tests.yml | 4 ++-- CLAUDE.md | 2 +- docs/custom-node-images.md | 16 ++++++++-------- internal/config/defaults.go | 2 +- node-images/fedora/Containerfile | 2 +- node-images/fedora/Containerfile.disk | 2 +- node-images/fedora/Makefile | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 0f7b3cb..4ed72b1 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -63,10 +63,10 @@ jobs: - name: Get supported Kubernetes versions id: set-matrix run: | - DEFAULT="1.35" + DEFAULT="1.36" FEDORA_VERSION="44" # TODO: check how to configure renovate to update this list automatically - ALL='["1.36", "1.35", "1.34"]' + ALL='["1.37", "1.36", "1.35"]' NON_DEFAULT=$(echo "$ALL" | jq -c --arg default "$DEFAULT" 'map(select(. != $default))') # Construct the staging branch tag based on the branch name that is suitable for container image # tags. It converts all the character to lower cases, and replaces all non lower cases letter, numbers, '.' diff --git a/CLAUDE.md b/CLAUDE.md index d6255b7..deb8a89 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -206,7 +206,7 @@ Host (podman) | +-- Container: k8s-mycluster-node1 (localhost/cluster:latest) | |-- libvirt + qemu - | |-- VM: Fedora bootc (kubeadm, crio, k8s 1.35) + | |-- VM: Fedora bootc (kubeadm, crio, k8s 1.36) | | |-- NIC1 (passt): internet + SSH (2222) + API (6443, control-plane only) | | |-- NIC2 (multicast 230.0.0.1:5558): cluster network 10.0.0.0/24 | | +-- Kubernetes control-plane diff --git a/docs/custom-node-images.md b/docs/custom-node-images.md index 2a3b311..5c0d771 100644 --- a/docs/custom-node-images.md +++ b/docs/custom-node-images.md @@ -70,7 +70,7 @@ cd bootc git checkout podman build \ - --build-arg base=ghcr.io/bootc-dev/bink/node:v1.35-fedora-44 \ + --build-arg base=ghcr.io/bootc-dev/bink/node:v1.36-fedora-44 \ -t localhost/custom-bootc-node:latest \ . ``` @@ -82,7 +82,7 @@ This compiles bootc from source and installs it into an image derived from the b For simpler cases (installing a different package version), write a minimal Containerfile: ```dockerfile -FROM ghcr.io/bootc-dev/bink/node:v1.35-fedora-44 +FROM ghcr.io/bootc-dev/bink/node:v1.36-fedora-44 RUN dnf -y install ``` @@ -178,7 +178,7 @@ Containerfile.disk -> qcow2 disk image (bcvk to-disk) > --cap-add=all \ > --security-opt=label=disable \ > --device /dev/fuse \ -> --build-arg KUBE_MINOR=1.35 \ +> --build-arg KUBE_MINOR=1.36 \ > -t localhost/custom-node:latest \ > -f Containerfile \ > . @@ -238,7 +238,7 @@ COPY my-source/ /src WORKDIR /src RUN make build -FROM ghcr.io/bootc-dev/bink/node:v1.35-fedora-44 +FROM ghcr.io/bootc-dev/bink/node:v1.36-fedora-44 COPY --from=custom-build /src/my-binary /usr/bin/my-binary ``` @@ -294,11 +294,11 @@ Variables in `node-images/fedora/Makefile`: | Variable | Default | Description | |----------|---------|-------------| -| `KUBE_MINOR` | `1.35` | Kubernetes minor version | +| `KUBE_MINOR` | `1.36` | Kubernetes minor version | | `FEDORA_VERSION` | `44` | Fedora base version | | `DISK_SIZE` | `10G` | VM disk size | | `BUILD_MEMORY` | `4G` | Memory for bcvk build | -| `BOOTC_IMAGE` | `ghcr.io/bootc-dev/bink/node:v1.35-fedora-44` | Bootc OCI image name | -| `NODE_IMAGE` | `ghcr.io/bootc-dev/bink/node:v1.35-fedora-44-disk` | Disk image name | -| `NODE_IMAGE_COMPOSEFS` | `ghcr.io/bootc-dev/bink/node:v1.35-fedora-44-disk-composefs` | Composefs disk image name | +| `BOOTC_IMAGE` | `ghcr.io/bootc-dev/bink/node:v1.36-fedora-44` | Bootc OCI image name | +| `NODE_IMAGE` | `ghcr.io/bootc-dev/bink/node:v1.36-fedora-44-disk` | Disk image name | +| `NODE_IMAGE_COMPOSEFS` | `ghcr.io/bootc-dev/bink/node:v1.36-fedora-44-disk-composefs` | Composefs disk image name | | `BCVK_EXTRA_ARGS` | (none) | Extra flags for `bcvk to-disk` | diff --git a/internal/config/defaults.go b/internal/config/defaults.go index c933645..87e34f4 100644 --- a/internal/config/defaults.go +++ b/internal/config/defaults.go @@ -17,7 +17,7 @@ const ( clusterImageBase = "ghcr.io/bootc-dev/bink/cluster" dnsImageBase = "ghcr.io/bootc-dev/bink/dns" - DefaultNodeImage = "ghcr.io/bootc-dev/bink/node:v1.35-fedora-44-disk" + DefaultNodeImage = "ghcr.io/bootc-dev/bink/node:v1.36-fedora-44-disk" DefaultBaseDisk = "/images/disk.qcow2" DefaultControlPlaneMemory = 1900 diff --git a/node-images/fedora/Containerfile b/node-images/fedora/Containerfile index d443f86..d4e9574 100644 --- a/node-images/fedora/Containerfile +++ b/node-images/fedora/Containerfile @@ -1,6 +1,6 @@ FROM quay.io/fedora/fedora-bootc:44 AS builder -ARG KUBE_MINOR=1.35 +ARG KUBE_MINOR=1.36 # Pin kernel to 6.19.x to work around a kernel 7.0 regression. # https://github.com/bootc-dev/bink/issues/52 ARG KERNEL_VERSION=6.19.14-300.fc44 diff --git a/node-images/fedora/Containerfile.disk b/node-images/fedora/Containerfile.disk index 0f83531..64d1688 100644 --- a/node-images/fedora/Containerfile.disk +++ b/node-images/fedora/Containerfile.disk @@ -42,7 +42,7 @@ RUN mkdir -p /output ${LOG_DIR} && \ RUN podman run --rm ${BOOTC_IMAGE} kubeadm config images list > /output/images.txt FROM scratch -ARG KUBE_MINOR=1.35 +ARG KUBE_MINOR=1.36 ARG BOOTC_IMAGE ARG BOOTC_DIGEST LABEL bink.kubeadm-version=${KUBE_MINOR} diff --git a/node-images/fedora/Makefile b/node-images/fedora/Makefile index 0192f30..03d3c41 100644 --- a/node-images/fedora/Makefile +++ b/node-images/fedora/Makefile @@ -1,6 +1,6 @@ .PHONY: build-bootc-image build-disk-image build-disk-image-composefs clean help -KUBE_MINOR ?= 1.35 +KUBE_MINOR ?= 1.36 FEDORA_VERSION ?= 44 DISK_SIZE ?= 10G BUILD_MEMORY ?= 4G From c8ee83b5fadeb8098e44983a6dc8232f5e7f8a34 Mon Sep 17 00:00:00 2001 From: HarshwardhanPatil07 Date: Thu, 1 Oct 2026 10:59:37 +0530 Subject: [PATCH 2/3] cluster: Migrate kubeadm config to v1beta4 Kubernetes 1.37 removed the kubeadm v1beta3 API. Use v1beta4 and its structured controller manager arguments so cluster initialization accepts the generated config. Signed-off-by: HarshwardhanPatil07 --- internal/cluster/kubeadm-config.yaml.tmpl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/cluster/kubeadm-config.yaml.tmpl b/internal/cluster/kubeadm-config.yaml.tmpl index f5c1f12..21eb2f6 100644 --- a/internal/cluster/kubeadm-config.yaml.tmpl +++ b/internal/cluster/kubeadm-config.yaml.tmpl @@ -1,4 +1,4 @@ -apiVersion: kubeadm.k8s.io/v1beta3 +apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration localAPIEndpoint: advertiseAddress: "{{.AdvertiseAddress}}" @@ -6,7 +6,7 @@ localAPIEndpoint: nodeRegistration: criSocket: "unix:///var/run/crio/crio.sock" --- -apiVersion: kubeadm.k8s.io/v1beta3 +apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration controlPlaneEndpoint: "{{.AdvertiseAddress}}:6443" apiServer: @@ -15,7 +15,8 @@ apiServer: - "127.0.0.1" controllerManager: extraArgs: - flex-volume-plugin-dir: "/var/lib/kubelet/volumeplugins" + - name: flex-volume-plugin-dir + value: "/var/lib/kubelet/volumeplugins" extraVolumes: - name: flexvolume-dir hostPath: "/var/lib/kubelet/volumeplugins" From 129be195cbb5e82aa751fa0a6ae311d80775e40d Mon Sep 17 00:00:00 2001 From: HarshwardhanPatil07 Date: Thu, 1 Oct 2026 11:45:14 +0530 Subject: [PATCH 3/3] node: configure CRI-O pinns path Fedora's CRI-O 1.36 package moved pinns to /usr/libexec/crio without configuring the new path. Add a conditional CRI-O drop-in so the daemon starts on affected images while preserving older package layouts. Signed-off-by: HarshwardhanPatil07 --- node-images/fedora/Containerfile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/node-images/fedora/Containerfile b/node-images/fedora/Containerfile index d4e9574..b779db6 100644 --- a/node-images/fedora/Containerfile +++ b/node-images/fedora/Containerfile @@ -37,7 +37,11 @@ COPY --from=builder /target-rootfs/ / RUN passwd -d root RUN sed -i 's|"/opt/cni/bin"|"/var/lib/cni/bin"|g' /etc/crio/crio.conf && \ - sed -i 's|"/opt/cni/net.d"|"/etc/cni/net.d"|g' /etc/crio/crio.conf + sed -i 's|"/opt/cni/net.d"|"/etc/cni/net.d"|g' /etc/crio/crio.conf && \ + if [ -x /usr/libexec/crio/pinns ]; then \ + mkdir -p /etc/crio/crio.conf.d && \ + printf '[crio.runtime]\npinns_path = "/usr/libexec/crio/pinns"\n' > /etc/crio/crio.conf.d/04-pinns.conf; \ + fi RUN bootc container lint LABEL containers.bootc 1