1. 之前已经安装docker等相关组件,于是直接网上搜索教程,安装kubernetes,kubelet等组件。使用kubelet等命令时,总是出现错误:
    The connection to the server localhost:8080 was refused - did you specify the right host or port?
    无法辨别是什么问题,搜索到一些信息,以为是集群配置问题。于是设想通过安装minikube来解决问题。不曾想其中二者的依赖关系没搞清楚,执行minikube start时出错,原来minikube还是依赖kubelet。于是还是首先要解决kubelet的问题。
  2. sudo systemctl enable kubelet后,使用systemctl status kubelet查看状态,发现程序已经退出,使用
    journalctl -f -u kubelet
    来查看日志,发现有如下打印:
    failed to parse kernel config: unable to load kernel module: “configs“
    这个打印可以忽略,不是真正的原因。
    另一个错误打印:
    “command failed" err=“failed to validate kubelet flags: the container runtime endpoint address was not specified or empty, use --container-runtime-endpoint to set”
  3. 开始在网上搜索信息,以为是容器版本的问题,对于 containerd.io与dockerd.io的区别还是傻傻分不清楚。于是卸载使用apt等包管理器安装的containerd 1.4版本,参考”官方安装文档“https://github.com/containerd/containerd/blob/main/docs/getting-started.md重新安装containerd 1.6版本。
    使用systemctl enable kubelet时,提示containerd.service: Unit is masked. 原来是缺少service文件,或者是文件不对。
    在官方参考文档中,已经明确提及https://raw.githubusercontent.com/containerd/containerd/main/containerd.service文件,将其复制到/usr/local/lib/systemd/system/containerd.service。
    另外,还需要安装官方安装文档中”Customizing containerd“中所述,生成config.toml,命令如下:
    containerd config default | sudo tee /etc/containerd/config.toml
    重新执行如下命令加载服务:
    systemctl daemon-reload
    systemctl enable --now containerd
    这样可以成功启动containerd。
  4. 但是启动kubelet还是提示之前的错误:
    the container runtime endpoint address was not specified or empty
    幸亏又仔细看了这篇参考文档:https://blog.csdn.net/carlz42/article/details/125229815,里面有解决方法,修改启动参数,添加缺少的字段,在文件/usr/lib/systemd/system/kubelet.service中修改:
    ExecStart=/usr/local/bin/kubelet

    –container-runtime=remote
    –container-runtime-endpoint=unix:///run//containerd/containerd.sock
    重新启动即可。当然,别忘记了关闭swap: sudo swapoff -a,不然可能还会启动失败:
    Failed to run Kubelet: running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false
Logo

开源、云原生的融合云平台

更多推荐