每一项创新都会带来新的复杂性。 容器使以方便,可移植的形式打包和运行应用程序成为可能,但是至少可以说,大规模管理容器是一项挑战。
Google解决内部问题的成果是Kubernetes,它提供了一个单一框架来管理容器如何在整个集群中运行。 它所提供的服务通常被统称为“编排”,但涵盖了很多领域:调度容器,容器之间的服务发现,跨系统的负载平衡,滚动更新/回滚,高可用性等等。
在本指南中,我们将逐步介绍设置Kubernetes并使用基于容器的应用程序填充它的基础知识。 这并不是要介绍Kubernetes的概念,而是要通过运行Kubernetes的简单示例来展示这些概念是如何组合在一起的。
相关视频:什么是Kubernetes?
在这段90秒的视频中,您可以从技术的发明者之一Heptio的创始人兼首席技术官Joe Beda了解Kubernetes,这是一种用于自动化容器化应用程序的开源系统。
使用Kubernetes发行版
Kubernetes诞生于管理Linux容器。 但是,从Kubernetes 1.5开始,Kubernetes还支持Windows Server容器,尽管Kubernetes控制平面必须继续在Linux上运行。 当然,借助虚拟化,您可以在任何平台上开始使用Kubernetes。
如果您选择在自己的硬件或VM上运行Kubernetes,则一种常见的实现方法是获取打包的Kubernetes发行版 ,该发行版通常将上游Kubernetes比特与其他内容结合在一起-容器注册表,网络,存储,安全性,日志记录,监视,持续集成管道等-完整部署所需。 另外,Kubernetes发行版通常可以在任何虚拟机基础架构中安装和运行:Amazon EC2,Azure虚拟机,Google Compute Engine,OpenStack等。
Canonical Kubernetes,Cloud Foundry容器运行时,Mesosphere Kubernetes服务,Oracle Linux容器服务,Pivotal容器服务,Rancher,Red Hat OpenShift和Suse CaaS平台只是数十种可用的Kubernetes发行版中的少数。 请注意,Canonical,Red Hat和Suse产品将Kubernetes与Linux发行版捆绑在一起,这消除了在给定操作系统上设置Kubernetes的需要—不仅包括下载和安装过程,甚至包括一些配置过程。和管理过程。
另一种方法是在常规Linux发行版上运行Kubernetes,尽管通常会带来更多的管理开销和手动调整。 例如,红帽企业Linux的软件包存储库中有Kubernetes,但即使红帽也建议仅将其用于测试和试验。 建议Red Hat堆栈用户不要通过手工将某些东西拼凑在一起,而是建议通过OpenShift PaaS使用Kubernetes,因为OpenShift现在使用Kubernetes作为其自己的本机协调器。
许多传统的Linux发行版提供了用于设置Kubernetes和其他大型软件堆栈的特殊工具。 例如,Ubuntu提供了一个名为conjure-up的工具 ,可用于在云实例和裸机实例上部署Kubernetes的上游版本 。 Canonical还提供了MicroK8 ,它是通过Snap软件包系统安装的Kubernetes版本。
在云中使用Kubernetes服务
尽管Kubernetes在Google Cloud Platform(GCP)中作为本机功能最为突出,但它在许多云中都可以作为标准发行项目使用。 GCP提供了两种运行Kubernetes的主要方法。 最方便且紧密集成的方法是使用Google Kubernetes Engine ,它使您可以运行Kubernetes的命令行工具来管理创建的集群。
或者,您可以使用Google Compute Engine设置计算集群并手动部署Kubernetes。 此方法需要更多的工作,但需要使用Container Engine无法进行的自定义。 如果您刚开始使用容器,请坚持使用Container Engine。 稍后,当您开始尝试并尝试更高级的功能(例如自定义版本的Kubernetes或您自己的修改)后,您可以部署运行Kubernetes发行版的VM。
使用Amazon,最初必须通过在EC2中部署计算集群来运行Kubernetes。 这仍然是一种选择,但是Amazon现在提供了Kubernetes (EKS)的弹性容器服务 。 借助EKS,Amazon可以运行控制平面,您可以集中精力部署将用于所需配置的容器。 EKS还运行Kubernetes的标准上游版本。 一种智能功能是Kubernetes与其余AWS产品组合的集成。 AWS服务在EKS中显示为Kubernetes本地自定义资源定义,因此对AWS或Kubernetes的任何更改都不会中断此类连接。
许多Kubernetes发行版都附带有在AWS和其他地方进行设置的详细说明。 例如,可以通过交互式安装程序或脚本将Red Hat OpenShift安装在一个或多个主机上 ,或者使用Terraform的 “基础结构即代码”置备工具。 另外,Kubernetes的Kops工具可用于在AWS 上配置通用VM集群 ,并支持Google Cloud Engine,VMware vSphere和其他正在开发的云。
Microsoft Azure通过Azure Kubernetes服务支持Kubernetes 。 在通过资源管理器模板或Terraform创建群集时,Azure在这里管理Kubernetes主节点。 如果要同时控制主节点和代理节点,则始终可以在Azure虚拟机上安装Kubernetes分发。 就是说,AKS的一个主要优点是您不必为使用主节点付费,而仅为代理付费。
在各种环境(云或其他环境)中配置基本Kubernetes集群的一种快速方法是使用一个名为Kubernetes Anywhere的项目。 该脚本可在Google Compute Engine,Microsoft Azure,VMware vSphere(需要vCenter)和OpenStack上使用。 在每种情况下,Kubernetes Anywhere都会为安装提供一定程度的自动化。
使用Minikube在本地运行Kubernetes
如果您仅在开发机器等本地环境中运行Kubernetes,并且不需要整个Kubernetes enchilada,则有几种方法可以为这种用途设置“足够”的Kubernetes。
Kubernetes开发团队本身提供的一种就是Minikube 。 运行它,您将在您选择的虚拟化主机中部署一个单节点Kubernetes集群。 Minikube有一些先决条件 ,但是它们都很容易满足在MacOS,Linux或Windows上的需要。
运行Kubernetes演示应用
在运行Kubernetes之后,就可以开始部署和管理容器了。 您可以利用许多可用的基于容器的应用程序演示之一来简化容器操作。
以现有的基于容器的应用程序演示为例,自己组装以查看其组成,部署并逐步进行修改,直到它对您有用为止。 如果选择Minikube寻找立足之地,则可以使用Hello Minikube教程来创建一个Docker容器,该容器在单节点Kubernetes演示安装中包含一个简单的Node.js应用程序。 一旦您有了主意,就可以交换自己的容器并尝试部署它们。
下一步是部署一个示例应用程序 ,该应用程序类似于您可能在生产中使用的应用程序 ,并熟悉更高级的Kubernetes概念,例如pod(组成应用程序的一个或多个容器),服务(pod的逻辑集),副本集(以提供有关计算机故障的自我修复功能)和部署(应用程序版本控制)。
例如,解除WordPress / MySQL示例应用程序的限制 ,您不仅会看到有关如何将这些片段部署到Kubernetes并使它们运行的说明。 您还将看到生产级Kubernetes应用程序使用的许多概念的实现细节。 您将学习如何建立持久卷保存应用程序的状态,如何通过的方式来揭露荚彼此和外界的服务 ,如何存储应用程序密码和API密钥的秘密 ,等等。
Weaveworks有一个示例应用程序Sock Shop ,展示了如何在Kubernetes中使用微服务模式来组成应用程序。 对于熟悉底层技术(Node.js,Go工具包和Spring Boot)的人们来说,Sock Shop将是最有用的,但是核心原则旨在超越特定框架并说明云原生技术。
如果您浏览了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设置的难易程度。
From: https://www.infoworld.com/article/3207686/how-to-get-started-with-kubernetes.html