我有以下的yaml,我需要使用k8s go sdk (而不是K8S cli)来应用它--我没有找到一种使用go sdk的方法,因为它是自定义资源,知道如何通过代码将它应用于k8s吗?
这是文件
任何一个例子都会很有帮助!
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发布于 2021-09-08 07:29:00
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)
}
}https://stackoverflow.com/questions/69093178
复制相似问题