{"record":{"id":"dd2870061d5c1d23","repo":"kubernetes/kops","slug":"unable-to-find-containerd-config-dd2870","errorCode":null,"errorMessage":"unable to find containerd config","messagePattern":"unable to find containerd config","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/nodemodel/wellknownassets/runc.go","lineNumber":38,"sourceCode":"\t\"fmt\"\n\n\t\"github.com/blang/semver/v4\"\n\n\t\"k8s.io/kops/pkg/apis/kops/model\"\n\t\"k8s.io/kops/pkg/assets\"\n\t\"k8s.io/kops/upup/pkg/fi\"\n\t\"k8s.io/kops/util/pkg/architectures\"\n)\n\nconst (\n\truncVersionUrlAmd64 = \"https://github.com/opencontainers/runc/releases/download/v%s/runc.amd64\"\n\truncVersionUrlArm64 = \"https://github.com/opencontainers/runc/releases/download/v%s/runc.arm64\"\n)\n\nfunc FindRuncAsset(ig model.InstanceGroup, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*assets.FileAsset, error) {\n\tcontainerd := ig.RawClusterSpec().Containerd\n\tif containerd == nil {\n\t\treturn nil, fmt.Errorf(\"unable to find containerd config\")\n\t}\n\n\tif containerd.Runc == nil {\n\t\treturn nil, fmt.Errorf(\"unable to find runc config\")\n\t}\n\trunc := containerd.Runc\n\n\tcanonicalURL := \"\"\n\tknownHash := \"\"\n\n\tif runc.Packages != nil {\n\t\tif arch == architectures.ArchitectureAmd64 && runc.Packages.UrlAmd64 != nil && runc.Packages.HashAmd64 != nil {\n\t\t\tcanonicalURL = fi.ValueOf(runc.Packages.UrlAmd64)\n\t\t\tknownHash = fi.ValueOf(runc.Packages.HashAmd64)\n\t\t}\n\t\tif arch == architectures.ArchitectureArm64 && runc.Packages.UrlArm64 != nil && runc.Packages.HashArm64 != nil {\n\t\t\tcanonicalURL = fi.ValueOf(runc.Packages.UrlArm64)\n\t\t\tknownHash = fi.ValueOf(runc.Packages.HashArm64)","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/nodemodel/wellknownassets/runc.go#L20-L56","documentation":"FindRuncAsset requires containerd settings to determine the runc version, but the instance group's raw cluster spec has containerd == nil (containerd not configured). The guard fires before any URL is built; the input at fault is the missing containerd configuration.","triggerScenarios":"Thrown at pkg/nodemodel/wellknownassets/runc.go:38 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Enable containerd in the cluster spec (spec.containerd or kubelet/containerRuntime settings)","Configure the containerd block with the required version fields","Re-run `kops update cluster` after fixing the spec"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}