簡體   English   中英

如何在我自己的 CRD controller 中重用 k8s 驗證

[英]how to reuse k8s validation in my own CRD controller

我創建了一個這樣的CRD

import v1 "k8s.io/api/core/v1"

type ApplicationSpec struct {
    Name string `json:"name"`

    PodSpec v1.PodSpec `json:"podSpec"`

    ...
}

請注意,我在 CRD 中重用了來自 core PodSpec的 PodSpec

為了避免用戶應用無效的 yaml 文件,我決定在我的 CRD controller 中添加驗證邏輯,對於像Name這樣的簡單字段,使用正則表達式很容易檢查它的正確性,而對於像PodSpec這樣的復雜和原生類型,因為 k8s 已經有驗證邏輯那,我覺得正確的方法是在我的 controller 中重用它,但我該怎么做呢?

您可以直接重用上游ValidatePodSpec

您需要先導入幾個包:

import (
    "k8s.io/kubernetes/pkg/apis/core/validation"
    "k8s.io/apimachinery/pkg/util/validation/field"
)

然后在您的 controller 方法中使用ValidatePodSpec

errs := validation.ValidatePodSpec(instance.podSpec, field.NewPath("podSpec"))

還希望將這樣的功能作為庫提供。 有一條關於使用go get上游k8s.io/kubernetes的評論。 https://github.com/kubernetes/kubernetes/issues/80316#issuecomment-512991205可以在此處找到由使用錯誤配置 PodTemplateSpec 引起的問題即:我們成功創建了一個 CRD,但是后來它變得不健康,因為無法創建 pod。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM