如何开启Kubernetes之旅

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

从Hello Minikube到Kubernetes Anywhere,再到微服务示例应用,学习谷歌容器编排工具的途径比比皆是。mysql

每一次的创新都带来一些新的麻烦。容器使得应用的打包和运行更加便捷,可是管理大规模容器依然是一个挑战。git

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

在这个指南中,咱们将介绍建立Kubernetes集群并发布容器应用的基本知识。这并非要介绍Kubernetes的概念,而是经过简单示例来展现这些概念如何在运行Kubernetes的过程当中结合在一块儿的。sql

选择一个Kubernetes主机

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

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

CoreOS Tectonic就是这样的一个发行版,专一于容器和Kubernetes,几乎彻底排除其余任何东西。RancherOS采起相似的作法,一样自动化执行大部分的设置。二者均可以安装在各类环境中:裸机,Amazon AWS VMs,Google Compute Engine,OpenStack等。app

另外一种方法是在常规的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发行版的虚拟机。less

亚马逊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 (翻译:付辉)

相关文章
相关标签/搜索