无法启动 kubernetes API 服务器

Siv*_*lla 21 kubernetes kubectl kubeadm

实际问题:

无法启动kubernetes API,因此无法启动kube服务,例如:kubectl版本kubect get节点

/home/ubuntu# kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53:57Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}



   The connection to the server localhost:8080 was refused - did you specify the right host or port  ?
Run Code Online (Sandbox Code Playgroud)

问题背景:

Docker 已安装。使用以下命令安装 kube 组件:

apt-get update && apt-get install -y kubeadm kubelet kubectl
Run Code Online (Sandbox Code Playgroud)

但是,执行时kubeadm init --apiserver-advertise-address=$myip --ignore-preflight-errors=all:

I0408 09:09:07.316109       1 client.go:352] scheme "" not registered, fallback to default scheme
I0408 09:09:07.319904       1 asm_amd64.s:1337] ccResolverWrapper: sending new addresses to cc: [{127.0.0.1:2379 0  <nil>}]
I0408 09:09:07.323010       1 asm_amd64.s:1337] balancerWrapper: got update addr from Notify: [{127.0.0.1:2379 <nil>}]
W0408 09:09:07.332669       1 clientconn.go:1251] grpc: addrConn.createTransport failed to connect to {127.0.0.1:2379 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...
I0408 09:09:08.325625       1 client.go:352] parsed scheme: ""
I0408 09:09:08.325650       1 client.go:352] scheme "" not registered, fallback to default scheme
I0408 09:09:08.325707       1 asm_amd64.s:1337] ccResolverWrapper: sending new addresses to cc: [{127.0.0.1:2379 0  <nil>}]
I0408 09:09:08.325768       1 asm_amd64.s:1337] balancerWrapper: got update addr from Notify: [{127.0.0.1:2379 <nil>}]
W0408 09:09:08.326158       1 clientconn.go:1251] grpc: addrConn.createTransport failed to connect to {127.0.0.1:2379 0  <nil>}. Err :connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:2379: connect: connection refused". Reconnecting...
Run Code Online (Sandbox Code Playgroud)

在 kube api 容器日志中获取上述内容。这是全新安装。也尝试过

sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf
Run Code Online (Sandbox Code Playgroud)

预期成绩:

kubectl版本:应该只给出版本详细信息,没有任何连接问题消息 Kubectl获取节点:应该给出主节点和状态的详细信息

E23*_*235 42

我花了几个小时在这上面。
就我而言,我使用的是 Ubuntu 22.04 和 Kubernetes 1.24。

API 一直在重新启动,我在 kubelet 日志中没有找到任何内容:

service kubelet status 
journalctl -xeu kubelet
Run Code Online (Sandbox Code Playgroud)

我通过以下方式检查了 API 日志:

/var/log/containers/kube-apiserver-XXXX
Run Code Online (Sandbox Code Playgroud)

我看到了同样的错误:

grpc: addrConn.createTransport 无法连接到 {127.0.0.1:2379

解决方案:

containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml  
service containerd restart
service kubelet restart  
Run Code Online (Sandbox Code Playgroud)

说明:
该问题是cgroupv2在 Ubuntu 21.04 及更高版本(Debian 自版本 11 起)中引入的。
您需要通过配置文件( )告诉containerd使用驱动程序。 我正在使用 containerd 提供的默认配置文件 ( )。 不要在“io.containerd.grpc.v1.cri”部分中启用systemd_cgroup,因为该插件似乎不再支持此功能(服务的状态将打印以下日志: “无法加载插件io.containerd.grpc” .v1.cri" error="invalid pluginconfig: systemd_cgroup 仅适用于运行时 io.containerd.runtime.v1.linux") 您需要在该部分中启用 SystemdCgroup(=true) 标志:systemdCgroup/etc/containerd/config.toml
containerd config default | sudo tee /etc/containerd/config.toml


[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]"
Run Code Online (Sandbox Code Playgroud)

重新启动containerd-service,然后kubelet-service重新启动您的计算机,然后它应该按预期工作。

图片来源:Slack 的丹尼斯

  • 我花了一周的时间试图找到这个问题的解决方案......终于找到了你的解决方案!有用!对于其他类似情况,我的设置是使用 Ubuntu 22.04 和 kubeadm 进行安装的 3 节点 Raspberry Pi 集群。每次我运行“kubeadm init”时,控制平面都会启动,但一段时间后 kube-apiserver (:6443) 无法连接到 etcd (:2379)。这使得 kube-apiserver 无法工作,并在日志中创建大量 6443“dial tcp 192.168.0.105:6443: connect: connection returned” 错误。 (8认同)

Siv*_*lla 1

下面实际上解决了我的问题,不确定这是否是实际发现的:

\n
apt-get update && \\\n apt-get install -y apt-transport-https add-apt-repository "deb [arch=amd64] download.docker.com/linux/ubuntu bionic stable" curl -s packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb apt.kubernetes.io kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list apt update && \\\n apt install -qy docker.io apt-get update && \\\n apt-get install -y kubeadm kubelet kubectl kubernetes-cni kubeadm init --ignore-preflight-errors=all \xe2\x80\x93\n
Run Code Online (Sandbox Code Playgroud)\n

我之前在 kubernetes 安装过程中安装了 docker.ce。\n现在我尝试使用 docker.io,效果很好,没有进一步的问题。现在它按预期工作。

\n