--- name: VM kind smoke # yamllint disable-line rule:truthy on: workflow_dispatch: jobs: kind: runs-on: [self-hosted, vm-dev] steps: - name: Verify Docker shell: bash run: | set -euo pipefail docker info echo '### runner cgroup' cat /proc/self/cgroup cat /sys/fs/cgroup/cgroup.type cat /sys/fs/cgroup/cgroup.controllers cat /sys/fs/cgroup/cgroup.subtree_control echo '### nested private cgroup namespace' docker run --rm --privileged --cgroupns=private alpine:3.22 \ sh -c 'cat /proc/self/cgroup; cat /sys/fs/cgroup/cgroup.type' echo '### nested host cgroup namespace' docker run --rm --privileged --cgroupns=host alpine:3.22 \ sh -c 'cat /proc/self/cgroup; cat /sys/fs/cgroup/cgroup.type' - name: Install kind shell: bash run: | set -euo pipefail version=v0.33.0 base_url="https://kind.sigs.k8s.io/dl/${version}" curl --fail --location --silent --show-error \ --output /tmp/kind "${base_url}/kind-linux-amd64" curl --fail --location --silent --show-error \ --output /tmp/kind.sha256sum \ "${base_url}/kind-linux-amd64.sha256sum" checksum=$(cut -d ' ' -f1 /tmp/kind.sha256sum) printf '%s %s\n' "$checksum" /tmp/kind | sha256sum --check chmod 0755 /tmp/kind - name: Create and delete kind cluster shell: bash run: | set -euo pipefail diagnose_and_cleanup() { status=$? node=smoke-control-plane if (( status != 0 )) && docker inspect "$node" >/dev/null 2>&1; then echo '::group::kind node inspect' docker inspect "$node" echo '::endgroup::' echo '::group::kind node logs' docker logs "$node" 2>&1 || true echo '::endgroup::' echo '::group::kind node guest state' docker exec "$node" bash -c ' set +e echo "### pid 1" ps -p 1 -o pid,ppid,user,stat,comm,args cat /proc/1/status echo "### cgroup" cat /proc/1/cgroup findmnt -R /sys/fs/cgroup stat -fc "%T %a" /sys/fs/cgroup echo "### systemd" systemctl --no-pager --failed systemctl --no-pager status \ multi-user.target containerd.service kubelet.service echo "### CRI containers" endpoint=unix:///run/containerd/containerd.sock crictl --runtime-endpoint "$endpoint" ps --all for id in $( crictl --runtime-endpoint "$endpoint" ps --all --quiet ); do echo "### CRI container $id" crictl --runtime-endpoint "$endpoint" inspect "$id" crictl --runtime-endpoint "$endpoint" logs "$id" done journalctl --no-pager -b -n 500 ' 2>&1 || true echo '::endgroup::' fi /tmp/kind delete cluster --name smoke || true exit "$status" } trap diagnose_and_cleanup EXIT /tmp/kind create cluster --name smoke --wait 180s --retain /tmp/kind get clusters | grep -Fx smoke