为什么开源 KubeEye
Kubernetes 作为容器编排的事实标准,虽然架构优雅功能也非常强大,但是 Kubernetes 在日常运行过程中总会有一些疑难杂症和隐性的问题让集群管理员和 Yaml 工程师们非常头疼,例如:
硬件问题:如 CPU,内存或磁盘异常;
内核问题:内核死锁,文件系统损坏;
容器运行时问题:运行时守护进程无响应;
ETCD 健康状况异常
应用容器配置 request、limit 的黑盒
Pod 各种疑难问题起不来
证书即将过期
Docker 服务异常
OutOfMemory 存储空间不足
···
这样的问题还有很多,并且这些隐性的集群异常问题对集群的控制面来说是不可见的,因此 Kubernetes 将继续将 Pod 调度到异常的节点,进而造成集群和运行的应用带来非常大的安全与稳定性的风险。
KubeSphere 团队积累了来自社区用户和商业客户三年多的 Kubernetes 集群生产环境运维经验,精通集群组件运行与排查原理,从而开发了一款集群自动巡检工具帮助用户解决集群日常运维的痛点。
KubeEye 是什么
KubeEye 是一款开源的 Kubernetes 集群自动巡检工具,旨在自动检测发现 Kubernetes 上的各种问题,比如应用配置错误、集群组件不健康和节点问题,帮助集群管理员更好地管理集群降低风险。KubeEye 使用 Go 语言基于开源的 Polaris 和 Node-Problem-Detector 开发,内置了一系列异常检测规则。并且,除了预定义的规则,KubeEye 还支持开发者自定义规则。
KubeEye 能做什么
发现与检测 Kubernetes 集群控制平面的问题,包括 kube-apiserver/kube-controller-manager/etcd 等;
帮助你检测 Kubernetes 的各种节点问题,包括内存/CPU/磁盘压力,意外的内核错误日志等;
根据行业最佳实践验证你的工作负载 yaml 规范,帮助你使你的集群稳定。
KubeEye 架构
KubeEye 通过调用 Kubernetes API,通过常规匹配日志中的关键错误信息和容器语法的规则匹配来获取集群诊断数据,详见架构。
预置检查项
目前已内置支持以下巡检项,未标注的项目正在开发中。
是/否
检查项
描述
✅
ETCDHealthStatus
如果 etcd 启动并正常运行
✅
ControllerManagerHealthStatus
如果 kubernetes kube-controller-manager 正常启动并运行
✅
SchedulerHealthStatus
如果 kubernetes kube-schedule 正常启动并运行
✅
NodeMemory
如果节点内存使用量超过阈值
✅
DockerHealthStatus
如果 docker 正常运行
✅
NodeDisk
如果节点磁盘使用量超过阈值
✅
KubeletHealthStatus
如果 kubelet 激活状态且正常运行
✅
NodeCPU
如果节点 CPU 使用量超过阈值
✅
NodeCorruptOverlay2
Overlay2 不可用
✅
NodeKernelNULLPointer
node 显示 NotReady
✅
NodeDeadlock
死锁是指两个或两个以上的进程在争夺资源时互相等待的现象。
✅
NodeOOM
监控那些消耗过多内存的进程,尤其是那些消耗大量内存非常快的进程,内核会杀掉它们,防止它们耗尽内存
✅
NodeExt4Error
Ext4 挂载失败
✅
NodeTaskHung
检查D状态下是否有超过 120s 的进程
✅
NodeUnregisterNetDevice
检查对应网络
✅
NodeCorruptDockerImage
检查 docker 镜像
✅
NodeAUFSUmountHung
检查存储
✅
NodeDockerHung
Docker hang住, 检查 docker 的日志
✅
PodSetLivenessProbe
如果为pod中的每一个容器设置了 livenessProbe
✅
PodSetTagNotSpecified
镜像地址没有声明标签或标签是最新
✅
PodSetRunAsPrivileged
以特权模式运行 Pod 意味着 Pod 可以访问主机的资源和内核功能
✅
PodSetImagePullBackOff
Pod 无法正确拉出镜像,因此可以在相应节点上手动拉出镜像
✅
PodSetImageRegistry
检查镜像形式是否在相应仓库
✅
PodSetCpuLimitsMissing
未声明 CPU 资源限制
✅
PodNoSuchFileOrDirectory
进入容器查看相应文件是否存在
✅
PodIOError
这通常是由于文件 IO 性能瓶颈
✅
PodNoSuchDeviceOrAddress
检查对应网络
✅
PodInvalidArgument
检查对应存储
✅
PodDeviceOrResourceBusy
检查对应的目录和 PID
✅
PodFileExists
检查现有文件
✅
PodTooManyOpenFiles
程序打开的文件/套接字连接数超过系统设置值
✅
PodNoSpaceLeftOnDevice
检查磁盘和索引节点的使用情况
✅
NodeApiServerExpiredPeriod
将检查 ApiServer 证书的到期日期少于30天
✅
PodSetCpuRequestsMissing
未声明 CPU 资源请求值
✅
PodSetHostIPCSet
设置主机 IP
✅
PodSetHostNetworkSet
设置主机网络
✅
PodHostPIDSet
设置主机 PID
✅
PodMemoryRequestsMiss
没有声明内存资源请求值
✅
PodSetHostPort
设置主机端口
✅
PodSetMemoryLimitsMissing
没有声明内存资源限制值
✅
PodNotReadOnlyRootFiles
文件系统未设置为只读
✅
PodSetPullPolicyNotAlways
镜像拉策略并非总是如此
✅
PodSetRunAsRootAllowed
以 root 用户执行
✅
PodDangerousCapabilities
您在 ALL / SYS_ADMIN / NET_ADMIN 等功能中有危险的选择
✅
PodlivenessProbeMissing
未声明 ReadinessProbe
✅
privilegeEscalationAllowed
允许特权升级
NodeNotReadyAndUseOfClosedNetworkConnection
http 2-max-streams-per-connection
NodeNotReady
无法启动 ContainerManager 无法设置属性 TasksAccounting 或未知属性
快速上手 KubeEye
克隆 KubeEye 仓库,然后安装 KubeEye:
还可以从 GitHub Releases 中下载预构建的可执行文件,release 地址参见文末,或者从源代码构建。
[可选] 安装 Node-problem-Detector:
注意:这一行命令将在你的集群上安装 npd,只有当你想要详细的报告时才需要。ke install npd
KubeEye 执行自动巡检:
root@node1:# ke diag
❝
提示:可参考文末常见 FAQ 文档链接来进一步优化您的 Kubernetes集群。
❞
添加自定义检查规则
除了上述预置的巡检项目与规则,KubeEye 还支持自定义检查规则,来看个例子:
添加 npd 自定义检查规则
安装 NPD 指令
ke install npd
使用 kubectl 编辑 ConfigMap
kube-system/node-problem-detector-config
kubectl edit cm -n kube-system node-problem-detector-config
在 ConfigMap 的规则下添加异常日志信息,规则遵循正则表达式。
自定义最佳实践规则
准备一个规则 yaml,例如,下面的规则将验证你的 Pod 规范,以确保镜像只来自授权的镜像仓库。
checks:
将上述规则保存为 yaml,例如
rule.yaml
。用
rule.yaml
运行 KubeEye。root:# ke diag -f rule.yaml --kubeconfig ~/.kube/config
Roadmap
支持更细粒度的巡检项,例如 Kubernetes 集群响应速度慢
支持对 KubeSphere 自身组件如 DevOps、微服务治理
对集群 网络、存储等组件的状态检测
你还希望 KubeEye 提供什么样的特性呢?欢迎来 Github 提交建议或需求,我们欢迎任何形式的 PR、Issue、Star 和 Fork!
👩💻 GitHub 地址:https://github.com/kubesphere/kubeeye
KubeEye 开源社群邀您加入:
参考链接
KubeEye Release****:https://github.com/kubesphere/kubeeye/releases
KubeEye FAQ 文档****:https://github.com/kubesphere/kubeeye/blob/main/docs/FAQ.md
Node-Problem-Detector:
关于 KubeSphere
KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的开源容器混合云,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。
KubeSphere 已被 Aqara 智能家居、本来生活、新浪、华夏银行、四川航空、国药集团、微众银行、紫金保险、中通、中国人保寿险、中国太平保险、中移金科、Radore、ZaloPay 等海内外数千家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括多云与多集群管理、Kubernetes 资源管理、DevOps (CI/CD)、应用生命周期管理、微服务治理 (Service Mesh)、多租户管理、监控日志、告警通知、审计事件、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。
✨ GitHub :https://github.com/kubesphere
💻 官网(中国站) :https://kubesphere.com.cn
👨💻 微信群:请搜索添加群助手微信号 kubesphere
本文分享自微信公众号 - KubeSphere(gh_4660e44db839)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。