Как получить логи из kubernetes, используя golang? - PullRequest
0 голосов
/ 19 декабря 2018

Я ищу решение, как получить логи из модуля в кластере Kubernetes, используя golang.Я посмотрел на "https://github.com/kubernetes/client-go" и" https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client",, но не мог понять, как использовать их для этой цели.У меня нет проблем с получением информации о модуле или любом другом объекте в K8S, за исключением журналов.

Например, я использую Get () из "https://godoc.org/sigs.k8s.io/controller-runtime/pkg/client#example-Client--Get", чтобы получить информацию о задании K8S:

found := &batchv1.Job{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: job.Name, Namespace: job.Namespace}, found)

Пожалуйста, расскажите, как вы получаете журналы модуля в настоящее время. Будем благодарны за любые предложения!

Обновление: Решение, предоставленное в Kubernetes go client api для журнала конкретного модуля устарел. У него есть несколько советов, но он не соответствует текущим библиотекам.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Вот что мы придумали в итоге, используя библиотеку client-go:

func getPodLogs(pod corev1.Pod) string {
    podLogOpts := corev1.PodLogOptions{}
    config, err := rest.InClusterConfig()
    if err != nil {
        return "error in getting config"
    }
    // creates the clientset
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        return "error in getting access to K8S"
    }
    req := clientset.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, &podLogOpts)
    podLogs, err := req.Stream()
    if err != nil {
        return "error in opening stream"
    }
    defer podLogs.Close()

    buf := new(bytes.Buffer)
    _, err = io.Copy(buf, podLogs)
    if err != nil {
        return "error in copy information from podLogs to buf"
    }
    str := buf.String()

    return str
}

Надеюсь, это кому-нибудь поможет.Пожалуйста, поделитесь своими мыслями или решениями о том, как вы получаете журналы из стручков в Кубернетесе.

0 голосов
/ 17 июня 2019

У моего env есть RBAC, мне пришлось добавить следующую роль, чтобы включить ваш код.Спасибо, это прекрасно работает!

  • apiGroups:
    • "" ресурсы:
    • стручки / глаголы журнала:
    • '*'
0 голосов
/ 19 декабря 2018

Клиентская библиотека времени выполнения контроллера пока не поддерживает субресурсы, отличные от / status, поэтому вам придется использовать client-go, как показано в другом вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...