3 votes

Appliquer le fichier yaml en utilisant le SDK k8s

J'ai le yaml suivant que je dois appliquer en utilisant le SDK go de K8S (et non pas k8s cli) Je n'ai pas trouvé de moyen d'utiliser le SDK go car il s'agit de ressources personnalisées, avez-vous une idée de comment je peux l'appliquer via du code à k8s?

Voici le fichier

Tout exemple sera très utile!

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

1voto

Matteo Points 24881

Vous pourriez utiliser le dépôt k8sutil, voir l'exemple apply:

ackage 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"), "(optionnel) chemin absolu vers le fichier kubeconfig")
    } else {
        kubeconfig = flag.String("kubeconfig", "", "chemin absolu vers le fichier kubeconfig")
    }
    flag.Parse()

    // utilise le contexte actuel dans 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("erreur d'application: %v", err)
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X