Containerd 1.4.9 Нереализованное описание = неизвестная служба runtime.v1alpha2.RuntimeService

я установилcontainerd 1.4.9на сервере CentOS Steam 8.

на основе этого документа https://containerd.io/docs/getting-started/. Я создал файл конфигурации по умолчаниюcontainerd config default > /etc/containerd/config.tomlтак.

после перезапуска контейнера, когда я запускаюcrictl psВыдает ошибку ниже

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

Как исправить эту ошибку? после исправления я хочу присоединить этот узел к кластеру Kubernets1.21.3с использованиемsystemdcfgroup.

Спасибо, СР.

4 ответа

Сегодня произошла та же ошибка при обновлении kubelet на рабочих узлах. Проблема была в конфигурации по умолчанию. Обратите внимание, чтоContainerd будет работать нормально без каких-либо настроек. В моем случае я просто хотел включить systemd_cgroup.

ctr plugin lsпоказал, что плагин cri находился в состоянии ошибки с конфигурацией по умолчанию

Просто пустая конфигурация с исправленной проблемой systemd_cgroup для меня:

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

Эта проблема связана с ошибками в плагинах CRI. Вы можете проверить статус плагина CRI

      ctr plugin ls

Раньше у меня была такая же проблема из-за проблемы с devmapper, поскольку devmapper настроен как моментальный снимок CRI по умолчанию, CRI также получал ошибку.

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

Проблема исчезла после того, как я перенастроил снапшот devmapper.

Удаление конфигурации (/etc/containerd/config.toml) тоже работает, но контейнер работает с конфигурацией по умолчанию, чего я не хотел.

Фоновый контекст. Об ошибке:
из документации gitlab.cncf.ci/containerd crictl.md.

«Возможно, вы используете неправильную конфигурацию контейнера (возможно, из установки Docker). Вам необходимо обновить конфигурацию контейнера до экземпляра контейнера, который вы используете».

  • Я сам установил docker, затем yum установил crictl для изучения различий в синтаксисе команд и столкнулся с этим.
  • Команда разрешения, опубликованная в связанном документе, работает только при запуске от имени пользователя root, поэтому вот более общая версия.
      # 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

версия контейнера: 1.6.20

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

设置为ложный 解决

Другие вопросы по тегам