⚙️

MetalLBのIPAddressPoolを作る時に「ensure CRDs are installed first」エラーが出てしまう

2024/03/01に公開

はじめに

おうちKubernetesの設定をしている時、本エラーにハマったので共有のために記事を残しておきます。

環境

Kubectl Version: v1.28.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Kubernetes Version: v1.28.7
CNI: Calico

作業手順

Kustomizeを利用したMetal LBのインストール手順に従って、以下のKustomizationファイルを作成した。

kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: metallb-system

resources:
  - github.com/metallb/metallb/config/native?ref=v0.14.3
  - ipaddresspool.yaml
ipaddresspool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.11.200-192.168.11.250

このKustomizationファイルをkustomize apply -k ./metallbで適用しようと試みたが、MetalLB公式のマニフェストのリソースが全てCreatedになった後、IPAddressPoolのリソースだけが

error: resource mapping not found for name: "default" namespace: "metallb-system" from "./metallb/ipaddresspool.yaml": no matches for kind "IPAddressPool" in version "metallb.io/v1beta1"
ensure CRDs are installed first

のエラーによって作成されませんでした😢

原因

わかりませんでした(解決はしたので詳細は後述)

「ensure CRDs are installed first(CRDを先にインストールしろよ)」などと言われている割には、kubectl get crdsでカスタムリソース定義を確認すればIPAddressPoolは既にインストール済みですし、どん詰まりでした。

解決方法

kubectl applyの後、10分ほど待ってから再度kubectl applyを試してみたところ、今度はエラーが出ずIpAddressPoolを作成することができました。

よくわからない・・・(詳細をご存じの方はTwitterでもこちらの記事のコメントでも、ご連絡いただけると嬉しいです)

Discussion