与Kubernetes初接触
初次安装Kubernetes,走了许多弯路,记录并分享。
·
- 之前已经安装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的问题。 - 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” - 开始在网上搜索信息,以为是容器版本的问题,对于 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。 - 但是启动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
更多推荐
已为社区贡献1条内容
所有评论(0)