Kubernetes 操作员使用 yaml 模板创建 Deployment

Kubernetes operator create Deployment using yaml template

我正在尝试按照此 link 创建我自己的 kubernetes 运算符。在 Reconcile 函数中,我需要创建多个 Deployment,每个 Deployment 的某些属性(例如名称)会有所不同,而且配置非常庞大。不是通过使用 appsv1.Deployment 创建部署并在其中创建每个属性(如下面的代码),有没有一种方法可以提供一个 yaml 模板文件并读取该文件以获取 appsv1.Deployment 对象?

    dep := &appsv1.Deployment{
        ObjectMeta: metav1.ObjectMeta{
            Name:      customName,
            Namespace: m.Namespace,
        },
        Spec: appsv1.DeploymentSpec{
            Strategy: appsv1.DeploymentStrategy{
                Type: "RollingUpdate",
            },
        ... and so on

除了上面的内容,是否可以使用一些方便的 util 函数来实现类似下面的内容?

dep := utils.parseYaml(deploymentYamlFile)

是的,您可以将 Deployment 放在 yaml 文件中并在代码中读取。

鉴于此文件结构:

example.go
manifests/deployment.yaml

你会在 example.go 中有这样的东西:

import (
    "io/ioutil"

    appsv1 "k8s.io/api/apps/v1"
    "sigs.k8s.io/yaml"
)

func example() {
    var bs []byte
    {
        bs, err = ioutil.ReadFile("manifests/deployment.yaml")
        if err != nil {
            // handle err
        }
    }

    var deployment appsv1.Deployment
    err = yaml.Unmarshal(bs, &deployment)
    if err != nil {
        // handle err
    }

    // now you have your deployment load into `deployment` var
}