[编者的话] 本文以 IT 运维团队为多个内部团队构建企业级 Kubernetes 解决方案的视角展开, 介绍了在制定 multi-cloud 策略时需要考虑的因素及解决办法, 包括基础设施, 版本管理, 部署策略及安全性等方面, 提供了一套相对完整的最佳实践方案.
2018 年云服务现状调查显示, 81% 的企业会使用混合云, 公有云计算服务和现代基础架构平台更具灵活性. 随着企业为客户提供价值速度的加快, 公有云和私有云的采用率继续以健康的速度增长也就不足为奇了. 事实上, 根据 IDC 的最新数据, 2018 年第一季度全球服务器出货量同比增长 20.7% 至 270 万台, 收入增长 38.6%, 连续第三个季度实现两位数增长!
另一个令人兴奋的大趋势是, 容器成为了打包和管理应用程序组件的最佳方式. Kubernetes 是部署和操作容器化应用的最佳方式, 这一点已被广泛认同. 另外重要的一点是, Kubernetes 可以助力跨云供应商提供标准化功能.
但这些进步也引进了新的复杂性. 容器解决了一些 DevOps 面临的挑战, 但也引入了新的需要管理的抽象层. Kubernetes 解决了运维面临的部分挑战, 并非全部. 而且, Kubernetes 是一个分布式应用, 本身也需要管理.
在不同云供应商之间部署和运营 Kubernetes 集群时会面临一些关键挑战, 本文将就此讨论解决这些挑战的最佳实践和指南. 我们将以 IT 运维团队为多个内部团队构建企业级 Kubernetes 解决方案的视角展开.
1. 利用好基础设施
与本地基础架构供应商一样, 所有云供应商都提供存储和网络服务. 在考虑 multi-cloud 策略时要关注的一个问题是, 是依赖每个供应商的能力还是自己去抽象一层. 虽然这两种方法都可行, 但尝试最小化抽象层并利用供应商的原生方法始终是明智的做法. 例如, 不要在 AWS 中运行 Overlay Network, 而最好使用 AWS 的 Kubernetes CNI(容器网络接口)插件, 该插件为 Kubernetes 提供本机网络功能. 此方法还允许使用其他服务, 如安全组和 IAM.
2. 管理自己的(上游)Kubernetes 版本
Kubernetes 是一个快速发展的项目, 每三个月发布一次新版本. 一个关键的决定是, 是否希望供应商为你测试新版的 Kubernetes, 或者是否允许团队直接使用上游版本.
当然, 这需要衡量利弊. 使用供应商管理的 Kubernetes, 供应商可以提供额外测试和验证. 但是, Cloud Native Computing Foundation(CNCF)的 Kubernetes 社区本身拥有成熟的开发, 测试和发布流程. Kubernetes 项目由一些特殊兴趣小组 (SIG) 组织, Release SIG https://github.com/kubernetes/sig-release#mission 负责确保每个新版本的质量和稳定性. CNCF 还为供应商提供 Kubernetes 软件一致性计划, 以确保他们的软件与 Kubernetes API 100% 兼容.
企业在生产环境中最好使用稳定版本. 但是, 某些团队可能需要具有 pre-GA 功能的集群. 最好的办法是, 团队可灵活选择多个校验过的上游版本, 或者按需尝试更新的版本, 但风险自负.
3. 通过策略标准化集群部署
安装 Kubernetes 集群时需要考虑的几个点. 如下:
版本: 要使用的 Kubernetes 组件的版本.
网络: 通过 CNI(容器网络接口 https://github.com/containernetworking/cni )插件配置要使用的网络技术.
存储: 通过 CSI(容器存储接口)插件配置要使用的存储技术.
Ingress:Ingress Controller 用于负载均衡和反向代理外部请求到应用程序服务.
监控: 用于监控集群中 Kubernetes 组件和工作负载的附加组件.
日志记录: 一种集中式日志记录解决方案, 用于从 Kubernetes 组件以及集群中的应用程序工作负载收集, 聚合和转发日志到集中式日志记录系统.
其他附加组件: 需要作为集群的一部分运行的其他服务, 如 DNS 和安全组件.
虽然可以针对每个集群应用这些设置, 但将集群安装采样为模板或策略会更加高效, 可以轻松复用. 这方面的一些示例可以是 Terraform 脚本或 Nirmata 集群策略. 集群安装自动化后, 也可以作为更高级别工作流的一部分调用, 例如从服务目录中完成自助服务配置请求.
4. 提供端到端安全性
容器和 Kubernetes 的安全性需要考虑下面几个点:
镜像扫描: 需要在运行之前扫描容器镜像以查找漏洞. 在允许镜像进入企业的私有注册表之前, 可以将此步骤作为
Continuous Delivery
管道的一部分来实现.
来源: https://juejin.im/entry/5bc85a0d5188255c8c0ccb67