译见 | 掌舵 Kubernetes(一):如何起步?

2017-08-10 小夫

​有光的地方就有阴影,每一次创新的到来往往也伴随着不少的麻烦。容器技术的到来,让我们能以更为便捷的手段封装和运行应用程序,但按规模化管理容器还充满挑战。

Kubernetes 是 Google 公司内部为了解决这一问题诞生的产物,它提供了一个框架来管理容器在整个集群中的运行方式。它提供的这种服务通常都集中在“编排”中,但也涵盖了很多领域:容器调度、容器之间的服务发现,跨系统之间的负载平衡、滚动更新/回滚、高可用性等。

今天的文章, 将向你介绍设置 Kubernetes 的基础知识,并使用基于容器的应用程序进行相关补充。不只是纸上谈兵单纯抛出 Kubernetes 的概念, 而是展示这些概念如何在运行 Kubernetes 的简单示例中进行结合的。

选取一个 Kubernetes 主机

Kubernetes 是为管理 Linux 容器而诞生。但是, 从 Kubernetes 1.5 版本之后, Kubernetes 也开始支持 Windows 服务器容器, 尽管 Kubernetes 控制面必须继续在 Linux 上运行。不过当然, 借助虚拟化, 你可以在任何平台上开始使用 Kubernetes。

如果你选择在自己的硬件或 VM 上运行 Kubernetes, 通常是使用一个附带 Kubernetes 的 Linux 发行版。这就不需要在给定的分布上设置 Kubernetes - 不仅是下载和安装过程, 还包括某些配置和管理过程。

CoreOS 的发行版之一 Tectonic,几乎排除了其他所有东西而专注于容器和 Kubernetes。RancherOS 同样采用了类似的方法, 同样自动执行大部分配置。两者都可以安装在各种环境中: 裸机、亚马逊 AWS VM、Google 计算引擎、OpenStack 等。

另一种途径是在传统的 Linux 发行版上运行 Kubernetes,尽管这往往会增加管理成本和需要进行相应的人工调试。例如。Red Hat 企业版 Linux 便在其软件包存储库中附带 Kubernetes ,但即使是 Red Hat 也建议只将其用于测试和实验。不要尝试手动地进行拼凑,Red Hat 栈用户被建议通过 OpenShift PaaS 使用 Kubernetes,而 OpenShift 如今使用 Kubernetes 作为自己的原生编排器。

许多传统的 Linux 发行版为配置 Kubernetes 和其他大型软件栈提供了特殊的工具。例如,Ubuntu 提供了一个名为 conjure-up 的工具,它可以被用来在云和裸机上部署 Kubernetes 的新兴版本。

选取一个 Kubernetes 云

Kubernetes 在许多云中都是一个标准的发行项目,尽管它可能在 Google Cloud Platform(GCP)上的表现最为突出。GCP 提供了两种主要的方式来运行 Kubernetes.最方便和紧密集成的方式是通过 Google Container Engine,它能让你运行 Kubernetes 的命令行工具来管理已经创建的集群。

或者,你也可以使用 Google Compute Engine 来设置一个计算集群并手动部署 Kubernetes。但这种方法仍需要进一步的优化,但它能实现 Container Engine 无法实现的的自定义。如果你刚刚开始使用容器技术,请先使用 Container Engine。循序渐进地,当你已经初步深入并希望尝试一些新东西的时候,比如一个自定义版本的可以让你自己修改的 Kubernetes,这个时候你可以部署运行 Kubernetes 发行版的虚拟机。

Amazon EC2 能对容器进行本地支持,但不能对 Kubernetes 作为一个容器编排系统的本地支持。在 AWS 上 运行 Kubernetes 就类似于使用 Google Compute Engine:你可以配置一个计算集群,然后手动部署 Kubernetes。

许多 Kubernetes 的发行版都有详细的指令来设置 AWS。例如,CoreOS 的发行版之一 Tectonic,它就包括一个图形化的安装程序, 也支持 Terraform 基础架构的配置工具。另外, Kubernetes kops 工具可以用于在 AWS 上提供一组通用的虚拟机(通常使用 Debian linux, 也部分支持其他类型的 Linux)。

Microsoft Azure 通过 Azure Container Service 支持 Kubernetes 。然而,它并不是“本地”支持,因为 Kubernetes 只是在 Azure 上的托管服务。相反,Kubernetes通过Azure资源管理器模板进行部署。Azure 也有对其他容器编排框架的支持,如 Docker Swarm 和 Mesosphere DC / OS,他们的工作方式相同。如果你想要实现完全控制,就像这里描述的其他云一样,你可以随时在 Azure 虚拟机上安装以 Kubernetes 为中心的发行版。

实现在各种环境(云端或其他方式)中提供基本的 Kubernetes 集群的一种快速方法是使用名为Kubernetes Anywhere 的项目。此脚本适用于 Google Compute Engine,Microsoft Azure 和VMware vSphere(需要 vCenter)。针对不同的情况,它都为设置提供了一定程度的自动化。

你专属的 Kubernetes 小型节点

如果你只是在本地环境 (如开发机器) 中运行 Kubernetes , 有几种方法可以设置 "刚好足够" 的 Kubernetes 来满足你的需求。

Kubernetes 开发团队本身提供的一个 Minikube。运行它, 你会得到一个部署在你选择的虚拟主机上的单节点 Kubernetes 集群。Minikube 有几个先决条件, 如 kubectl 命令行接口和虚拟化环境,如VirtualBox, 但这些都可以作由为 MacOS、Linux 和 Windows 的二进制文件提供。

对于 MacOS 上的 CoreOS 用户, 有 Kubernetes Solo, 它在 CoreOS VM 上运行, 并提供了一个快速管理的状态栏应用程序。Solo 还包括 Kubernetes 软件包管理 Helm, 以便由 Kubernetes 封装的应用程序更容易被获得和设置。

操作你的容器集群

一旦 Kubernetes 开始运行, 就可以开始部署和管理容器了。你可以通过利用众多的基于容器的应用程序 demo 中的一个来轻松地进行容器操作。

采取现有的基于容器的应用程序 demo,自己进行配装,看看它是如何组成的,部署它,然后逐步进行修改,直到它能为你所用。如果你选择通过 Minikube 为你的出发点,你可以使用 Hello Minikube 教程在单节点Kubernetes demo 安装中创建一个 Docker 容器,该容器将一个简单的 Node.js 应用程序保存在单节点 Kubernetes demo 安装中。一旦你有了任何想法,都可以在自己的容器中进行交换,也可以实践部署。

下一步是部署一个类似于你在生产中使用的示例应用程序, 并熟悉更为前驱的 Kubernetes 概念, 例如荚 (一个或多个容器, 包括一个应用程序), 服务 (逻辑集的豆荚), 副本集 (提供自我修复的机器故障), 和部署 (应用程序版本控制)。举个例子, 使用像 WordPress / MySQL 这样的示例应用程序,你将会看到更多的关于如何将这些片断部署到 Kubernetes 中并让它们运行的指令。你还将看到生产级的 Kubernetes 应用程序所使用的许多概念的实现细节。你将学习如何设置持久卷以保留应用程序的状态, 如何通过服务向对方和外部公开 pod, 如何将应用程序密码和 API 密钥存储为机密文件等。

Weaveworks 便有一个典型的应用程序,Sock Shop,它显示微服务模式是如何用来在 Kubernetes 上组成一个应用程序的。Sock Shop 对于熟悉基础技术的人员来说将是最有用的 - Node.js,Go kit 和Spring Boot,但核心原则是超越特定的框架并说明云原生技术。

如果你了解 WordPress / MySQL 应用程序,并想像可能会有一个预先的 Kubernetes 应用程序来满足你的需求,你可能是对的。Kubernetes 有一个名为 Helm 的应用程序能定义系统,它提供了一种封装,版本和共享 Kubernetes 应用程序的方法。许多流行的应用程序(GitLab,WordPress)和应用程序构建模块(MySQL,Nginx)都可以通过 Kubeapps 门户的方式随时使用的 Helm“图表” 。

Kubernetes 导航

Kubernetes 通过诸如 pod 和服务等强大的抽象概念简化了容器管理, 同时通过诸如标签和命名空间等机制提供了大量的灵活性, 可以用来分隔 pod、服务和部署 (如开发、转移和生产工作负载)。

如果你采取上述示例之一, 并在多个命名空间中设置不同的实例, 则可以练习对每个命名空间中的组件进行更改, 而不依赖于其他。然后, 你可以使用部署使这些更新在给定的命名空间中以增量方式跨多个 pod 进行滚动。

除了这些练习之外, 接下来的一大步是学习如何通过管理基础架构的工具来驱动 Kubernetes 本身。例如, Puppet 中有一个模块, 用于创建和操作 Kubernetes 中的资源, 而 HashiCorp 的 Terraform 对 Kubernetes 作为资源的支持也很早就有但也越来越多。如果你计划使用这样的资源管理器, 请注意, 不同的工具可能会给表带来截然不同的改变。例如, Puppet 和 Terraform 就默认使用可变和不可变的基础架构。这些想法和行动上的差异可以决定如何更容易, 或更困难地, 创建你需要的 Kubernetes 设置。

查看 Kubernetes 系列文章!


用户评论
开源开发学习小组列表