本篇主要介绍如何运维 DevOps 流水线,怎么解决一些常见的问题。问题主要分为两大类,一类是 Kubernetes 相关的,具有一定通用性;另一类是与业务相关,需要对领域有所了解,解决问题时才能事半功倍。文档内容,会不断滚动更新。
如上图所示,是用户创建一个 Deployment 的简单流程。主要分为以下步骤:
了解基本的创建流程,有利于排查各种可能的故障。故障可以理解为集群生命周期中的一个状态,而创建是整个生命周期的起点。同时,重置、重启都是非常快速地解决问题的方法,都涉及创建。
如上图所示,是我的集群故障修复思路。主要分为以下步骤:
kubectl get
检查 node、pod 等资源是否符合预期kubectl describe
查看 Kubernetes 中的事件信息,包括 kube-sheduler 的调度、拉取镜像、启动是否成功等。通常能解决大部分的问题。kubectl logs
查看负载的日志。当 pod 处于 running,但是又无法正常提供服务时,logs 信息能够给出有用的提示。有时无法查看 pod 中容器的日志,那么需要去 pod 所在的节点查看 docker 的日志。journal
通过 -u
参数指定服务,通过 -f
查看滚动的最新日志,也十分有用。这里列举一些必要的检查事项,可以辅助排查问题。
node 负载过高时,有可能导致节点 NotReady。
磁盘包括两部分,大小和 inode。
安装集群时的配置,在重启机器之后,可能会失效。
跨节点通信异常时,会导致服务无法访问。
systemctl status kubelet
、systemctl status docker
查看组件的状态。
ps aux|grep kubelet
、docker info
查看相关配置是否符合预期。
如上图所示,是 installer 在执行安装 DevOps 时的依赖关系。DevOps 主要有两个核心组件 S2I 和 Jenkins 。S2I 依赖于 minio 存储文件,Jenkins 依赖于 uc 提供插件下载、依赖 openldap 打通账户体系。
安装时,比较常见的是 minio 安装失败,导致 DevOps 无法继续安装。而 minio 安装失败通常又是存储和网络导致。
DevOps 允许用户自定义配置,但 Jenkins /configureSecurity/
页面中鉴权和 CSRF Protection 不要修改。
修改上图,红色框中的内容,会导致流水线无法使用。
多分支流水线扫描时,会将仓库拉取到 /var/jenkins_home/cache
中,查找 jenkinsfile 文件。
如果大量实践多分支流水线扫描,请将 Jenkins 的 pv 设置大一些,50 GB 以上。
具体可以参考文档: Jenkins 中 Lightweight 拉取代码问题分析
节点之间通信问题,可以将 ks-controller-manager 和 ks-jenkins 调度到一个节点进行验证。
如果能够创建成功,那么 Pod 的跨节点通信有问题。
调整 ks-jenkins 的 cpu 和 memory 限制,还有 Xms、Xmx 值。
下一篇: KubeSphere3.0 多集群联邦→