Maison > développement back-end > Golang > Comment exécuter des commandes Kubernetes Exec à l'aide du client Go ?

Comment exécuter des commandes Kubernetes Exec à l'aide du client Go ?

Patricia Arquette
Libérer: 2024-12-06 05:39:14
original
1006 Les gens l'ont consulté

How to Execute Kubernetes Exec Commands Using the Go Client?

Exemple de commande Kubernetes Exec utilisant le client Go

Problème :

Exécution de commandes dans un pod utiliser le client Kubernetes Go peut être difficile. Les utilisateurs peuvent rencontrer des erreurs sans messages clairs lorsqu'ils tentent de diffuser le résultat de l'exécution.

Solution :

Pour exécuter correctement les commandes dans un pod avec le client Kubernetes Go, suivez ces étapes :

  1. Créez une configuration de client Kubernetes à l'aide de la structure restclient.Config, en spécifiant l'hôte du serveur et le paramètre Non sécurisé à true à des fins de test.
  2. Initialisez le client à l'aide de la fonction RESTClientFor et spécifiez la version du groupe d'API et le sérialiseur négocié.
  3. Construisez la requête en créant un générateur de requêtes Post() pour les pods. ressource. Définissez le nom du pod, l'espace de noms et la sous-ressource (exec) dans le générateur de requêtes.
  4. Spécifiez les PodExecOptions et utilisez le ParameterCodec pour encoder les paramètres.
  5. Utilisez la fonction NewExecutor pour créer un exécuteur pour la configuration, la méthode HTTP et l'URL données.
  6. Initialisez les options d'exécution du flux et spécifiez le stdin, stdout et stderr streams ainsi que le paramètre TTY.
  7. Appelez la fonction Stream pour exécuter la commande.

Remarque :

L'exemple de code fourni dans la question utilise une version incorrecte de la structure PodExecOptions. La version correcte provient du package v1 (et non du package non versionné).

Exemple de travail :

Le code suivant montre un exemple fonctionnel d'exécution de commandes dans un pod à l'aide de le client Kubernetes Go :

package k8s

import (
    "io"

    v1 "k8s.io/api/core/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/kubernetes/scheme"
    restclient "k8s.io/client-go/rest"
    "k8s.io/client-go/tools/remotecommand"
)

// ExecCmd exec command on specific pod and wait the command's output.
func ExecCmdExample(client kubernetes.Interface, config *restclient.Config, podName string,
    command string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error {
    cmd := []string{
        "sh",
        "-c",
        command,
    }
    req := client.CoreV1().RESTClient().Post().Resource("pods").Name(podName).
        Namespace("default").SubResource("exec")
    option := &v1.PodExecOptions{
        Command: cmd,
        Stdin:   true,
        Stdout:  true,
        Stderr:  true,
        TTY:     true,
    }
    if stdin == nil {
        option.Stdin = false
    }
    req.VersionedParams(
        option,
        scheme.ParameterCodec,
    )
    exec, err := remotecommand.NewSPDYExecutor(config, "POST", req.URL())
    if err != nil {
        return err
    }
    err = exec.Stream(remotecommand.StreamOptions{
        Stdin:  stdin,
        Stdout: stdout,
        Stderr: stderr,
    })
    if err != nil {
        return err
    }

    return nil
}
Copier après la connexion

Ce code utilise correctement la version v1 de PodExecOptions et définit le paramètre TTY sur vrai, permettant l'exécution de commandes interactives si vous le souhaitez.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal