Problème :
Désérialiser un fichier YAML Kubernetes dans une structure Go.
Erreur rencontrée :
no kind "Deployment" is registered for version "apps/v1beta1"
Solution :
Pour résoudre l'erreur, vous devez importer le package de schéma Kubernetes nécessaire . Cela indique au décodeur les types qu'il doit prendre en compte lors de la désérialisation du YAML.
Importez le package suivant :
<code class="go">_ "k8s.io/client-go/pkg/apis/extensions/install"</code>
Raison :
Le Kubernetes Le schéma n'est pas automatiquement enregistré auprès du décodeur. En important le package d'installation, vous enregistrez explicitement le schéma pour le groupe d'API extensions/v1beta1, qui inclut le type de ressource Déploiement.
Exemple de travail complet :
<code class="go">package main import ( "fmt" "k8s.io/client-go/pkg/api" _ "k8s.io/client-go/pkg/api/install" _ "k8s.io/client-go/pkg/apis/extensions/install" ) var service = ` apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-nginx spec: replicas: 2 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 ` func main() { decode := api.Codecs.UniversalDeserializer().Decode obj, _, err := decode([]byte(service), nil, nil) if err != nil { panic(err) } fmt.Printf("%#v\n", obj) }</code>
Remarque :
Dans l'exemple mis à jour, la ressource de déploiement est définie à l'aide du groupe d'API extensions/v1beta1, qui est le groupe d'API correct pour la ressource de déploiement dans les versions de Kubernetes antérieures à 1.9. Pour Kubernetes 1.9 et versions ultérieures, vous devez plutôt utiliser le groupe API apps/v1.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!