![containerd 1.4.9 未實作的 desc = 未知服務runtime.v1alpha2.RuntimeService](https://rvso.com/image/769308/containerd%201.4.9%20%E6%9C%AA%E5%AF%A6%E4%BD%9C%E7%9A%84%20desc%20%3D%20%E6%9C%AA%E7%9F%A5%E6%9C%8D%E5%8B%99runtime.v1alpha2.RuntimeService.png)
我已經安裝containerd 1.4.9
在 CentOS steam 8 伺服器上。
根據本文件https://containerd.io/docs/getting-started/。我已經創建了containerd config default > /etc/containerd/config.toml
這樣的預設設定檔。
重新啟動containerd後,當我運行crictl ps
它時拋出以下錯誤
FATA[0000] listing containers failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService
如何修復這個錯誤?修復此問題後,我想1.21.3
使用systemd
cfgroup 將此節點加入 Kubernets 叢集。
謝謝SR
答案1
今天在工作節點上升級 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
答案2
背景 上下文 關於錯誤:
從gitlab.cncf.ci/containerd crictl.md 文檔
“這可能是因為您使用了不正確的 Containerd 配置(可能來自 Docker 安裝)。您需要將 Containerd 配置更新為您正在運行的 Containerd 實例。”
- 我自己安裝了 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
答案3
此問題與 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)也可以,但是containerd以預設配置運行,這不是我想要的。
答案4
FWIW,就我而言,要設定的正確的containerd參數不是systemd_cgroup
:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
#[...]
SystemdCgroup = true
哪個是設定檔中的不同設定。
和這是 Kubernetes 官方文件告訴我們設定為 true 的實際設定:https://kubernetes.io/docs/setup/product-environment/container-runtimes/#containerd-systemd