资讯专栏INFORMATION COLUMN

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

fyber / 3341人阅读

摘要:是谷歌内部为解决这个问题所做的工作的产物,它为管理容器如何在整个集群中运行提供了一个单一的框架。在云中使用服务在许多云中作为标准问题项提供,尽管它在谷歌云平台,中最突出地表现为本地特性。使用,运行控制平面,将重点部署将用于所需配置的容器。

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

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资深作家)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/5854.html

相关文章

  • Virtlet 介绍—— 或许是 NFV 新方向?

    摘要:该公司刚刚宣布了一个计划,意在取代现有的发行版。这甚至可能帮找到一个新方向。为了解决这个问题,我们在上增加了一个名为的新功能。总体而言,整个过程呈现如下建立包括,以及一个的基础架构。 这是 TCP CLOUD 联合创始人 & 前 CTO Jakub Pavlik 于 2017 年 7 月 9 日发布于 www.mirantis.com 的文章。本文主要介绍了 Virtlet 及其未来与...

    XUI 评论0 收藏0
  • Kubernetes中的Volume概念

    摘要:背景中有的概念,其中对它的管理有点松散。镜像是文件系统层次的根,任何被挂载到镜像中的特定目录上。中的每个容器必须独立指定每个的位置。当一个由于某种原因从节点上移除,中的数据也会被永久删除。 容器中的磁盘文件是易失的,这给运行在容器中的大型应用带来了一些麻烦。首先,当一个容器崩溃,kubelet会重启它,但是之前存储的文件会丢失 - 容器以一个初始的状态重建。第二,当在一个Pod中运行多...

    libxd 评论0 收藏0
  • kubernetes的调度机制

    摘要:的调度机制组件调度器会将调度到资源满足要求并且评分最高的上。这个特性的设计初衷是为了替代,并扩展更强大的调度策略。和完全相同,以进行强制的约束。软规则除了,,还有一条软规则配置后,没有相关污点策略的会尽量避免调度到该上。 k8s的调度机制 scheduler组件 k8s调度器会将pod调度到资源满足要求并且评分最高的node上。我们可以使用多种规则比如:1.设置cpu、内存的使用要求;...

    selfimpr 评论0 收藏0
  • UCloud 基于Kubernetes Operator的服务化实践

    摘要:宋体是面向内部基于打造的容器服务平台,旨在提升内部研发效率,帮助改善规范研发流程。宋体作为容器编排框架,可以减轻配置部署管理和监控大规模容器应用的负担。宋体核心原理宋体解释不得不提中两个最具价值的理念声明式和控制器模式。KUN(Keep UCloud Nimble)是面向 UCloud 内部、基于 Kubernetes 打造的容器服务平台,旨在提升内部研发效率,帮助改善、规范研发流程。在 K...

    zorpan 评论0 收藏0
  • 用Docker和Kubernetes将MongoDB作为微服务来运行

    摘要:注意事项用容器和编排工具运行介绍了一些额外注意事项数据库是有状态的。尤其,在副本集合中,一个节点必须被用来执行和命令。名字叫做的被配置用来确保的单个实例是一直在运行的。 想要在你的手提电脑上尝试MongoDB吗?执行一个命令,然后拥有一个轻量级,独立的沙箱;再执行一个命令,删除你完成之后所有的痕迹。是不是需要一个在多个环境中都跟你的应用程序堆栈一样的应用程序?创建一你自己的容器镜像,然...

    Neilyo 评论0 收藏0

发表评论

0条评论

fyber

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<