Kubernetes 与 Docker

利用搭配效果更佳的容器技术,更快地构建、交付和缩放应用。

Kubernetes 与 Docker 的比较问题

谈到 Kubernetes 与 Docker 的比较时,往往会落入“非此即彼”的陷阱:应使用 Kubernetes 还是 Docker?这就像是比较苹果和苹果派,常见的误解是你必须选择其中之一。

如果以“两者结合”的结构来提问,就比较容易理解 Kubernetes 与 Docker 之间的差异了。事实上,不必进行选择,Kubernetes 和 Docker 基本上是不同的两种技术,适合结合使用来构建、交付和缩放容器化的应用。

Docker 与容器化的兴起

Docker 是一种开放源代码技术,也是一种容器文件格式,可将应用程序自动部署为可在云端或本地运行的可移植的独立容器。Docker, Inc. 尽管有类似的名称,但这家公司旨在与 Microsoft 等云提供商协作,共同开发可在 Linux 和 Windows 上运行的开放源代码 Docker 技术。

虽然隔离环境这一想法很普遍,而且还存在其他类型的容器化软件,但近年来,Docker 已发展成为默认的容器格式。Docker 具有 Docker 引擎,这是一个运行时环境。该引擎让你可在任何开发计算机上构建和运行容器,然后通过容器注册表(例如 Docker Hub 或 Azure 容器注册表)存储或共享容器映像。

由于应用程序扩展到跨多个服务器部署的多个容器,因此对其进行操作变得更加复杂。虽然 Docker 为包装和分发容器化应用提供了开放标准,但可能很快会变得越来越复杂。如何协调和安排多个容器?应用程序中所有不同的容器之间如何实现相互通信?如何缩放多个容器实例?在这里,Kubernetes 便派上了用场。

Kubernetes 和容器业务流程

Kubernetes 是开放源代码业务流程软件,它提供了一个用于控制这些容器的运行方式和运行位置的 API。Kubernetes 使你可运行 Docker 容器和工作负载,并有助于你在缩放跨多个服务器部署的多个容器时,解决一些复杂操作。

通过 Kubernetes,你可根据虚拟机的可用计算资源和每个容器的资源要求,协调一组虚拟机并安排容器在这些虚拟机上运行。容器分组为 Pod,这是 Kubernetes 的基本操作单位。这些容器和 Pod 可以缩放到所需状态,并且用户可以管理其生命周期以保持应用正常启动和运行。

Kubernetes 和 Docker 有何不同?

虽然通常将 Kubernetes 与 Docker 进行比较,但将 Kubernetes 与 Docker Swarm 进行比较更为恰当。Docker Swarm 是专注于 Docker 容器群集的 Docker 业务流程技术,已整合到 Docker 生态系统,并使用自己的 API。

Kubernetes 与 Docker 之间的根本区别在于,Kubernetes 旨在跨群集运行,而 Docker 在单个节点上运行。Kubernetes 的功能比 Docker Swarm 的功能更全面,可有效地在生产中大规模协调节点的群集。Kubernetes Pod(可包含 Kubernetes 生态系统中的一个或多个容器的调度单元)分布在各节点之间,以提供高可用性。

Kubernetes 和 Docker - 结合使用效果更佳

容器让你只需编写一次代码即可在任何地方运行;而 Kubernetes 则让你可从单一控制界面协调和管理所有容器资源。这有助于跨运行容器的所有 Kubernetes 节点实现联网、负载均衡、安全性和缩放。Kubernetes 还具有命名空间等内置隔离机制,使你可以按访问权限、过渡环境等对容器资源进行分组。这些结构使 IT 部门更易于为开发人员提供自助式资源访问权限,并且即使在最复杂的微服务体系结构上,开发人员也可以在不模拟其开发环境中的整个应用程序的情况下进行协作。通过结合 DevOps 做法与容器以及 Kubernetes,可以进一步实现微服务体系结构的基线,从而支持云原生应用程序的快速交付和可缩放业务流程。

简而言之,结合使用 Kubernetes 和 Docker 可以:

  • 使你的基础结构更加可靠,并使应用程序更具高可用性。你的应用将保持联机,即使部分节点脱机也是如此。
  • 使你的应用程序更具可缩放性。如果你的应用开始逐渐产生越来越多的负载,并且需要横向扩展才能提供更好的用户体验,则只需启动更多容器或向 Kubernetes 群集添加更多节点即可。

Kubernetes 和 Docker 结合使用。Docker 为打包和分发容器化应用程序提供了一个开放标准。使用 Docker,可生成和运行容器,以及存储和共享容器映像。用户可以轻松地运行在 Kubernetes 群集上构建的 Docker,但 Kubernetes 本身并不是一个完整的解决方案。若要在生产中优化 Kubernetes,请实现其他工具和服务来管理安全性、治理、标识和访问权限以及持续集成/持续部署 (CI/CD) 工作流和其他 DevOps 做法。

生产环境中的 Kubernetes 和 Docker 解决方案体系结构

Simplify the deployment and management of Microservices based applicationsSimplify the deployment and management of Microservices based applications12345567778

概述

使用 AKS 简化水平缩放、自修复、负载均衡和机密管理。

  1. 1 使用 IDE(如 Visual Studio)将更改提交到 GitHub。
  2. 2 GitHub 在 Azure DevOps 上触发新生成
  3. 3 Azure DevOps 将微服务打包为容器,并将这些容器推送到 Azure 容器注册表
  4. 4 容器部署到 AKS 群集中
  5. 5 Azure Active Directory 用于保护对资源的访问
  6. 6 用户通过应用和网站访问服务
  7. 7 管理员通过单独的管理门户访问应用
  8. 8 微服务使用数据库来存储和检索信息
Secure DevOps for AKSDevOps and Kubernetes are better together. Implementing secure DevOps together with Kubernetes on Azure, you can achieve the balance between speed and security and deliver code faster at scale. Put guardrails around the development processes using CI/CD with dynamic policy controls and accelerate feedback loop with constant monitoring. Use Azure Pipelines to deliver fast while ensuring enforcement of critical policies with Azure Policy. Azure provides you real-time observability for your build and release pipelines, and the ability to apply compliance audit and reconfigurations easily.123456789

概述

DevOps 与 Kubernetes 相得益彰。在 Azure 上同时实现安全的 DevOps 与 Kubernetes,可达到速度与安全性之间的最佳平衡,并能够快速交付大规模的代码。利用动态策略控件为使用 CI/CD 的开发过程提供保护,并使用持续监视来缩短反馈周期。使用 Azure Pipelines 实现快速交付,同时利用 Azure Policy 确保关键策略的实施。Azure 使用户能够实时监察生成和发布管道的情况,并能应用合规性审核和重新进行配置。

  1. 1 在同一个 Kubernetes 群集中快速循环访问、测试和调试应用程序的不同部分
  2. 2 代码会合并到 GitHub 存储库中,之后由 Azure Pipelines 自动生成和测试
  3. 3 在 Azure 容器注册表注册容器映像
  4. 4 使用如 Terraform 等的工具预配 Kubernetes 群集;Terraform 安装的 Helm 图表定义了所需的应用资源和配置的状态
  5. 5 开发人员实施策略以管理 AKS 群集的部署
  6. 6 发布管道自动使用每个代码更改执行预定义的部署策略
  7. 7 使用 Azure Policy 将策略实施和审核添加到 CI/CD 管道
  8. 8 使用 Azure Monitor 获取应用遥测、容器运行状况监视和实时日志分析
  9. 9 见解用于解决问题并为给下一个冲刺 (sprint) 计划提供参考

利用 Azure 的 Kubernetes 优势

使用 Azure Kubernetes 服务 (AKS) 可以轻松地部署和管理容器化的应用程序。AKS 提供无服务器 Kubernetes(一种集成的 CI/CD 体验)以及企业级安全性和治理。将开发和运营团队统一到一个平台上,放心地快速生成、交付和缩放应用程序。

Kubernetes 和 Docker 入门