# #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. Это действительно так , интересно, есть ли какие-либо крючки для получения этой информации из среды выполнения контейнера.