在 Golang 中执行“kubectl apply”的等效方法

使用 应用复杂的 yaml 配置很简单kubectl,例如,安装kong-ingress-controller只需使用一行kubectl

kubectl apply -f https://raw.githubusercontent.com/Kong/kubernetes-ingress-controller/master/deploy/single/all-in-one-dbless.yaml

在 Golang 中这样做的等效方法是什么?


慕少森
浏览 217回答 1
1回答

茅侃侃

通过检查这个问题弄清楚:https ://github.com/kubernetes/client-go/issues/193#issuecomment-363318588我在 using kubebuilder,简单把 yamls 变成runtime.Objectsusing UniversalDeserializer,然后使用 Reconciler 的Create方法创建对象:// ref: https://github.com/kubernetes/client-go/issues/193#issuecomment-363318588func parseK8sYaml(fileR []byte) []runtime.Object {    acceptedK8sTypes := regexp.MustCompile(`(Namespace|Role|ClusterRole|RoleBinding|ClusterRoleBinding|ServiceAccount)`)    fileAsString := string(fileR[:])    sepYamlfiles := strings.Split(fileAsString, "---")    retVal := make([]runtime.Object, 0, len(sepYamlfiles))    for _, f := range sepYamlfiles {        if f == "\n" || f == "" {            // ignore empty cases            continue        }        decode := scheme.Codecs.UniversalDeserializer().Decode        obj, groupVersionKind, err := decode([]byte(f), nil, nil)        if err != nil {            log.Println(fmt.Sprintf("Error while decoding YAML object. Err was: %s", err))            continue        }        if !acceptedK8sTypes.MatchString(groupVersionKind.Kind) {            log.Printf("The custom-roles configMap contained K8s object types which are not supported! Skipping object with type: %s", groupVersionKind.Kind)        } else {            retVal = append(retVal, obj)        }    }    return retVal}func (r *MyReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {    ctx := context.Background()    log := r.Log.WithValues("MyReconciler", req.NamespacedName)    // your logic here    log.Info("reconciling")    yaml := `apiVersion: v1kind: Namespacemetadata:  name: test-ns`    obj := parseK8sYaml([]byte(yaml))    if err := r.Create(ctx, obj[0]); err != nil {        log.Error(err, "failed when creating obj")    }    ...}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go