容器,Docker,Kubernetes已经出现有四年了。以致于有些人甚至认为这项技术是成熟的!但是,我强烈认为,容器基础设施的构造任然处于成长阶段。
这篇博文将重点介绍除了容器本身以外,容器基础设施的所有其他部分。但这些都只是一个起点。
Docker通过简化现有的微服务概念,在2013年彻底改变了软件技术。我们最好将其描述为一个可以将任何应用程序及其依赖关系打包到虚拟容器中的工具。
阅读Web开发人员和容器顾问之间的对话,以更好地了解容器的实现。
Kubernetes是Google开发的一个开源工具,用于在集群环境中管理容器化的应用。它本质上是为了管理Docker,并解决现代集群基础架构的设计方式之间的脱节而开发的。
那么你应该使用哪一个?
在我看来,你的生产环境中两者都应该被使用。Kubernetes配合Docker一起使用十分相得益彰。
Kubernetes是目前的市场领导者,并且它还有一个庞大的社区支持。这是一个可以让开发者在同一个页面上,遵循相同的指导原则的完美工具,尽管这让开发者有了更少的灵活性。但它有很大的潜力成为容器领域的一个标准。
另一方面,Docker Swarm(又名Docker Compose ++)在设计之初就仔细的考虑了开发。因此其在开发环境中更易于调试。而不如生产中那么强大。
另外值得一提的是,上述所有技术都是开源的。了解开源的真正价值也很重要。阅读关于开源容器问题的更多信息。
从'hello world'开始运行你的容器化应用程序是一个漫长的学习曲线。一旦你掌握了容器,并学会了解决所有问题的方法,你就可以进入下一个阶段,部署和维护你的应用程序。
那么,开发人员在运行他们的容器化基础设施时必须考虑哪些问题呢。容器策略的决定将对客户产生积极或消极的影响。
您可以将数据库托管在容器中,而无需担心开发环境中的I / O性能。在生产环境中还有很多要考虑的事情。
您需要考虑数据库存储组件,备份和复制。运行现代Web应用或移动API可扩展数据库以处理随着需求改变而增加的I / O,以及高可用性和可靠的备份/恢复策略。
给您自己选择一个合适的云提供商,无论是裸机,公有云还是混合云。调查您的云提供商是否可以在一个地区内提供高可用性。
最后,寻找灵活的解决方案,因为云提供商的容器部署流程各不相同,并且您不希望最终锁定一个提供商。
目的是在没有任何停机的情况下实现部署(蓝绿部署)。可以通过启动运行新版本的副本群集来部署,而所有旧的副本仍然服务于所有的实时请求。
选择正确的工具集很重要,因为部署管理工具在开发环境和生产环境中会有很大的不同,正如上面提到的Docker Compose案例。转向多主机环境会增加复杂性,请确保您提前考虑从简单的单容器应用程序转移到一组复杂的容器映像的细节,其中每个具有多个实例的映像都连接到负载均衡器来分配工作量。
通过一个或多个主机将单个容器服务移动到多个容器需要负载均衡器来分配传入的请求。
为了提供无缝的最终用户体验,容器应用程序需要相互通信,并能够在任何服务器或任何容器群集上进行部署。
像Nginx或HAProxy这样的工具是微服务负载均衡器的流行选择。诀窍是保持其配置是最新的,同时考虑到需要同时运行不同的版本。开发人员面临着服务发现带来的网络挑战,这导致了容器采用流程的放缓。
容器不能被当作小虚拟机,因为它们是“共享内核独立运行的代码片段”。容器的快速适应需要一个新的安全策略。在产品中,所有的容器进程都运行在一台主机上,与网络入侵和各种攻击媒介的风险隔离开来。
确保您为您的容器堆栈应用了防火墙规则,来防止拒绝服务和暴力破解的攻击。此外,像Habitus.io这样的工具可以帮助您在构建过程中删除和管理包含私密的图层。
查看整个堆栈容器监视策略的可用选项,以确保用户可以使用应用程序执行必要的功能。检查当前和未来的负载不会导致性能下降或中断,最后要记住故障排除和错误处理。
此外,设置日志管理以收集和聚合一个或多个日志服务器的日志条目。考虑查看和搜索日志来排除故障的方法。