Portworx演示:在K8S集群间迁移有状态的应用和数据

发布时间:2024-09-04 点击:74
系统运维
越来越多的企业选择kubernetes作为基础架构,它能够帮助我们缩短软件项目上市时间、降低基础架构成本、并提高软件质量。由于kubernetes比较新,因此it团队都在学习如何在生产环境中,在kubernetes上对应用程序进行运行和维护。本文将探讨,当在需要额外的计算能力时,将kubernetes应用程序迁移至另一个新的集群。
portworx演示视频链接
需要对当前的kubernetes集群进行扩充的一些原因
1.某个集群的资源即将被全部占用,你需要将工作负载迁移到新的具有更多的计算资源的地方。
2.你希望使用的服务在另一个区域或云中,但想要使用这些服务,你需要转移应用程序和数据。
3.硬件到期,需要升级硬件到下一代,而新硬件的计算的规格、要求以及内存容量都已经发生了变化,这就导致了迁移的必要性。
4.集群资源受限并且进行扩展instance的成本越来越高,因此你需要采用新的集群架构,这样的集群需要使用网络附加的块存储而非本地磁盘,这样才能够将存储独立于计算进行扩展。
5.开发人员希望将工作负载转移到一个具有不同的硬件、网络、操作系统或其他配置的集群进行测试或分级。
上述所列原因并不详尽,但也说明在许多条件下扩充kubernetes环境和将工作负载从一个集群迁移到另一个集群是有必要的。这个问题在涉及无状态应用时较为简单,但对于有状态的服务,如数据库、队列、关键存储、大数据以及机器学习应用时等时,你就必须将数据转移到新的、扩容的环境中去,然后应用程序设计才能加速运行。
解决数据移动性问题:px-enterprise?新功能
px-motion不仅具有对数据进行跨环境转移的能力,它还能够对应用程序配置以及相关的有状态的资源,如pv(永久卷)等进行转移,使得操作团队能够非常方便地将一个卷、一个kubernetes名字空间、或整个kubernetes集群在环境之间进行转移,即便其中存在永久数据。
本文将对px-motion的功能与能力进行探讨。同时,我们将演示如何将一个kubernetes命名空间以及其中运行的所有应用程序转移到一个具有资源拓展能力的新的kubernetes集群上。在这个演示中,集群1表示资源已经过度利用的、不灵活的,已经无法满足我们不断增长的应用程序需求的集群。集群2表示一个更加灵活且可扩展的集群,我们将把工作负载转移到这个集群2上。
除了在集群之间进行整个kubernetes命名空间的转移之外,我们还将展示如何将配置在集群1中使用本地存储的应用程序,迁移到使用网络附加的块存储的集群2中。
通过这种方式,你将看到我们需要转移真正的数据,而不是通过管理块设备映射这种小伎俩来实现的。
总的来说,在将一个有状态的kubernetes应用程序转移到另一个集群时,你需要:
将这两个集群进行配对,从而指定一个目标集群和一个目的集群;
使用px-motion开始迁移,其中包括移动数据卷和配置;
数据和配置迁移完成后,kubernetes会自动将应用程序部署到新的环境中。
我们开始吧!
配置与设置
在展示中,我们使用google kubernetes engine (gke)作为kubernetes集群,但你也可以在任意的kubernetes集群中进行如下的操作。使用portworx installer online spec generator获得的daemonset spec, 将portworx安装到各个集群上。逐步完成安装,portworx安装过程在此不作赘述,可以查看portworx.com上的文档了解如何在kubernetes上安装portworx 。环境架构示意图如下。注意集群1和集群2的如下方面:
cluster namemachine typestorage typecluster 1 (source)
n1-standard-2
local-ssd
cluster 2 (destination)
n1-standard-8
provisioned pds
在这种情况下,第一个集群(集群1)资源面临限制,操作团队希望从本地ssd转移到更大instance的自动配置的永久磁盘(pd)中。
为什么?本地ssd在处理特定工作负载时较为有效,但其自身也存在着局限性,这也是我们在这里讨论将应用程序从一个命名空间转移到另一个命名空间的原因所在。依照谷歌的描述,本地ssd的限制包括:
“由于本地ssd是以物理方式附加到节点的虚拟机instance上的,其中存储的所有数据都只存在于这个节点上。而由于数据是本地存储的,因此你的应用必须要能够面对数据不可用的情况。”
“存储在ssd的数据是短期性的。向本地ssd写入内容的pod会在被调度离开这一节点时失去对磁盘中存储的数据进行访问的能力。” 此外,如果节点被撤销、升级或维修,则数据就会被擦除。
“我们并不能向现有的节点池添加本地ssd。”
portworx能够克服对上述部分限制,因为它能够将数据复制到集群中的其他提供高可用的主机上。但如果我们希望在不对计算按比例进行扩展的情况下,不断向我们的集群添加额外的存储,那么使用本地存储仍旧会存在一定的限制。上文所述的gke上的第二个集群使用portworx disk template,从而自动允许portworx从google云对磁盘进行管理,这比本地磁盘更加灵活一些。
第二个集群提前运行,现在使用的是自动配置的pd,可以进行工作负载的迁移。
大量应用程序的运行需要更多的计算能力
源集群如下。它是由单个命名空间(namespace)内运行的大量应用构成的:cassandra, postgres,wordpress和mysql。所有的这些应用程序都会在集群中产生非常高的负载。如下是demo命名空间内运行的应用。注意,在单个kubernetes集群上运行多个命名空间是可行且常见的。在演示中,我们只移动一个命名空间,让剩余的其他命名空间继续运行,不做变动。
$ kubectlconfig use-context <source-cluster>$ kubectlget po -n demoname ready status restarts agecassandra-1-0 1/1 running 0 17mcassandra-1-1 1/1 running 0 16mcassandra-1-2 1/1 running 0 14mcassandra-2-0 1/1 running 0 17mcassandra-2-1 1/1 running 0 16mcassandra-2-2 1/1 running 0 14mmysql-1-7f58cf8c7c-srnth 1/1 running 0 2mmysql-2-8498757465-gqs5h 1/1 running 0 2mpostgres-2-68c5d6b845-c4gbw 1/1 running 0 26mpostgres-77bf94ccb5-hs7dh 1/1 running 0 26mwordpress-mysql-2-5fdffbdbb4-dpqm9 1/1 running 0 17m在某一个时间点上,当添加了更多的应用程序,如mysql数据库时,这个集群就会遭遇其内存限制并出现“outofmemory”等错误,见如下。为解决这个问题,我们将demo这个命名空间迁移到一个新的集群上,从而为demo这个命名空间增添新的可用资源。
$ kubectlget po -n demoname ready status restarts agecassandra-1-0 1/1 running 0 16mcassandra-1-1 1/1 running 0 14mcassandra-1-2 1/1 running 0 13mcassandra-2-0 1/1 running 0 16mca

CentOS下RabbitMQ二进制包安装步骤
数字域名交易指南:一文掌握数字域名交易小诀窍
统计程序无法使用-云服务器问题
如何导出腾讯云服务器镜像
Tiktok节点服务器购买推荐-Tiktok自己搭建环境节点服务器推荐
如何购买域名?买域名去哪个网站
网站 云服务器
word文档怎么删除多余的空白页面 word空白页无法删除怎么办