Containerd 1.4.9 Desc no implementado = servicio desconocido runtime.v1alpha2.RuntimeService

Containerd 1.4.9 Desc no implementado = servicio desconocido runtime.v1alpha2.RuntimeService

Lo he instalado containerd 1.4.9en el servidor CentOS Steam 8.

basado en este documentohttps://containerd.io/docs/getting-started/. He creado un archivo de configuración predeterminado containerd config default > /etc/containerd/config.tomlcomo este.

después de reiniciar el contenedor, cuando ejecuto, crictl psarroja el siguiente error

FATA[0000] listing containers failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService

¿Cómo arreglar este error? Después de solucionar este problema, quiero unir este nodo al clúster de Kubernets 1.21.3usando systemdcfgroup.

gracias sr

Respuesta1

Tuve el mismo error hoy al actualizar kubelet en los nodos trabajadores. El problema estaba dentro de la configuración predeterminada. Tenga en cuenta que Containerd funcionará bien sin ninguna configuración. En mi caso sólo quería habilitar systemd_cgroup.

ctr plugin lsmostró que el complemento cri estaba en estado de error con la configuración predeterminada

Solo una configuración en blanco con systemd_cgroup solucionó el problema para mí:

cat > /etc/containerd/config.toml <<EOF
[plugins."io.containerd.grpc.v1.cri"]
  systemd_cgroup = true
EOF
systemctl restart containerd

Respuesta2

Contexto general Acerca del error:
Degitlab.cncf.ci/containerd crictl.md documentos

"Esto podría deberse a que está utilizando una configuración en contenedor incorrecta (tal vez desde una instalación de Docker). Deberá actualizar su configuración en contenedor a la instancia en contenedor que está ejecutando".

  • Yo mismo instalé Docker, luego yum instalé crictl para investigar las diferencias de sintaxis de comandos y me encontré con esto.
  • El comando de resolución publicado en el documento vinculado solo funciona si se ejecuta como root, por lo que aquí hay una versión más genérica.
# Backup old containerd config (optional)
sudo mv /etc/containerd/config.toml /etc/containerd/config.bak

# Regenerate containerd config
sudo containerd config default | sudo tee /etc/containerd/config.toml

# Restart containerd
sudo systemctl restart containerd

# The above got it to work for me; but with some warnings 
# and ignorable errors that looked this this: 
sudo crictl ps
# WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock]. As the default settings are now deprecated, you should set the endpoint instead.
# ERRO[0002] connect endpoint 'unix:///var/run/dockershim.sock', make sure you are running as root and the endpoint has been started: context deadline exceeded
# WARN[0002] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock]. As the default settings are now deprecated, you should set the endpoint instead.
# ERRO[0004] connect endpoint 'unix:///var/run/dockershim.sock', make sure you are running as root and the endpoint has been started: context deadline exceeded
# CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID
# ^-- The last line represents correct output, which is why 
# I say ignorable warnings/errors, even the post command 
# exit code seeable using 'echo $?' exit code shows success

# What cleaned up the errors for me was copy pasting the following
echo """
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
""" | sudo tee /etc/crictl.yaml

docker ps
# ^-- no more errors :)

# Note others may need to run one of these instead, based on their
# system's config, keep trying docker ps until one config works
echo """
runtime-endpoint: unix:///var/run/crio/crio.sock
image-endpoint: unix:///var/run/crio/crio.sock
""" | sudo tee /etc/crictl.yaml

echo """
runtime-endpoint: unix:///var/run/dockershim.sock
image-endpoint: unix:///var/run/dockershim.sock
""" | sudo tee /etc/crictl.yaml

Respuesta3

Este problema estaba relacionado con errores en los complementos CRI. Puede comprobar el estado del complemento CRI

ctr plugin ls

En el pasado tuve el mismo problema debido a un problema de devmapper, dado que devmapper está configurado como instantánea CRI predeterminada, CRI también obtuvo un error.

TYPE                                  ID                       PLATFORMS      STATUS
io.containerd.snapshotter.v1          devmapper                linux/amd64    error
io.containerd.grpc.v1                 cri                      linux/amd64    error

El problema desapareció después de reconfigurar el snapshotter devmapper.

Eliminar la configuración (/etc/containerd/config.toml) también funciona, pero el contenedor se ejecuta con la configuración predeterminada, que no era lo que quería.

Respuesta4

FWIW, por mi parte, el parámetro correcto de contenedor para configurar no era systemd_cgrouppero:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            #[...]
            SystemdCgroup = true

cualesuna configuración diferente en el archivo de configuración.

YEsta es la configuración real que los documentos oficiales de Kubernetes indican que se establezca como verdadera:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#containerd-systemd

información relacionada