在 Google 平台上使用容器

一种更优越的开发和部署应用的方法

免费试用 查看文档
Google 特有的方式

从 Gmail 到 YouTube 和 Google 搜索,Google 的所有产品都是在容器中运行。容器化让我们的开发团队可以快速行动、高效部署软件,并以前所未有的规模运营。每个星期我们都要启动超过 20 亿个容器。这十年来,我们不但积累了有关如何在生产环境中运行容器化工作负载的丰富知识,而且一直与社区积极分享这些知识:从早期为 Linux 内核贡献 cgroups,到在 Kubernetes 项目中开放我们内部工具所采用的设计源代码,均是如此。我们将这些专业知识融入 Google Cloud Platform,使任何规模的开发者和企业都能轻松利用最新的容器技术创新成果。

容器基础知识:什么是容器?

容器提供了一种逻辑打包机制,以这种机制打包的应用可以脱离其实际运行的环境。利用这种脱离,不管目标环境是私有数据中心、公有云,还是开发者的个人笔记本电脑,您都可以轻松、一致地部署基于容器的应用。容器化使开发者和 IT 运营团队的关注点泾渭分明 - 开发者专注于应用逻辑和依赖关系,而 IT 运营团队可以专注于部署和管理,不必为应用细节分心,例如具体的软件版本和应用特有的配置。

之前使用虚拟化环境的用户经常会将容器与虚拟机 (VM) 进行比较。您可能已经熟悉虚拟机的定义:在主机操作系统上运行且以虚拟化途径访问底层硬件的客机操作系统。与虚拟机相似,容器也让您可以将应用与库和其他依赖项打包,提供独立环境来运行您的软件服务。但是,我们从下方可以看到,两者的相似性仅此而已,因为容器为开发者和 IT 运营团队提供了更加轻型、具有众多优势的运营单元。

为什么要使用容器?

虚拟机要求虚拟化硬件堆栈,与此不同的是,容器在操作系统级别进行虚拟化,且可以直接在操作系统内核上运行多个容器。也就是说,容器更轻巧:它们共享操作系统内核,启动速度更快,且与启动整个操作系统相比其占用的内存微乎其微。

可用的容器格式有许多。Docker 是一种广受欢迎的开源容器格式,Google Cloud Platform 和 Google Kubernetes Engine 均支持这种格式。

为什么还要采用沙盒技术?

容器会将应用相互隔离,除非您明确将它们连接起来。这意味着,您不必担心依赖项冲突或资源争用,因为您可以为每项服务设置明确的资源限额。重要的是,因为您的应用不是直接在主机操作系统上运行,因此您可以获得额外的安全保障。

一致的环境

容器让开发者可以创建与其他应用相隔离的可预测环境。容器还可以包含应用所需的软件依赖项,比如具体的编程语言运行时版本和其他软件库。从开发者的角度看,无论应用最终部署在什么地方,所有这些都保证会保持一致。这一切将转化为生产力的提升:开发者和 IT 运营团队可以减少调试和诊断环境差异所需的时间,将更多的时间用于为用户提供新的功能。而且这也意味着错误更少,因为开发者现可在开发和测试环境中做出在生产环境中也适用的假设。

在任何地方运行

容器几乎能在任何地方运行,极大减轻了开发和部署工作量:在 Linux、Windows 和 Mac 操作系统中;在虚拟机或裸机上;在开发者的机器或本地数据中心的机器上;当然还有在公有云上。容器广受欢迎的 Docker 映像格式则可进一步提供可移植性方面的帮助。无论您希望在什么地方运行软件,都可以使用容器。

隔离

容器会在操作系统一级虚拟化 CPU、内存、存储和网络资源,为开发者提供在逻辑上与其他应用相隔离的沙盒化操作系统接口。

  容器的优势 虚拟机的优势
一致的运行时环境
应用沙盒
占用的存储空间少  
开销低  
从代码到应用

借助容器,您可以将应用及其依赖项封装为一个可进行版本控制的简洁清单文件,不但能让您团队中的开发者轻松复制您的应用,还可在集群中的机器之间复制。

就像软件库将零碎的代码打包在一起,让开发者脱离用户身份验证和会话管理等逻辑;与此类似,容器让您可以将应用整个打包,脱离操作系统、机器,甚至是代码本身。结合基于服务的架构,要求开发者考虑的整个系统就会小许多,因而敏捷性和生产力更高。所有这些都能简化应用的开发、测试、部署和整体管理。

从单体架构到基于服务的架构

容器最适合基于服务的架构。在单体架构中,应用的每个部分(从 IO、数据处理到呈现)都交织在一起;与此不同的是,基于服务的架构会将这些部分分为独立的组件。工作的分离和分割让您的服务在其他服务发生故障时也能继续运行,使您的应用在整体上更加可靠。

组件化还让您能更快、更可靠地进行开发;小代码库更易于维护,而且由于服务是独立的,因此您可以轻松地测试特定的输入会造成怎样的输出。

基于服务的应用最适合使用容器,因为您可以对每个容器进行运行状况检查,限制每项服务只能使用特定的资源,以及独立启动和停止每项服务,不会相互干扰。

同时,由于容器脱离了代码,您可以将单独的服务视为黑箱,从而进一步缩小开发者需关注的空间。当开发者开发相互依赖的服务时,可以轻松地为具体的服务启动一个容器,而不必浪费时间事先设置正确的环境和排查问题。

Kubernetes:生产级容器协调系统

我们在内部集群管理系统 Borg 上取得了许多成果,并将积累的经验融入到开源项目 Kubernetes 中。现在,您和其他公司可以分享我们数十年的宝贵经验。Kubernetes 也称为“k8s”,可提供自动化的容器协调功能(为您管理机器和服务),提升可靠性,减少您需要在 DevOps 上投入的时间和资源,更为您减轻与这些工作相关的压力。

Kubernetes 使与部署和管理应用相关的所有工作都得以简化。Kubernetes 会自动执行发布和回滚操作,并监控服务的运行状况以在出现不良影响之前阻止那些存在问题的发布。它还会对您的服务不间断地执行运行状况检查,重新启动有故障或停滞的容器,且只会在确认已成功启动服务时向客户提供服务。此外,Kubernetes 还会自动根据利用率上下调节您的服务容量,确保您在需要的时刻只运行需要的服务容器。与容器一样,Kubernetes 可让您对集群进行声明式管理,以便对您的设置进行版本控制,使其易于复制。

Kubernetes 的特性
  • 自动发布和回滚
  • 服务运行状况监控
  • 自动调节服务容量
  • 声明式管理
  • 随处部署,包括混合部署

或许最重要的是,Kubernetes 可在任何地方使用,让您可以在本地部署、公有云部署以及混合部署之间进行协调。这让您的基础架构可以覆盖位于任何位置的用户,让您的应用可以实现更高的可用性,让您的公司可以在安全与费用上取得平衡,一切都可根据您的具体需求定制。

在 Google 平台上运行您的集群

当然,Kubernetes 在 Google Cloud Platform 上的运行性能最佳。Google Kubernetes Engine 是高级的托管式 Kubernetes 解决方案,可让您迅速完成设置并做好正式投入使用的准备。

Kubernetes Engine 由最了解容器的 Google 可靠性工程师全面管理,确保您的集群不但随时可用,而且保持最新状态。它可与所有 GCP 服务(如 Stackdriver 监控、诊断和日志记录服务;Identity and Access Management;以及 Google 一流的网络基础架构)无缝集成。

Kubernetes Engine 的特性
  • 托管式开源 Kubernetes 服务
  • 99.5% SLA,集成的多地区部署功能让您实现高可用性
  • 与其他 GCP 服务无缝集成
  • 业界领先的性价比
  • 灵活,并且与本地集群或其他云服务商具有互操作性
  • Google 级托管式基础架构

但是,我们非常愿意为您提供选择的余地。Google Cloud Platform 为您提供运行容器所需的各种资源。从提供全托管式“平台即服务”的 Google App Engine 柔性环境和提供集群管理功能的 Kubernetes Engine,到具有世界一流性价比的 Google Compute Engine 上提供的自主开发型基础架构,您总是可以在 Google Cloud Platform 上找到运行容器所需的理想解决方案。

完整的容器解决方案

不仅如此,Google Cloud Platform 还为您提供了使用容器所需的工具,满足您从开发环境到生产环境的各种需求。在 Google 的严格安全标准和世界级网络的支持下,Cloud BuildContainer Registry 可提供 Docker 映像存储和管理服务。Google 的 Container-Optimized OS 提供预装了 Docker 和 Kubernetes 运行时的高安全性轻量级操作系统。您的所有容器管理工作都可以在 GCP 上搞定。

“十年的容器管理系统打造经验让我们受益良多,我们将所学的许多宝贵知识融入了 Kubernetes 这个 Google 最新的容器管理系统。该系统的目标是利用容器的功能大幅提升编程人员的生产力,简化人工和自动系统管理工作。”

Google, Inc