简介
Kubernetes成立十周年之际,其采用率和生态系统呈指数级增长。Kubernetes在GitHub上拥有超过100000个星星,已成为云原生生态系统的支柱,实现了对容器化应用程序的可扩展和高效管理。最新版本Kubernetes 1.30引入了几项新功能和改进,进一步巩固了其作为领先容器编排平台的地位。
然而,要充分发挥Kubernetes的强大功能,关键在于使用正确的工具。在这里,我们将探讨十个鲜为人知但极为有用的工具,这些工具可以增强你的Kubernetes体验。从配置问题检测到网络可观测性,这些工具将帮助你更有效、更高效地管理集群。不论是Kubernetes的资深用户还是初学者,都能找到有价值的见解和实用技巧,进而优化Kubernetes工作流程。
接下来,让我们一起深入探索可以将Kubernetes水平提升到新高度的工具!
工具类别
我们将要讨论的每个项目都属于一个类别。这些类别有助于在Kubernetes上进行设置、管理和开发。在这里我们特意避免了在可观测性领域广为人知的项目,如Prometheus/Grafana,或在网络领域的Cilium。相反,我们将重点关注那些可能不太为人知,但却能为Kubernetes用户带来显著优势的工具。
1. Popeye
存储库链接: https://github.com/derailed/popeye
类别:配置问题检测。
描述:Popeye是一个Kubernetes集群修复工具。它能够扫描Kubernetes资源,并报告集群中的潜在问题和配置错误。Popeye采用前瞻性设计,旨在主动进行防护,通过定期扫描和审核部署、配置和资源定义,确保集群保持整洁和符合Kubernetes最佳实践。
解决的问题:随着时间的推移,Kubernetes集群可能会变得杂乱和配置错误,从而导致潜在的稳定性和性能问题。Popeye有助于识别这些配置错误,如已弃用的API版本、缺失的资源和安全漏洞。通过解决这些问题,Popeye有助于维护集群的健康和性能,确保集群平稳高效地运行。
使用示例:要对当前Kubernetes上下文进行扫描并扫描所有命名空间,只需使用以下命令。
popeye -A -s cm
图片
本地kind集群上的Popeye结果
2. KUTTL
存储库链接:https://github.com/kudobuilder/kuttl
类别:测试。
描述:KUTTL(Kubernetes Test ToolKit,Kubernetes测试工具包)是一个用于测试Kubernetes应用程序的综合工具包。它提供了一个简单且声明式的框架,用于编写、运行和管理测试,确保Kubernetes配置和应用程序按预期运行。
解决的问题:测试Kubernetes配置和应用程序可能很复杂且容易出错。KUTTL通过提供一个与Kubernetes无缝集成的声明式测试框架来简化这一过程。它支持定义测试场景和预期结果,从而更轻松地验证配置并在开发周期早期发现问题。
使用示例:要使用KUTTL创建和运行测试,可以在YAML文件中定义测试用例。以下是一个简单测试用例的示例。
创建一个测试目录结构:
my-tests/
├── 00-setup.yaml
├── 01-verify.yaml
├── kuttl-test.yaml
在00-setup.yaml中定义测试步骤:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key: value
在01-verify.yaml中定义预期结果:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
key: value
使用以下命令运行测试:
kuttl test my-tests/
此命令将执行测试步骤,并验证在YAML文件中定义的结果。
3.Kubescape
存储库链接:https://github.com/kubescape/kubescape
类别:安全扫描。
描述:Kubescape是一个用于Kubernetes集群的安全扫描工具。它通过扫描漏洞、配置错误和安全标准合规性,对集群的安全状况进行全面评估。Kubescape利用行业最佳实践和框架,如美国国家安全局Kubernetes强化指南,确保你的集群符合严格的安全要求。
解决的问题:确保Kubernetes集群的安全性至关重要,但由于环境的复杂性和动态性,这可能是一项挑战。Kubescape通过提供自动化的安全扫描来识别漏洞、配置错误和合规性问题,从而简化了这一任务。这有助于管理员维护一个安全、合规的Kubernetes环境,减少安全漏洞和不合规的风险。
使用示例:要对Kubernetes集群执行安全扫描,请使用以下命令。
kubescape scan framework nsa --exclude-namespaces kube-system
此命令将根据NSA Kubernetes强化指南框架对集群进行扫描,不包括kube-system命名空间。
输出示例:
kubescape扫描结果的一部分
4. Mirrord
存储库链接:https://github.com/metalbear-co/mirrord
类别:远程开发。
描述:mirrord是一个远程开发工具,支持开发者在Kubernetes集群的上下文中运行本地进程。这意味着你可以在本地开发和调试应用程序,同时它们与实时Kubernetes资源进行交互,就像它们在集群中运行一样。mirrord通过提供本地和远程环境之间的无缝桥接,简化了开发过程。
解决的问题:由于本地环境和集群环境之间的差异,在Kubernetes上开发和调试应用程序可能很困难。mirrord通过支持开发者在本地运行应用程序,同时与Kubernetes集群进行无缝交互来解决这个问题。这有助于加快调试、测试和开发速度,因为开发者可以使用熟悉的本地工具和环境,而无需每次更改都将应用程序部署到集群。
使用示例:使用mirrord在Kubernetes集群的上下文中运行本地进程。
mirrord exec --target-namespace devops-team \
--target deployment/foo-app-deployment \
nodemon server.js
5. Kube-linter
存储库链接:https://github.com/stackrox/kube-linter
类别:Linting。
描述:Kube-linter是一个静态分析工具,用于检查Kubernetes YAML文件和Helm图表,以确保它们遵守最佳实践和安全指南。它可以在部署资源之前发现潜在的问题,确保你的Kubernetes配置安全高效。
解决的问题:编写Kubernetes配置可能很复杂,即使是小小的错误也可能导致生产环境出现严重问题。Kube-linter通过分析你的YAML文件和Helm图表,以识别常见错误、安全风险和违反最佳实践的情况来解决这一问题。这种主动的方法有助于在开发周期的早期发现并解决问题,从而提高Kubernetes部署的整体质量和安全性。
使用示例:要使用Kube-linter对Kubernetes清单进行linting,请运行以下命令。
kube-linter lint 1-create-deployment.yaml
kube-lint错误
6. k3d
存储库链接:https://github.com/k3d-io/k3d
类别:配置。
描述:k3d是一个轻量级包装器,用于在Docker中运行k3s(一个轻量级的Kubernetes发行版)。它支持在Docker容器中创建和管理Kubernetes集群,为开发、测试和CI/CD目的提供了一种设置和运行k3s集群的简便方法。
解决的问题:为本地开发和测试而设置和管理Kubernetes集群可能很麻烦,而且会耗费大量资源。k3d通过在Docker容器中运行k3s集群来简化这一过程。这种方法减少了设置完整虚拟机或物理服务器的开销,使在本地机器上创建和管理Kubernetes集群更加容易和快速。
使用示例:要使用k3d创建一个新的k3s集群,请使用以下命令。
k3d cluster create mycluster
7. Kubeshark
存储库链接:https://github.com/kubeshark/kubeshark
类别:网络可观察性。
描述:Kubeshark是一个Kubernetes API流量分析器,提供对Kubernetes网络通信的深度可见性。它捕获、解析和可视化集群中的网络流量,支持监控和调试微服务之间的交互。
解决的问题:在Kubernetes集群中理解和调试网络通信可能很有挑战性,尤其是在复杂的微服务环境中。Kubeshark通过提供集群内API流量的全面视图来解决这个问题。这有助于开发人员和运维人员深入了解服务交互情况、检测异常并更有效地排查网络问题。
使用示例:要开始使用Kubeshark捕获流量,请运行以下命令。
kubeshark tap
kubeshark web界面
8. kubectl-tree
存储库链接:https://github.com/ahmetb/kubectl-tree
类别:插件。
描述:kubectl-tree是一个kubectl插件,支持将Kubernetes对象层次结构可视化为树状结构。这个工具通过提供一种简单的方式来查看和导航Kubernetes资源(如Pod、Deployment、ReplicaSet等)之间的关系,增强了kubectl的使用体验。
解决的问题:导航和理解Kubernetes资源之间的关系可能很复杂,特别是在拥有大量互相关联对象的大型集群中。kubectl-tree通过以树状格式显示资源层次结构来简化这一过程,使查看和管理资源依赖关系更加容易。
使用示例:要可视化crossplane部署的层次结构,请使用以下命令。
✗ kubectl tree deployment crossplane -n crossplane-system
NAMESPACE NAME READY REASON AGE
crossplane-system Deployment/crossplane - 49m
crossplane-system └─ReplicaSet/crossplane-6dcbf47db4 - 49m
crossplane-system └─Pod/crossplane-6dcbf47db4-gzzwp True 49m
9. Flux
存储库链接:https://github.com/fluxcd/flux
类别:GitOps。
描述:Flux是一套用于Kubernetes的持续和渐进式交付解决方案。它自动化部署资源,并根据存储在Git存储库中的配置同步集群状态,遵循GitOps原则。Flux确保Kubernetes集群的预期状态(定义在版本控制的配置文件中)得到持续维护和更新。
解决的问题:手动管理Kubernetes配置和部署可能会导致错误并难以审核。Flux通过自动化Git存储库与Kubernetes集群之间的同步来解决这个问题。将Git视为唯一真实来源,Flux确保集群状态与配置文件一致,从而实现可追溯性、可审核性和更易回滚更改。通过利用版本控制,这种方法还能促进团队成员之间的协作。
使用示例:要在Kubernetes集群中安装Flux并将其连接到Git存储库,请按以下步骤操作。
fluxctl identity --k8s-fwd-ns flux
fluxctl sync --k8s-fwd-ns flux
10. Kubecost
存储库链接:https://github.com/opencost/opencost
类别:成本管理
描述:Kubecost是一个用于Kubernetes集群的成本监控和优化工具。它提供了Kubernetes工作负载成本和资源使用情况的实时洞察。Kubecost可以帮助你准确分配成本、优化资源利用率,并通过识别低效率和未使用的资源来降低整体云支出。此外,Kubecost集成了OpenCost,这是一个用于Kubernetes的开源成本监控和管理项目。
【OpenCost】:https://www.opencost.io/docs/
解决的问题:由于容器化工作负载的动态特性和云计费的复杂性,在Kubernetes环境中管理成本可能很有挑战性。Kubecost通过提供详细的成本明细、使用报告和优化建议来解决这一问题。这有助于企业了解Kubernetes支出情况、做出资源分配的明智决策,并识别降低成本的机会。
使用示例:将Kubecost部署到Kubernetes集群后,你可以访问仪表板查看成本报告,按命名空间、标签和部署分配成本,并获得优化资源使用的建议。与OpenCost的集成进一步增强了这些功能,提供了标准化的成本监控和管理功能。
11. 额外补充
综上所述,重点介绍了十个Kubernetes的必备工具,但还有许多其他工具可以大大提升你的Kubernetes体验。这些额外的工具提供了各种功能,从管理已弃用的API到促进远程开发等等。以下是你可能会发现很有价值的其他工具列表:
工具名称 | 说明 | 存储库 |
K9s | 基于终端的Kubernetes集群管理UI | |
kube-no-trouble | 检查已弃用的API | |
kaniko | 在Kubernetes集群中构建容器镜像 | |
arkade | 便携式Kubernetes市场 | |
helmfile | 管理Kubernetes Helm Chart | |
kdash | Kubernetes终端仪表板 | |
werf | 适用于Kubernetes的GitOps CI/CD工具 | |
kluctl | Kubernetes部署工具 | |
cilium | Kubernetes的网络、安全和可观察性 | |
kubeflow | Kubernetes机器学习工具包 | |
k8sgpt | 基于GPT的Kubernetes助手 |
总结
Kubernetes刚刚庆祝了成立十周年,很明显这个生态系统比以往任何时候都更加强大和充满活力。Kubernetes已经发展成为云原生行业的关键组成部分,使企业能够高效、可靠地大规模管理其容器化应用程序。
在以上内容中提及的工具,从用于检测配置问题的Popeye到用于成本管理的Kubecost,展示了Kubernetes生态系统的多样性和深度。每个工具都解决了特定的挑战,有助于优化或保护Kubernetes部署。这些工具的大量出现凸显了Kubernetes生态系统的动态性质,以及并非每个领域都已建立良好的标准。这种多样性使得定制解决方案能够满足不同组织和用例的特定需求。
展望未来,Kubernetes将为更多的全球基础设施提供动力。随着边缘计算、无服务器架构和AI驱动的运营等新趋势的出现,Kubernetes将继续适应和发展。生态系统通过各种工具和解决方案来促进创新的能力将是满足未来云原生环境需求的关键。