您当前的位置: 首页 >  kubernetes

凌云时刻

暂无认证

  • 0浏览

    0关注

    1437博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Kubernetes迁移指北 | 凌云时刻

凌云时刻 发布时间:2020-05-02 15:47:21 ,浏览量:0

凌云时刻 · 技术

导读:迁到Kubernetes的理由有很多,也很有说服力。这篇文章并没有说明你应该迁移,而是假设你已经决定要迁移。当你清楚自己想做什么以及为什么要做的时候,“什么时候做”和“如何做”就成为了重点。本篇文章关注的是从你决定开始迁移到Kubernetes之后,你会需要面对的一系列选择。

作者 | Todd Campbell

来源 | 凌云时刻(微信号:linuxpk)

为什么要使用Kubernetes?

Kubernetes是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化的应用程序。

你使用Kubernetes的方法取决于你对它提供的内容的了解,这也取决于你为什么想要使用它。这篇文章的想法和观点是比较通用的指导方针。它们不能代替你的判断,以确保你的决策符合你的目的。毕竟,没有人比你自己更了解你的业务。

容器化

如果你的应用程序还没有在容器中运行,那么你迁移到Kubernetes的第0步出现了:容器化。Docker并不是唯一的容器化方法,但它通常是显而易见的选择,因为它直观、支持良好且用途广泛。

你可以使用Docker创建支持应用程序及其所有依赖项的镜像。这最好使用自动化的持续集成流水线来完成,该流水线包括将版本化的镜像推入Docker注册表(可以是私有的)。有了这些注册表中的镜像,你就可以开始使用Kubernetes了。

因为这篇文章介绍的是Kubernetes迁移,而不是Docker的基本原理,所以这里不会有更多关于这一步的内容。有许多其他的资源可以帮助你熟悉Docker。

开始迁移!

当完成容器化之后,是时候考虑迁移策略了。

在为Kubernetes执行构建应用程序架构时,你的主要关注点是冗余、容错性、服务、网络、监控和持久状态。

 冗余

在将容器化的应用程序工作负载迁移到Kubernetes集群之前,首先你需要有一个集群。需要思考的问题有在何处运行集群以及集群中节点的容量规划,包括数量和功能。

这些是基础设施问题。在哪里运行的问题上,使用提供Kubernetes的云提供商通常是最佳选择。

除了基础设施级别之外,你还需要在应用程序级别计划冗余。一个给定的pod需要多少个副本?你可以通过告诉Kubernetes如何通过deployment和/或StatefulSet来运行你的pod来回答这些问题。

 容错性

Kubernetes负责监控荚(pod)的健康状况,以确保它们处于工作状态。容器的一些特征可以显示不健康的pod,但是Kubernetes需要你的帮助来确认你的应用程序在容器中是否健康。为了让Kubernetes能够取下不能使用的荚,用新的荚替换它们,并且知道新的荚何时准备好,你需要告诉它如何知道你的荚的状态。

 网络

将流程放入容器并不会隔离它们。你仍然有需要与其他系统组件和外部世界通信的系统组件。

理想情况下,集群中的大多数通信是在一个pod内的容器之间进行的,或者通过服务进行跨pod的通信。

有这么几种选项。使用Kubernetes服务,你可以指定一个服务类型。有些类型直接暴露于外部世界。LoadBalancer服务类型利用托管平台来设置一个直接公开服务的负载平衡器。例如,Amazon Web服务中的集群中的LoadBalancer服务使用弹性负载平衡器(Elastic Load Balancers)。

可以设置ingress资源来控制对服务或其他资源的访问,Ingress为你提供了对如何公开应用程序的更多控制,但可能需要更多的思考并增加复杂性。

 监控

在迁移到Kubernetes之前,很多人就已经意识到有多个系统组件和多个副本,而传统的对单个组件的监控无法解决这个问题。

频繁地将新实例上线和下线(更不用说这些实例是分布式的了)带来了新的挑战。要更深入地了解这些挑战以及监视Kubernetes的流行模式,可查看Sensu CTO Sean Porter的这系列文章(https://blog.sensu.io/monitoring-kubernetes-part-1-the-challenges-data-sources)。

 持久状态

迁移数据库可能是迁移系统中最具挑战性的部分。第一个也是最明显的困难来自于数据的移动。大型数据库很难迁移。然而,更基本的是决定数据应该放在哪里。

在Kubernetes中运行应用程序并不一定意味着数据库必须位于Kubernetes中。主要的云提供商提供了将数据库作为托管云服务运行的服务。一般来说,这是一种很好的方式,可以减轻维护数据库所需的大量工作,并且可以很好地与Kubernetes中的pod连接到托管数据库。云提供商提供定制的云原生数据库,但也提供用于运行知名数据库的托管实例的服务,如SQL Server、Oracle、MySQL、PostgreSQL等。迁移数据库最直接的方法通常是迁移到你已经在使用的数据库,可能只是在不同的地方。

另外,如果你想完全避免迁移数据,可以使用虚拟专用网络(VPN)连接到本地数据库。

不过,Kubernetes的数据库也是一个选择。这为你提供了更多的控制,作为交换,你需要管理集群中的持久存储和数据库软件容器。Kubernetes确实支持将持久存储卷附加到容器上。

从自我控制的基础设施迁移

将系统部署在本地与通过IaS在公共云中运行当然不是一回事。不过,出于本文的目的,请将它们看作是足够接近的,以便将它们放在一起讨论。使用IaS(基础设施即服务),你可以在云中执行,最大限度地控制工作负载的运行方式和位置。你可以控制机器。配置、维护和支持本地物理硬件显然是不同的,但这不是以应用程序为中心的视图的重点。

 不可变的部署单元

如果你可以完全控制你的操作环境,那么你就可以自由地定制硬件(虚拟的或其他的)来满足你的需求。这支持了有用的场景,可以帮助进行故障排除,但也带来了极大的危险。调整服务器以使其运行可能还没有文档记录的配置。这使得设置很难重复,服务器很难替换。应用程序和支持可能表现得不确定。当你迁移到Kubernetes(或任何平台作为服务)时,你需要习惯不可变的运行时环境。

从技术上讲,你可以改变Kubernetes pods中运行容器的状态,但这通常会带来问题。这是因为Kubernetes会替换pods来维护所需的状态,从而丢失容器中的这些更改。因此,将部署的容器视为不可变的是一个好主意。此外,还支持通过Kubernetes强制执行策略,使容器中的文件系统成为只读的,并且通常建议这样做。

这意味着团队需要将他们对环境基础设施的看法从操作角色建立的东西转变为由可重复的脚本和清单构建的东西。

 计划迁移

如果你目前正在本地运行,你将需要先容器化。在进行容器化时,你需要考虑应用程序的依赖性,以及如何将服务于你的应用程序的镜像放在一起。与此同时,你将计划如何让容器在Kubernetes集群中协同工作的清单。

数据库迁移在从本地迁移时是最具挑战性的。云提供商确实有工具可以帮助移动信息。

从云平台服务迁移

如果你使用的是特定于你的云厂商的服务,那么你需要做出一些决定。例如,如果你在与现有应用程序相同的云中构建集群,则可以继续使用类似于CosmosDB或DynamoDB等专有数据库。考虑到Kubernetes的普遍性,而且它并不特定于任何提供商,你可能想要考虑放弃私有依赖项。没有正确的答案,只有需要你认真考虑的问题。

随着Kubernetes这种生产级容器编排平台的发展,请记住,你的系统是你自己的,你的场景是唯一的。你所做的每一个决策都需要符合你的目的,以便更好地为你的用户和整个组织服务。迁移快乐!

END

往期精彩文章回顾

从青铜到王者,代码人生之路

云原生的What、Why、How

从AWS到阿里云:产品体系差异分析

疫情防控的“第二战场”

美年健康俞熔:创业者最重要的是锻造内心、熬过拐点

在售后技术服务里,Kubernetes到底是什么?

长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

关注
打赏
1663816507
查看更多评论
立即登录/注册

微信扫码登录

0.0508s