Kubernetes 操作员使用 yaml 模板创建部署

问题描述

我正在尝试按照此 link 创建自己的 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

代替上面的,可以使用一些方便的 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
}