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


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

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

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

选取一个 Kubernetes 主机

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

若是你选择在本身的硬件或 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 系列文章!

相关文章
相关标签/搜索