首页 > 解决方案 > Kubernetes 操作员使用 yaml 模板创建 Deployment

问题描述

我正在尝试通过以下链接创建自己的 kubernetes 运算符。在 Reconcile 函数中,我需要创建多个部署,每个部署的某些属性(例如名称)都会有所不同,并且配置很大。不是通过使用 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

除了上面,可以使用一些方便的实用程序功能来实现类似下面的内容吗?

dep := utils.parseYaml(deploymentYamlFile)

标签: gokuberneteskubernetes-custom-resourcesoperator-sdk

解决方案


是的,您可以将您的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
}

推荐阅读