订阅
纠错
加入自媒体

使用Kubernetes你需要知道的硬道理

2019-01-04 09:21
启迪云计算
关注

每一项创新都会带来新的复杂性。容器使以一种方便的、可移植的形式打包和运行应用程序成为可能,但至少要说以规模管理容器是一个挑战。

Kubernetes是谷歌内部为解决这个问题所做的工作的产物,它为管理容器如何在整个集群中运行提供了一个单一的框架。它提供的服务通常集中在catch all术语“协调”下,但这涵盖了很多领域:调度容器、容器之间的服务发现、跨系统的负载平衡、滚动更新、回滚、高可用性等等。

使用Kubernetes发行版

Kubernetes诞生于管理Linux容器。但是,对于Kubernetes 1.5,Kubernetes也支持Windows服务器容器,尽管Kubernetes控制平面必须继续在Linux上运行。当然,借助虚拟化,可以在任何平台上开始使用Kubernetes。

如果选择在自己的硬件或虚拟机上运行Kubernetes,一种常见的方法是获得打包的Kubernetes分发,它通常将上游Kubernetes位与其他部分(容器注册表、网络、存储、安全性、日志记录、监控、连续集成管道等)结合在一起以完成TE部署。此外,Kubernetes发行版通常可以安装并运行在任何虚拟机基础设施中:AmazonEC2、Azure虚拟机、Google计算引擎、OpenStack等。

另一种方法是在传统的Linux发行版上运行Kubernetes,尽管这通常会带来更多的管理开销和手工操作。例如,Red Hat Enterprise Linux在其软件包存储库中有Kubernetes,但甚至Red Hat也建议仅用于测试和实验。Red Hat Stack建议用户通过OpenShift PaaS使用Kubernetes,而不是手工拼凑一些东西,因为OpenShift现在使用Kubernetes作为自己的本地编排器。

许多传统的Linux发行版为建立Kubernetes和其他大型软件栈提供了特殊的工具。例如,Ubuntu提供了一个名为conjure-up的工具,可以用来在云和裸机实例上部署Kubernetes的上游版本。Canonical还提供了Microk8s,一个通过快照包系统安装的Kubernetes版本。

在云中使用Kubernetes服务

Kubernetes在许多云中作为标准问题项提供,尽管它在谷歌云平台(Google Cloud Platform,GCP)中最突出地表现为本地特性。GCP提供两种运行Kubernetes的主要方法。最方便和紧密集成的方法是通过google Kubernetes引擎,它允许运行Kubernetes的命令行工具来管理创建的集群。

或者,可以使用Google计算引擎设置计算集群并手动部署Kubernetes。此方法需要更重的提升,但允许对容器引擎进行不可能的自定义。如果刚开始使用容器,请使用容器引擎。稍后,在想尝试一些更高级的东西之后,比如定制版的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上提供一个通用虚拟机集群,并支持Google Cloud Engine,VMware vSphere和其他正在开发的云。

Microsoft Azure通过Azure Kubernetes服务支持Kubernetes。在这里由Azure管理Kubernetes主节点,而通过资源管理器模板或TerraForm创建集群。如果希望同时控制主节点和代理节点,则可以始终在Azure虚拟机上安装Kubernetes分发版。这就是说,AKS的一个关键优势是,不需要为主节点的使用付费,只需为代理付费。

在各种环境(云环境或其他环境)中提供基本Kubernetes集群的一种快速方法是在任何地方使用一个名为Kubernetes的项目。此脚本适用于Google计算引擎、Microsoft Azure、VMware vSphere(需要vCenter)和OpenStack。在每种情况下,Kubernetes Anywhere都为设置提供一定程度的自动化。

使用MiniKube在本地运行Kubernetesetes

如果只在本地环境(如开发机器)中运行Kubernetes,而不需要整个Kubernetes enchilada,那么有几种方法可以设置“刚好足够”的Kubernetes以供使用。

一个由Kubernetes开发团队本身提供的是MiniKube。运行它,将在选择的虚拟化主机中部署单节点Kubernetes集群。MiniKube有一些先决条件,但它们都很容易在MacOS、Linux或Windows上实现。

运行Kubernetes演示应用程序

一旦运行了Kubernetes,就可以开始部署和管理容器了。可以通过使用许多基于容器的应用程序演示中的一个来轻松进入容器操作。以一个现有的基于容器的应用程序演示为例,自己组装它,看看它是如何组成的,部署它,然后逐步修改它,直到它接近对您有用的东西。如果选择了MiniKube来找到自己的立足点,可以使用hello MiniKube教程在单节点Kubernetes演示安装中创建一个包含简单node.js应用程序的Docker容器。

一旦你有了这个想法,你就可以在自己的容器中进行交换,并练习部署这些容器。下一步是部署一个类似于在生产中使用的示例应用程序,并熟悉更高级的Kubernetes概念,例如pods(一个或多个包含应用程序的容器)、服务(pods的逻辑集)、副本集(在机器故障时提供自愈)和部署(appli阳离子版本控制)。

举个例子,打开wordpress/mysql示例应用程序的引擎,将看到更多关于如何将这些组件部署到Kubernetes中并运行它们的说明。还将看到生产级Kubernetes应用程序使用的许多概念的实现细节。将学习如何设置持久性卷以保留应用程序的状态,如何通过服务向彼此和外部世界公开pods,如何将应用程序密码和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通过强大的抽象(如pods和服务)简化了容器管理,同时通过标签和名称空间等机制提供了很大的灵活性,这些机制可用于分离pods、服务和部署(如开发、分段和生产工作负载)。

如果采用上述其中一个示例并在多个命名空间中设置不同的实例,那么可以练习对每个命名空间中的组件进行独立于其他名称空间的更改。然后,可以使用部署来允许这些更新在给定名称空间的pods中逐步展开。

下一步是学习如何通过管理基础设施的工具来驱动Kubernetes。例如,Puppet有一个模块,用于创建和操作Kubernetes中的资源。同样,HashiCorp的地形对Kubernetes作为一种资源的支持也越来越大。如果您计划使用这样的资源管理器,请注意,不同的工具可能会给表带来非常不同的假设。例如,puppet和terraform默认分别使用可变和不可变的基础设施。这些哲学和行为上的差异可以决定它有多容易或有多困难。

本文翻译自Serdar Yegulalp(InfoWorld资深作家)

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号