摘要:从Hello Minikube到Kubernetes,再到示例微服务应用程序,本文围绕如何学习谷歌的容器编排工具。
每一次创新都带来新的问题。容器使其能够在方便的、可移植的方式中打包和运行应用程序,但是规模化的管理容器的仍然是很困难的。
Kubernetes,在谷歌内部完成的工作,为解决这个问题提供了一个框架,用于管理容器如何在整个集群中运行。它提供的服务通常在“编配”一词下组合在一起,但它涵盖了很多领域:调度容器、容器间的服务发现、跨系统的负载平衡、滚动更新/回滚、高可用性等等。
在本指南中,我们将介绍设置Kubernetes并将其与基于容器的应用程序填充的基础知识。这不是对Kubernetes的概念的介绍,而是一种展示这些概念如何在运行Kubernetes的简单示例中结合在一起的方式。
选择一个Kubernetes主机
Kubernetes生来就是管理Linux容器的。然而,Kubernetes也支持Windows Server容器,尽管Kubernetes控制平面必须继续在Linux上运行。当然,借助虚拟化,你可以在任何平台上开始使用Kubernetes。
如果您选择在自己的硬件或vm上运行Kubernetes,那么一种常见的方法就是获得一个捆绑Kubernetes的Linux发行版。这消除了在给定的分布式环境中设置Kubernetes的需要――不仅是下载和安装的过程,甚至是一些配置和管理的过程。
CoreOS构造,命名一个这样的发行版,关注容器和Kubernetes几乎完全排除其他任何东西。RancherOS采用了类似的方法,同样也将大部分设置自动化。它们都可以安装在各种环境中:裸金属、Amazon AWS VMs、谷歌计算引擎、OpenStack等等。
另一种方法是在传统的Linux发行版上运行Kubernetes,尽管这通常会带来更多的管理开销和手工操作。例如,Red Hat Enterprise Linux在它的包存储库中有Kubernetes,但即使是Red Hat也推荐它只用于测试和实验。Red Hat stack用户并不是试图用手将一些东西拼在一起,而是通过OpenShift PaaS来使用Kubernetes,因为OpenShift现在使用Kubernetes作为自己的本地编配器。
许多传统的Linux发行版提供了设置Kubernetes和其他大型软件栈的特殊工具。例如,Ubuntu提供了一个名为“ conjure-up”的工具,可以用来在云和裸金属实例中部署“Kubernetes”的上游版本。
选择一个Kubernetes云
Kubernetes是许多云中的标准项目,尽管它作为谷歌云平台(GCP)的一个本地特性最为突出。GCP提供了两种运行Kubernetes的主要方法。最方便和最紧密的集成方式是谷歌容器引擎,它允许您运行Kubernetes的命令行工具来管理创建的集群。
或者,你可以使用谷歌计算引擎建立一个计算集群,并手动部署Kubernetes。这种方法需要更重的提升,但是允许使用容器引擎不可能实现的定制。如果你刚开始使用容器,就坚持使用容器引擎。稍后,当你获得你的基本能力并想尝试一些更高级的东西,比如自定义版本的Kubernetesor自己的修改时,可以部署运行Kubernetes发行版的VMs。
Amazon EC2支持容器,但是不支持Kubernetes作为容器编排系统的本地支持。在AWS上运行Kubernetes类似于使用谷歌计算引擎:您配置一个计算集群,然后手动部署Kubernetes。
许多Kubernetes的发行版都有详细的关于AWS创建的指令。例如,CoreOS构造包括一个图形安装程序,但也支持Terraform基础设施配置工具。或者,Kubernetes kops工具可以用于在AWS上提供一组通用的虚拟机(通常使用Debian Linux,但其他的Linux版本也有部分支持)。
微软Azure通过Azure容器服务支持Kubernetes。然而,它并不是“原生”的支持,因为Kubernetes是Azure的托管服务。相反,Kubernetes是通过Azure资源管理器模板来部署的。Azure对其他容器编制框架的支持,如Docker蜂群和Mesosphere DC/ OS,都以同样的方式工作。如果您想要完全控制,就像这里描述的其他云一样,您总是可以在Azure虚拟机上安装一个以kubernet为中心的发行版。
在各种环境、云或其他环境中提供如果你只在本地的环境中运行Kubernetes,就像开发机器一样,而且你不需要整个Kubernetes enchilada,那么有一些方法可以设置“足够的”Kubernetes这样的使用。
Kubernetes开发团队提供的是Minikube。运行它,将得到一个在你选择的虚拟化主机中部署的单节点Kubernetes集群。Minikube有一些先决条件,比如kubectl命令行界面和虚拟化环境,比如VirtualBox,但这些都是MacOS、Linux和Windows的二进制文件。
对于MacOS上的CoreOS用户,有Kubernetes Solo,它运行在CoreOS VM上,并提供一个状态栏应用程序来快速管理。Solo还包括Kubernetes包管理器(更多地在下面掌舵),所以为Kubernetes打包的应用程序很容易获得和设置。
配置您的容器集群
一旦Kubernetes开始运行,就可以开始部署和管理容器了。可以通过使用一个基于容器的应用程序演示来轻松进入容器项目。
拿一个现有的基于容器的应用程序演示,自己组装,看看它是如何组合的,部署它,然后逐步修改它,直到它接近对你有用的东西。如果您选择以Minikube的方式找到您的立足点,可以使用Hello Minikube教程创建一个包含简单节点的Docker容器。js应用于单节点Kubernetes演示安装。一旦你了解了这个想法,就可以在自己的容器中交换,并实践部署这些容器。
下一步是部署一个示例应用程序,就像一个你可能在生产、使用和熟悉更高级的Kubernetes概念如豆荚(一个或多个容器组成应用程序),服务(逻辑组豆荚),副本集(提供自我修复机故障),和部署(应用程序版本)。例如,打开WordPress / MySQL示例应用程序的引擎盖,您将看到更多关于如何将这些部件部署到Kubernetes并让它们运行的指示。您还将看到生产级Kubernetes应用程序使用的许多概念的实现细节。您将了解如何设置持久卷来保存应用程序的状态,如何通过服务将豆荚公开到外部世界,如何将应用程序密码和API密钥存储为机密,等等。
Weaveworks有一个例子应用程序,袜子商店,它展示了一个微服务模式如何被用来在Kubernetes中编写一个应用程序。对于熟悉底层技术的人来说,袜子商店是最有用的。js、Go kit和Spring boot――但核心原则是要超越特定的框架,并阐明云本地技术。
如果你浏览了WordPress / MySQL应用程序,并设想可能有一个预先出炉的Kubernetes应用程序满足你的需求,你可能是对的。Kubernetes有一个名为Helm的应用程序定义系统,它提供了一种方法来打包、版本和共享Kubernetes应用程序。一些流行的应用程序(GitLab,WordPress)和应用程序构建块(MySQL,Nginx)可以通过Kubeapps门户网站的方式随时提供“图表”。
K8S导航
Kubernetes通过强大的抽象(如pod和services)简化了容器管理,同时通过标签和名称空间等机制提供了大量的灵活性,这些机制可以用于隔离pod、服务和部署(比如开发、登台和生产工作负载)。
如果使用上面的示例并在多个名称空间中设置不同的实例,那么您可以练习在每个名称空间中独立于其他名称空间进行组件更改。然后,可以使用部署允许这些更新在给定名称空间的pod中以增量方式展开。
除了这些练习,下一个重要的步骤是学习Kubernetes如何通过管理基础设施的工具来驱动。例如,Puppet有一个用于在Kubernetes中创建和操作资源的模块,而HashiCorp的Terraform在很早的时候就已经支持Kubernetes作为资源了。如果您打算使用这样的资源管理器,请注意,不同的工具可能会给表带来截然不同的假设。例如,Puppet和Terraform分别使用可变和不可变的基础结构。这些哲学和行为上的差异决定了创建你所需要的Kubernetes设置是多么容易,多么困难。
原文链接:infoworld
加入云技术社区K8S交流QQ群,请加我QQ502207183.