如何开启Kubernetes之旅


【译者的话】这篇文章由浅入深地介绍了如何开始Kubernetes学习,以及如何基于Kubernetes部署应用。作者给出了很多非常好的建议,指导读者掌握围绕Kubernetes的各个概念和相关技能,为学习Kubernetes指明了方向。


从Hello Minikube到Kubernetes Anywhere,再到微服务示例应用,学习谷歌容器编排工具的途径比比皆是。
每一次的创新都带来一些新的麻烦。容器使得应用的打包和运行更加便捷,但是管理大规模容器依然是一个挑战。

Kubernetes是谷歌公司内部为解决这个问题而开发的产品,它提供了一个单一的框架来管理在整个集群中运行的容器。该产品提供的服务主要集中在“编排”上,但也涵盖了许多方面:容器调度、容器之间的服务发现、跨系统的负载平衡、滚动更新/回滚、高可用性等。

在这个指南中,我们将介绍创建Kubernetes集群并发布容器应用的基本知识。这并不是要介绍Kubernetes的概念,而是通过简单示例来展示这些概念如何在运行Kubernetes的过程中结合在一起的。

选择一个Kubernetes主机

Kubernetes是为了管理Linux容器而诞生的。但是,从Kubernetes 1.5起,尽管Kubernetes控制面板必须继续在Linux上运行,但Kubernetes已经开始支持Windows Server Containers。当然,借助虚拟化,您可以在任何平台上开始使用Kubernetes。

如果您选择在自己的硬件或虚拟机上运行Kubernetes,一个常见的方法是获取绑定Kubernetes的Linux发行版。这样就不需要设置Kubernetes,不仅省去了安装和部署过程,甚至配置和管理的过程也不需要了。

CoreOS Tectonic就是这样的一个发行版,专注于容器和Kubernetes,几乎完全排除其他任何东西。RancherOS采取类似的做法,同样自动化执行大部分的设置。两者都可以安装在各种环境中:裸机,Amazon AWS VMs,Google Compute Engine,OpenStack等。

另一种方法是在常规的Linux发行版上运行Kubernetes,尽管通常会带来更多的管理开销和手动调整。例如,红帽企业Linux在其软件库中有Kubernetes,但即使是Red Hat,也建议仅用于测试和实验。建议红帽用户通过OpenShift PaaS使用Kubernetes,而不是自己动手从头搭建,OpenShift现在使用Kubernetes作为自己的容器编排系统。许多传统的Linux发行版提供了设置Kubernetes和其他大型软件堆栈的特殊工具。例如,Ubuntu提供了一种名为conjur-up的工具,可用于在云和裸机实例上部署Kubernetes的上游版本

选择一种托管Kubernetes的云

尽管在谷歌云平台(GCP)上,Kubernetes已经全面支持了,但是在很多其他云平台上,Kubernetes是否支持依然是一个焦点问题。GCP提供了运行Kubernetes的两种主要方式。最方便和集成最好的方式是通过Google容器引擎,它允许您运行Kubernetes的命令行工具来管理创建的集群。或者,您可以使用Google Compute Engine来创建计算集群并手动部署Kubernetes。这种方法对用户的技能要求比较高,但是允许用户使用Google Container Engine尚未支持的个性化定义。如果您刚开始接触容器,最好坚持使用容器引擎。经过一段时间之后,您对Container Engine有了一定的了解,就可以尝试一些更高级的内容,比如您自己选择特定版本的Kubernetes进行部署,或者部署运行Kubernetes发行版的虚拟机。

亚马逊EC2有容器的原生支持,但没有原生支持Kubernetes作为容器编排系统。在AWS运行Kubernetes类似于使用谷歌计算引擎:配置一个计算集群,然后手动部署Kubernetes。

许多Kubernetes的发行版都有如何在AWS部署的详细说明。例如,CoreOS Tectonic,有一个图形化的安装程序,同时还支持Terraform基础设施配置工具。此外,Kubernetes kops工具可以被用来配置一组AWS上的虚拟机集群(通常使用Debian Linux,但是其他的Linux版本也部分支持)。

微软Azure通过Azure Container Service来支持Kubernetes。然而,从将Kubernetes作为一个托管在Azure上的服务这个角度来说,这不是很“原生”的支持。相反,Kubernetes是由一个Azure资源管理模板部署的。Azure对于其他的容器编排系统(比如Docker Swarm和Mesosphere DC/OS)的支持也是这种思路实现的。如果您在这里提到的任何其他的云中部署Kubernetes,并且希望完全控制它,在Azure虚拟机上安装一个Kubernetes的核心版永远是简单可行的办法。

在各种环境(云端或其他方式)中快速配置一个基础Kubernetes集群的方式就是使用名为Kubernetes Anywhere的项目。此脚本适用于Google Compute Engine,Microsoft Azure和VMware vSphere(需要vCenter)。在每种情况下,它为启动过程提供了一定程度的自动化。

您自己的小部分Kubernetes节点

如果你只是在一个像开发机器这样的本地环境中运行Kubernetes,而且你不需要整个Kubernetes全部能力,那么有几种方法可以设置“刚好足够”的Kubernetes来进行使用。

其中一种方式是使用由Kubernetes开发团队本身提供的MiniKube。运行它,您会得到一个单节点Kubernetes集群部署在您选择的虚拟主机上。minikube有几个前提,如kubectl命令行接口和虚拟化环境如VirtualBox,但那些都有现成的二进制,支持MacOS,Linux和Windows。

对于MacOS上的CoreOS用户,有Kubernetes Solo。它运行在一个CoreOS虚拟机上,提供了一个状态栏应用程序实现快速管理。Solo也包括Kubernetes包管理程序Helm(通常是Helm下一级),因此基于Kubernetes的应用程序包更容易获取和设置。

玩转您的容器集群

当您的Kubernetes运行起来之后,您就可以运行和管理容器了。通过部署和管理基于很多容器的应用示例的方式,您可以轻松地熟悉容器的操作。以一个现有的基于容器的应用程序demo为例,自己组装它,看看它是如何组成的,部署它,然后逐步修改它,直到满足您的预期。如果您选择通过minikube找到立足点,您可以使用Hello Minikube教程创建Docker容器,将这个运行简单的Node.js应用的容器托管在单节点Kubernetes,以此来演示集群安装和应用部署。一旦您对这些都熟悉了,您就可以替换成自己的容器,并做一些实践性部署。

下一步是部署一个示例应用程序,这个程序类似您可能在生产环境中使用的应用。通过这个应用您可以进一步熟悉Kubernetes的一些高级概念,比如pods(一个或多个容器,包括一个应用程序),service(一组逻辑的Pod),replica sets(提供应用在机器故障时的修复机制)和deployment(应用程序的版本)。揭开WordPress/MySQL示例应用程序的神秘面纱,例如,你看到的将不仅仅是如何将应用部署到Kubernetes,并让这些应用正常运行。您也将看到Kubernets应用涉及的很多概念的实现细节,而这些应用都是满足生产环境要求的。您将学习如何设置持久卷以保存应用程序的状态,如何将Pod暴露给彼此,以及如何通过services与外部世界连在一起,以及如何将应用程序密码和API密钥存储为secrets等等。

Weaveworks有一个示例应用程序,袜子商店,展示了微服务模式如何用来组合Kubernetes中的应用。袜子商店对于熟悉底层技术(比如Node.js,Go kit和Spring Boot)的人来说是最有利的,但主旨超越了特定的框架,而是说明云原生技术。

如果您看了一眼WordPress/MySQL的应用,并想创建一个运行在Kubernetes上的应用来满足您的需求,这种想法基本上是对的。Kubernetes有一个应用程序定义的系统称为Helm,它提供了一种打包、版本管理和共享Kubernetes应用的机制。一些主流的应用程序(GitLab,WordPress)和构建应用程序的模块(MySQL、NGINX)将Helm作为一站式直通kubeapps门户的最佳实践。

深入探索Kubernetes

Kubernetes通过强大的抽象能力简化了容器的管理,比如Pod和Service,同事通过label和namespace机制提供了很大的灵活性,label和namespace都可以用来隔离pod,services和deployments(比如开发环境、过渡环境和生产环境负载)。

如果您选择上面的示例的一个,并在多个命名空间中创建不同的实例,那么可以对独立于其他命名空间的组件进行更改。您可以使用deployments,以允许这些更新在给定的命名空间中的多个pod之间滚动进行

比这种练习更进一步的是学习Kubernetes本身如何能够被管理基础设施的工具所驱动。以Puppet为例,有一个用于创建和操纵Kubernetes资源的模块,但是HashiCorp’s Terraform很早就有支持,但是支持方式演变成将Kubernetes作为一种资源进行管理。如果您打算使用这样的资源管理器,请注意不同的工具可能会给表带来不同的预期结果。以Puppet and Terraform为例,默认分别使用可变的和不可变的基础设施。这些哲学层次和行为的差异,如何或轻松,或困难地创建您所需要的Kubernetes。

这个故事,“如何开启Kubernetes之旅”最初发表在InfoWorld

原文链接:How to get started with Kubernetes (翻译:付辉)

0 个评论

要回复文章请先登录注册