还应该考虑纵向和横向的应用扩容 。关键是要找到适当的平衡点,在不过度消耗的情况下更好地利用资源 。一般来说,横向扩容和复制工作负载更可取 , 但要注意其可能会影响数据库连接和存储 。
5.要为失败做好计划
在应用基础架构的各个方面,为故障做规划已成为日常 。需要开发能够应对应用程序故障、节点故障和集群故障等不同故障情况的方案 。实施高可用性应用程序Pod及Pod反亲和性等策略有助于确保发生故障时的覆盖范围 。
每个机构都需要针对集群故障制定详细的灾难恢复计划,并定期进行演练 。当从故障中恢复时 , 受控和渐进的部署有助于避免资源不堪重负 。
6. 确保交付流水线安全
软件供应链总是易受错误和恶意行为者的影响 。因此需要控制流水线中的每一个步骤,避免在未仔细考虑外部工具和供应商可信度的情况下依赖它们 。
为保持对外部资源的控制,需要采取一些措施,例如扫描来自远程资源库的二进制文件,并使用软件成分分析(SCA)解决方案以对其进行验证 。团队还应在整体流水线中应用质量和安全关卡,以确保用户和流水线本身具有更高的可信度,从而保障交付软件具有更高的质量 。
7. 同时确保运行时间的安全
使用准入控制器来执行规则(例如阻止黑名单版本的部署)有助于确保运行时间的安全 。OPA Gatekeeper 等工具有助于执行策略,如只允许受控的容器注册表进行部署 。
同时,建议使用基于角色的访问控制来确保对Kubernetes集群的访问安全 , 其他运行时间保护解决方案可以实时识别和处理风险 。命名空间隔离和网络策略有助于阻止横向移动并保护命名空间内的工作负载 。可以考虑在隔离节点上运行关键应用程序,以降低容器逃逸场景的风险 。
8. 确保环境安全
确保环境安全意味着要假设网络始终会受到攻占 。建议采用审计工具来检测群集和基础设施中的可疑活动,以及具有全面可见性和工作负载控制功能的运行时间保护 。
同类最佳的工具固然很好,但在出现警报或可疑活动时,还需要一个强大的事件响应团队,并制定明确的操作手册 。与灾难恢复类似,应定期进行演习和实践 。此外,由于外部视角和客观研究能够提供有价值的见解,许多机构还会利用漏洞赏金 , 或由外部研究人员尝试入侵系统以发现漏洞 。
9. 持续学习
随着系统和流程的发展演进,需要通过收集历史性能数据来评估并采取行动 , 从而大力开展持续学习 。小规模的持续改进很常见;过去相关的内容可能现在已不再相关 。
主动监控性能数据有助于发现某项服务中的内存或CPU泄漏,或第三方工具中的性能问题 。通过积极评估数据的趋势和异常,能够提高对系统的理解和系统性能 。相较于收到实时警报后再进行响应,这种主动监控和评估更具成效 。
10.人工操作是最薄弱的环节
在可能的情况下 , 自动化能够最大限度地减少人工参与,这对于提升安全是一种很好的方法,因为在安全方面 , 人工操作是最薄弱的环节 。建议通过探索一系列可用的自动化解决方案,找到最适合的个性化流程和定义 。
GitOps作为在将变更从开发阶段引入生产阶段时的一种的常用方法,为管理配置变更提供众所周知的合约和界面 。类似的方法是为不同类型的配置使用多个仓库,尽管开发、登台和生产环境之间应该彼此相似,但至关重要的是其必须明确分离 。
展望未来
AI赋能的解决方案有助于降低运营的复杂性,并自动化执行与管理环境、部署和故障排除有关的任务 , 因此为未来带来希望 。即便如此,人类的判断也是不可替代的 , 对此应始终予以考量 。
如今,AI引擎依赖于公共知识 , 其中可能包含不准确、过时或不相关的信息,最终导致其给出错误的答案或建议 。归根结底,运用常识并牢记AI的局限性至关重要 。
作者:JFrog大中华区总经理董任远
【关于Kubernetes在生产中的应用,这十大要点ChatGPT不会说?】
推荐阅读
- 在 Kubernetes 环境中实现 gRPC 负载均衡
- 浅谈分布式事务及解决方案
- 量子计算模型在提升计算效率方面的优势
- 我在前端写Java SpringBoot项目
- AI不缺概念,甚至不缺技术,但实在缺产品
- Java中,对象一定在堆中分配吗?
- 用IntelliJ IDEA进行前端开发
- 永久不过时的3个追女生套路
- 现在的城镇职工养老保险,还能够一次性补缴15年的费用吗?
- 没得选,游戏进入“开挂”时代