
Lo he instalado containerd 1.4.9
en 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.toml
como este.
después de reiniciar el contenedor, cuando ejecuto, crictl ps
arroja 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.3
usando systemd
cfgroup.
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 ls
mostró 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_cgroup
pero:
[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