首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用k8s SDK应用yaml文件

使用k8s SDK应用yaml文件
EN

Stack Overflow用户
提问于 2021-09-07 18:44:31
回答 1查看 204关注 0票数 3

我有以下的yaml,我需要使用k8s go sdk (而不是K8S cli)来应用它--我没有找到一种使用go sdk的方法,因为它是自定义资源,知道如何通过代码将它应用于k8s吗?

这是文件

任何一个例子都会很有帮助!

代码语言:javascript
复制
apiVersion: aps.dp.com/v1alpha1
kind: Edtack
metadata:
  name: ed01
  namespace: ctr
spec:
  intRef:
    name: evr
  stack:
  - name: vectnt
    namespace: aps
    path: https://packages.timber.io/helm/latest/vect-0.11.0.tgz
    valuesRef:
      name: vecvalues
  - name: ek
    namespace: lg
    path: rescharts/bing
  - name: apigw-gloo-ee
    namespace: apw
    path: https://common.cdn.repositories.cloud.sap/api-gateway/apigw-gloo-ee/apigw-gloo-ee-0.3.0.tgz
    pullSecretRef:
      name: svr-secret
    valuesSecretRef:
      name: apis
  - name: kuback
    namespace: kube-prom
    path: https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-16.12.0/kube-prometheus-stack-16.12.0.tgz
    valuesSecretRef:
      name: kubes
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-08 07:29:00

您可以使用k8sutil回购,请参阅应用示例:

代码语言:javascript
复制
package main

import (
    "context"
    "flag"
    "log"
    "path/filepath"

    "github.com/pytimer/k8sutil/apply"

    "k8s.io/client-go/discovery"
    "k8s.io/client-go/dynamic"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/util/homedir"
)

const applyStr = `
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
  - name: web
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
`

func main() {
    var kubeconfig *string
    if home := homedir.HomeDir(); home != "" {
        kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
    } else {
        kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
    }
    flag.Parse()

    // use the current context in kubeconfig
    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    if err != nil {
        panic(err.Error())
    }

    dynamicClient, err := dynamic.NewForConfig(config)
    if err != nil {
        panic(err.Error())
    }
    discoveryClient, err := discovery.NewDiscoveryClientForConfig(config)
    if err != nil {
        panic(err.Error())
    }

    applyOptions := apply.NewApplyOptions(dynamicClient, discoveryClient)
    if err := applyOptions.Apply(context.TODO(), []byte(applyStr)); err != nil {
        log.Fatalf("apply error: %v", err)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69093178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档