RKE 安装k8s,docker报错麻烦帮一下。

RKE 安装k8s,docker报错,rke版本是1.3.15.

Docker 版本:20.10.5

我是离线部署 Kubernetes 版本: 1.24(rke默认的版本)

主机操作系统:

Debian11

问题描述:

重现步骤:
ssh没有问题,
/etc/ssh/sshd_config 也设置了 AllowTcpForwarding yes

但是执行的时候报错:

root@harbor:~/rancher# rke up
INFO[0000] Running RKE version: v1.3.15
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused kubelet certificates
INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [10.106.106.86]
INFO[0000] [dialer] Setup tunnel for host [10.106.106.90]
INFO[0000] [dialer] Setup tunnel for host [10.106.106.91]
INFO[0000] [dialer] Setup tunnel for host [10.106.106.87]
INFO[0000] [dialer] Setup tunnel for host [10.106.106.88]
INFO[0000] [dialer] Setup tunnel for host [10.106.106.89]
WARN[0000] Failed to set up SSH tunneling for host [10.106.106.86]: Can’t retrieve Docker Info: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info”: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00”.

  • Are you trying to connect to a TLS-enabled daemon without TLS?
    WARN[0000] Failed to set up SSH tunneling for host [10.106.106.90]: Can’t retrieve Docker Info: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info”: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00”.
  • Are you trying to connect to a TLS-enabled daemon without TLS?
    WARN[0000] Failed to set up SSH tunneling for host [10.106.106.88]: Can’t retrieve Docker Info: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info”: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00”.
  • Are you trying to connect to a TLS-enabled daemon without TLS?
    WARN[0000] Failed to set up SSH tunneling for host [10.106.106.89]: Can’t retrieve Docker Info: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info”: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00”.
  • Are you trying to connect to a TLS-enabled daemon without TLS?

一致没搞明白为什么。主机上的docker也是正常的。docker info,docker ps 显示都正常。

报错主要是:

Can’t retrieve Docker Info: Get “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info”: net/http: HTTP/1.x transport connection broken: malformed HTTP response “\x00\x00\x06\x04\x00\x00\x00\x00\x00\x00\x05\x00\x00@\x00

不明白是为什么

日志


rke 创建集群,依赖 ssh 免密登录,和连接的用户具有 docker 组的权限,所以你可以执行以下命令去排查:

ssh user@1.1.1.1 docker ps

user 为你 cluster.yaml 中配置的用户。如果你的操作系统是 centos,建议使用非 root 用户去连接。

捕获

这个地方是OK的。

我的rke版本是 v1.3.15 , 我看默认安装是k8s的1.24.4,所以又单独安装了cri-dockerd 。

我把默认/var/run/docker.sock 改成 /vra/run/cri-dockerd.sock
[+]Docker socket path on host [/var/run/docker.sock]: /var/run/cri-dockerd.sock

k8s1.24以后是不是应该把这个选项改成/var/run/cri-dockerd.sock, 还是因为我改了这个,才报错?

另一个问题,当我查看rke 版本:


这是正常的么?

1 rke 安装 使用 containerd 容器运行时的集群,我没试过,如果你想用 containerd,建议使用 rke2 创建集群
2. rke version 下面的提示是正常的。

另外,如果是我遇到类似问题,我会逐个去排查问题,比如我使用 docker 容器运行时安装集群,看看能否安装成功,如果可以安装成功,那就是容器运行时的问题。如果依然失败,那就有可能是配置的问题。

我用的不是containerd,我用的是docker。
我安装的rke版本是 v1.3.15,我看默认使用的镜像是 rancher/hyperkube:v1.24.4 -rancher1,这个是kubernetes1.24么?不是在1.24已经删除了docker的支持了么?不需要安装cri-dockerd来对docker支持?我这个没有理解。

还有请问rke默认安装的k8s环境,ca认证时间默认是一年么?如果是1年,万一到期了。怎么处理?

kubernetes 1.24 之后确实从 kubelet 中移除了 dockershim 的代码,从而弃用 docker 作为容器运行时。

但 rke 安装的集群依然可以使用 docker 作为容器运行时,以为 rke 部署的集群里已经自动安装了 cir-dockerd,也就是说,你和之前部署 1.22 和 1.23 的集群一样去部署 1.24 集群即可,没啥特殊的配置,rke 会自动部署 cir-dockerd。

参考rke 示例文件:https://docs.rancher.cn/docs/rke/example-yamls/_index/
其中 enable_cri_dockerd 默认为 true

CA 证书是 10 年有效期,如果过期,或者过期前,你可以通过 rke 的轮换证书命令去轮换证书的有效期,可参考官网:Rancher Docs: Certificate Management