Как проверить состояние модуля K8s / K3s программно во время выполнения контейнера?

# #docker #go #kubernetes #k3s #containerd

Вопрос:

Мне интересно, есть ли возможность проверить состояние модуля в среде k8s с помощью containerd в качестве среды выполнения программно.

Я попытался взглянуть на https://github.com/containerd/containerd и https://github.com/kubernetes-sigs/cri-tools но у обоих, похоже, нет никаких средств для получения точного статуса каждого модуля.

Cri-инструменты / crictl могут указать, готов ли модуль или нет ( но это не учитывает, проходят ли проверки готовности за кулисами ).

Ниже приведен код, который проверяет состояние работоспособности контейнера docker в docker world

Вопрос

  • Можно ли узнать состояние каждого модуля, запущенного в k8s/k3s в клиентских библиотеках GOlang, как показано ниже, когда containerd находится во время выполнения?

Мы высоко ценим любой вклад. Спасибо.

 // Create a docker client
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
    filteredContainers, err := cli.ContainerList(ctx, types.ContainerListOptions{})
    if err != nil {
        return false, err
    }
if len(filteredContainers) < 1 {
        return false, errors.New("No other docker containers are up")
}

// inspect each container ..
inspectResult, err := cli.ContainerInspect(ctx, containerID)
    if err != nil {
        return false, err
    } else {
        if inspectResult.State.Health != nil {
            // Check Health Status in available container
            if inspectResult.State.Health.Status == "healthy" {
                return true, nil
            }
        } 
    }
    return false, nil
 

Комментарии:

1. Я бы, вероятно, использовал для этого API Kubernetes ; он не будет зависеть от базовой среды выполнения контейнера и будет работать, даже если вы физически не находитесь на одном из узлов кластера.

2. @DavidMaze Спасибо , но я хочу сделать это программно в GO, так как мое клиентское приложение, которое работает согласованным образом, нуждается в этой информации без использования сервера api k8s и прямой зависимости от среды выполнения контейнера.

3. Контейнерд ничего не знает о капсулах, это абстракция кубернетеса. Аналогично, проверки работоспособности контейнеров также существуют только в kubernetes.

4. Это действительно так , интересно, есть ли какие-либо крючки для получения этой информации из среды выполнения контейнера.