dbaplus社群 2024年10月06日
K8s不再是好选择?可能是这9个核心问题没悟透!
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了 Kubernetes 技术栈中的多个方面,包括部署方式、网络组件、持久化存储、线上应用管理工具、CICD 工具、集群应用网关、监控平台解决方案、可观察性的抉择等内容,为读者提供了全面的信息和分析。

kubeadm 是 Kubernetes 官方推荐的部署工具,具有简化部署、一致性、可扩展性等优点,适用于生产环境;Kubernetes 二进制文件部署方式则适用于对组件安装细节有完全掌控权等特殊需求,但复杂度和出错风险较高。

在集群网络组件选择中,Flannel 简单易用,适合初学者和小型集群;Calico 提供精细化网络策略,性能优越,适合大规模集群;选择网络方案需考虑业务场景,如网络访问控制、性能需求、架构是否支持 BGP 协议等。

持久化存储方案中,NFS 成本低,适合小型集群或非关键任务;CEPH 性价比较高,适合大规模集群;MiniO 是出色的对象存储解决方案。选择时需考虑成本、性能、数据可靠性、Kubernetes 集成程度、运维难度等因素。

Helm 作为线上应用管理工具,具有简化部署与升级、版本控制与回滚、标准化与复用、配置管理、安全性与审计、生态丰富等优点,是线上 Kubernetes 应用管理的理想选择。

对于 Kubernetes 集群的 CICD 工具选择,成熟团队且需要高度定制化流程可继续使用 Jenkins 并配合 Kubernetes 插件;希望拥抱 GitOps 可选择 ArgoCD;重视与代码版本管理紧密集成可选择 GitLab CI/CD,实际运用中可组合使用。

在集群应用网关中,Ingress-nginx 提供基本 Ingress 功能;Nginx-ingress-controller 特性丰富,适合复杂场景;APISIX 适合微服务架构和 API 管理;Kong 适合企业级和大规模部署。选择应根据具体需求综合评估。

监控平台解决方案中,Zabbix 是传统监控系统,Prometheus 专为云原生环境设计,与 Kubernetes 深度集成,具有原生集成、声明式监控、丰富生态、灵活查询与告警等优势;Prometheus Operator 可更方便地在 Kubernetes 上管理和部署 Prometheus。

在可观察性的抉择中,SkyWalking 是应用性能监视系统,提供多种功能,自带 UI 界面;OpenTelemetry 是开放标准的可观测性框架,生态广阔,提供更多定制化可能性。

ZHDYA 2024-10-06 08:01 广东

经验之谈,来聊聊你的看法!

一、Kubeadm VS kubernetes 二进制


1.kubeadm 方式部署(推荐)


推荐理由:



2.Kubernetes 二进制文件部署


适用场景:



注意:



二、集群网络组件的选择


在 Kubernetes 集群中,选择合适的网络解决方案非常重要,因为它们负责提供跨节点容器间的服务发现、通信以及网络策略实施等功能。


1.Flannel


推荐理由:



局限性:



2.Calico


推荐理由:



复杂度:


Calico 的配置和维护相比 Flannel 来说稍微复杂一些,尤其是涉及到 BGP 路由配置时。


3.CNI 网络方案优缺点及最终选择


至于怎么选择,我觉得需要先考虑几个问题,结合自己的业务场景去做应用:



三、持久化存储


在 Kubernetes 集群中选择持久化存储方案时,需要考虑的因素还是蛮多的。不考虑外在因素,要看咱们整个团队或负责这块的同事是否专业于这块技术栈,记住,公司最宝贵的资源永远是数据(勿喷),下面我来通过几个不同的维度来分析下能够满足且可挑选的几个存储解决方案:


1.成本



2.性能与扩展性



3.数据可靠性与安全性



4.Kubernetes集成程度



5.运维难度与社区支持



总结



四、是否 Helm 可作为线上应用管理工具


这个我可以先给大家一个结论,我们作为一家某个行业内的互联网龙头企业,整个业务链都是基于 Helm 作为线上应用管理工具使用的。


另外 Helm 在云原生领域中得到了广泛的采纳和认可。我来通过如下几点来给大家聊下 Helm 在线上应用管理中的适用性:








我们当前的团队小伙伴们,每个人负责几个业务线,同时大家会根据当前所负责的业务属性不定期开发、优化、迭代某类应用的 Charts 包,这样对于 DEV 和 OPS 的衔接更加的密切,从而更加了解线上应用的状态和配置。


另外,无论是从简化运维、保障应用一致性还是提高团队协作效率的角度来看,Helm 都是线上 Kubernetes 应用管理的理想选择。通过使用 Helm,运维人员能够更好地聚焦于应用本身的服务质量和业务发展,而不必花费过多精力在基础设施的复杂部署流程上。


五、CICD 工具的选择


在 Kubernetes 技术栈中,CICD 这个话题,大家正确看待就好了,不要总是听别人说,每个技术栈的发展和应用都有各自的优势,Jenkins 发展至今,难道就通过 kubernetes 某些层面直接否定?不现实的。我们企业仍然是基于 Jenkins 贯穿整个 CICD 的上线流程,而且没有遇到多少因为自身瓶颈卡脖子的问题,虽然业界有些软件与 kubernetes 的匹配度较高,但是真的适用你们企业的?还是通过几个维度来做个分析吧。


1.集成与兼容性





2.易用性与学习曲线





3.自动化与扩展性





4.社区支持与生态



当然还有几款大家在用的 CICD,就不一一评价了。


对于 Kubernetes 集群的 CI/CD 工具选择,如果是成熟的团队、需要高度定制化流程,并且已经有 Jenkins 使用经验,那么继续使用 Jenkins 并配合 Kubernetes 插件是个不错的选择;


如果希望拥抱 GitOps,简化应用部署和管理流程,ArgoCD 是一个很好的选择;


而对于希望在一个平台上完成全流程 DevOps 工作流,并且重视与代码版本管理紧密集成的团队,GitLab CI/CD 提供了一站式解决方案。


另外,在实际运用中,往往会选择组合使用这些工具,比如 Jenkins 或 GitLab CI/CD 负责 CI 部分,然后使用 ArgoCD 负责 CD 部分,以实现最佳效果。


六、集群应用网关


在 Kubernetes 技术栈中,选择集群应用网关(Ingress Controller)是一项重要的决定,不同的 Ingress Controller 工具各有优劣,我选择了几个较为热门的网关,从几个重要维度对比一下 ingress-nginx、nginx-ingress、APISIX 和 Kong。


1.功能完备性



2.性能与扩展性



3.易用性与社区支持



4.云原生与集成



Ingress-nginx 更注重与 Kubernetes 生态系统的紧密集成和功能扩展,而 NGINX Ingress Controller 则强调与 Nginx 产品的原生集成、稳定性以及官方支持的优势。在实际使用中,用户可以根据自身对 Kubernetes 集成深度的需求、对 Nginx 功能扩展的要求以及对官方支持和长期维护的关注程度,来选择适合自己的 Ingress 控制器方案。


对于特别依赖或微服务架构下需要更强大 API 管理功能的场景,APISIX 和 Kong 则提供了更多的增值功能。APISIX 更适合寻求国产自主可控、高度集成Kubernetes 生态、追求高性能和灵活扩展的团队。而 Kong 则在国际化支持、企业级 API 管理、与多种云服务集成等方面表现出色,适合全球化运营和技术要求更高的组织。


选择哪种工具,应根据具体业务需求、团队技能、技术支持以及未来发展规划来综合评估。


七、监控平台解决方案


Zabbix 和 Prometheus 是两种广泛应用的监控解决方案,它们各自具有独特的特性和适用场景。接下来,我将对二者进行对比,并重点阐述 Prometheus 在 Kubernetes 上的优势,以及 Prometheus 与 Prometheus Operator 的区别和介绍。


1.Zabbix VS Prometheus


Zabbix 是一个传统的监控系统,提供丰富的监控功能,包括自动发现、阈值警告、图表展示等,支持多种类型的数据采集,如系统性能、网络流量、数据库状态等。Zabbix 的配置相对传统,依赖于中央服务器架构,虽然也能监控 Kubernetes,但并不原生支持 Kubernetes 的声明式和动态资源管理模式。


Prometheus 是专为云原生环境设计的监控和警报系统,尤其在 Kubernetes 环境下表现卓越。Prometheus 采用 Pull/Push 模型抓取监控数据,支持多维度数据模型,具有强大的查询语言 PromQL,可进行灵活的数据聚合和分析。Prometheus 通过 ServiceMonitor CRD (自定义资源定义)可以自动发现并监控 Kubernetes 中的服务和 Pod,完美契合 Kubernetes 的声明式理念。


2.Prometheus 在 Kubernetes 上的优势






3.Prometheus VS Prometheus Operator




优势在于,Prometheus Operator 提供了以下核心功能:



至此,随着当前技术栈的不停迭代和发展,在 Kubernetes 环境下,Prometheus 凭借其与 Kubernetes 的紧密集成、声明式配置以及强大的生态系统,成为越来越多企业的首选监控方案。而 Prometheus Operator 进一步提升了 Prometheus 在 Kubernetes 上的易用性和可靠性,使大规模集群监控更加得心应手。



八、可观察性的抉择


在 Kubernetes 技术栈中,选择可观测性(Observability)和 APM(Application Performance Monitoring,应用性能监控)工具是非常关键的,这有助于提升系统的可运维性和故障排查效率。


SkyWalking 和 OpenTelemetry 是目前市场上备受关注的两款工具,它们分别从不同角度提供可观测性支持,下面从多个维度对比和推荐:


1.功能特性


SkyWalking:是一款应用性能监视系统,专注于服务网格、微服务和云原生环境的可观测性,提供了服务拓扑发现、分布式追踪、性能指标监控、告警和诊断等功能。SkyWalking 支持多种语言 SDK,并有与 Kubernetes 集成的良好支持,可以方便地监控部署在 Kubernetes 上的应用程序。


OpenTelemetry:是一个开放标准的可观测性数据收集、传输和导出框架,旨在统一行业内各种监控和追踪工具的数据格式。OpenTelemetry 提供了统一的 SDK 用于在多种编程语言中产生遥测数据,包括 traces、metrics 和 logs,并支持将数据发送至多种后端分析和存储系统,如 Jaeger、Zipkin、Prometheus 和 SkyWalking 等。


2.开箱即用程度




3.生态与兼容性




4.定制化需求




总结推荐


如果你希望有一个快速部署、功能全面且对 Kubernetes 环境支持良好的一站式解决方案,SkyWalking 是值得推荐的。


如果你的企业需要一个更灵活、开放的标准框架,以便与现有或未来的各种可观测性工具无缝对接,并且看重生态的多样性,OpenTelemetry 是更好的选择。


实际上,许多情况下,这两个工具并不是互斥的,而是可以结合使用。例如,可以使用 OpenTelemetry SDK 收集应用的可观测性数据,然后将这些数据输出给 SkyWalking 或其他支持 OpenTelemetry 的后端系统进行进一步分析和展示。


九、Istio 到底要不要安排?


Istio 作为服务网格(Service Mesh)解决方案,在 Kubernetes 架构中,它通过在微服务间提供一致的安全、连接、可观测性和流量管理能力,显著提高了云原生应用的运维效率和整体性能。但是一直有小伙伴在咨询一些问题例如:istio 技术栈是否特别复杂?istio 服务挂了,是否会影响到整个集群的应用?Istio 是否具有全面应用的可行性?有哪些风险点以及注意事项,今天咱们就展开聊聊。


1.Istio 功能&认可度



2.Istio 技术栈是否特别复杂?


Istio 由于其功能丰富,涉及到了服务间的通信管理、安全控制、可观测性等诸多方面,的确具有一定的技术复杂性。不过,Istio 的设计理念是尽可能减少对应用代码的侵入,通过 Sidecar 模式让 Envoy 代理接管服务间通信,从而实现上述功能。尽管如此,对于初次接触的服务治理工具的团队,确实需要一定时间去学习和理解 Istio 的核心概念和配置方法。但随着对服务网格理解的加深和实践经验的积累,大部分团队都能够逐步掌握并发挥其优势。


3.Istio 服务挂了,是否会影响整个集群的应用?


Istio 的核心组件(例如 Pilot、Galley、 Citadel 等)失效,确实可能对集群中部分服务的正常运作产生影响,尤其是流量管理和安全性相关的功能。然而,Envoy 代理在设计上具有一定的容错性,例如它可以缓存一部分配置,短时间内即使控制面板不可用,服务间的通信也不一定会立刻中断。即便如此,为了避免单点故障,Istio 提倡部署高可用的控制面,并且可以在适当时候通过冗余和故障转移来确保服务的连续性。


4.Istio 是否具有全面应用的可行性?


Istio 已经在众多生产环境中得到了验证和应用,证明了其在 Kubernetes 架构中全面应用的可行性。对于需要复杂服务间通信管理、安全策略、可观测性等功能的企业级应用,Istio 是一种理想的解决方案。然而,是否适用于每个具体的项目或场景,则需要根据项目规模、业务需求、团队技术栈以及运维能力等多方面因素综合评估。


5.风险点与注意事项



不过,总的来说,Istio 作为服务网格解决方案确实增强了云原生应用的运维和管理能力,但在全面应用时需充分考虑其复杂性、资源消耗、运维要求以及可能的风险点,并采取适当的策略和措施予以应对。也不是说,全部的业务场景都适用,如果仅有很少量的应用而且服务层面也不需要很精度的流量控制,那真的就没必要了。另外核心维护人员对于 Istio 的技能熟悉度也是考量之一!从外部来看,随着技术的演进和社区支持的加强,Istio 在许多场合下已经成为推动微服务治理现代化的重要力量。我们已经全面应用,至于大家,那就视情况而定吧!


放在最后


今天从如上几个方面总结汇聚成了一篇解答式的文章,更多的是基于笔者已知的场景和业界的使用情况做了分析,很多问题不是不给大家答案,主要是因为每个企业在选择和采用这些技术时,应当充分考虑自身业务需求、现有技术栈的兼容性以及团队的技术储备与成长潜力。例如,在 Kubernetes 集群建设中,不同的网络组件、存储方案、CI/CD工具、监控系统、网关服务以及服务网格(如 Istio)等选择,都需要紧密结合业务规模、系统性能需求、安全性要求以及团队维护能力等因素。


最后,技术栈的发展它是一个动态的过程,既要把握技术趋势,也要贴合自身实际情况,适时调整和优化。在推进技术演进的过程中,培养团队的技术广度和深度,促进技术与业务的深度融合,才是实现技术栈可持续发展的关键所在。


作者丨ZHDYA

来源丨公众号:运维狗工作日记(ID:DEVOPS002

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn


跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Kubernetes 技术栈 部署方式 监控平台 可观察性
相关文章