Laf 运行在 Kubernetes(简称K8s) 上,所以私有化部署需要基本的 K8s 知识。
如何学习 K8s,可以看论坛的这篇文章:laf 运行在 kubernetes 上,我这里整理一些学习 kubernetes 路径和方法
本篇文章列几个最基本的 K8s 排错的命令,力求将【无K8s基础伙伴在社区内提问->社区的伙伴手打一长串命令->提问者输入->截图贴到群里->社区伙伴解答】的链路变为【无K8s基础伙伴通过帖子做基本的排查,解决大部分通用问题->有无法解决的问题,通过帖子的命令把详细信息输出并截屏,发到社区求助】。
以下所有操作都在安装了 K8s 的服务器(如果是虚拟机就在虚拟机内部)的命令行工具中运行,提示无权限就加一下 sudo。
有兴趣可以装一下 kubectl-aliases,可以缩短 K8s 命令。
也可以安装fig一类的自动补全,能自动获取pod等资源名字,更方便。
查看所有 Pod 信息
kubectl get pods -A
(如果装了 kubectl-aliases 会更简单,kgpo -A
或 kgpoall
)
Pods 是 K8s 调度的最小单元,由若干个容器组成,可以简单理解为一个或一组进程实例。
-A 等同于 –all-namespaces,即显示所有命名空间的资源。K8s的部分资源,会被不同的命名空间所隔离。
Laf 大部分的资源都在 laf-system 的命名空间内,而「应用」的实例,会单独建一个和appid同名的命名空间。
如果想查看某个命名空间内的资源,可以用 -n xxx
。比如 kubectl get pods -laf-system
。
(有兴趣可以安装一下 kubens,这样以后敲命令就不需要每次都带上 -n laf-system
了)
查看所有 Pod 信息时,若 Ready 列左侧的数字为0,先 kubectl describe
比如某一行,某个 Pod 的 Ready 是 0/1
,代表期望有1个Pod成功,但实际上0个成功。假如你的输出是这样:
NAMESPACE NAME READY ... ...
laf-system laf-web-68f56bf84d-jczf5 0/1 ... ...
那就是执行
kubectl describe pods laf-web-68f56bf84d-jczf5 -n laf-system
其中,两个参数分别是 Pod 名和命名空间。
(如果用 kucectl-aliases,命令是 kdpo laf-web-68f56bf84d-jczf5 -n laf-system
)
然后翻到最下面的 Envents
,看看有没有错误类的提示。
如果有 image pull failed
一类的提示,就是镜像拉取失败了,大概率是因为 K8s 依赖的镜像,本机网络无法访问。
(这种情况需要从其他镜像仓库下载镜像,重新打tag并导入K8s中。细节等大佬补充吧。)
如果还是看不到明显的错误信息
尝试看一下 Pod 日志,命令和前面的几乎一模一样,只是把 describe 换成了 logs,以及不需要打pods了,因为日志只针对pod:
kubectl logs laf-web-68f56bf84d-jczf5 -n laf-system
用了alias的话,命令就是 klo laf-web-68f56bf84d-jczf5 -n laf-system
。
然后看看日志,再向社区求助。
Laf 能成功访问,但是创建应用一直卡着
Laf 部署好后,访问 http://你的域名
就能访问到。但第一次创建应用的时候,需要重启 laf-server。命令:
kubectl delete pods -l app.kubernetes.io/name=laf-server -n laf-system
代表删除pod,使用 -l
来筛选特定标签的 Pod。(K8s有特殊的调节机制,比如laf定义了laf-server的Pod的个数的期望值为1,K8s会努力保证拥有存在一个这样的Pod。所以删除了Pod后,K8s会再新建一个,相当于重启)