本篇文章2045字,读完约5分钟

Kubernetes的主要原因是它可以快速扩展,提高资源利用率,并且可迁移性优势明显。从本地部署Kubernetes向公有云托管Kubernetes环境迁移和跨云进行Kubernetes迁移的趋势正在加速,因为云上托管的Kubernetes服务的维护更加简单,可用性和可靠性更高。

 

 有状态服务迁移的需求

 Kubernetes平台上运行的应用一般是无状态(Stateless)应用为主,但是有状态(Stateful)应用也不少见,各种数据库就是最常见的有状态应用,另外就是一些应用有数据持久化到磁盘的需求。而无状态应用则与有状态应用相对应,常见的无状态应用包括各种页面前端、Httpd、Nginx中间件等。

 无状态服务在迁移的过程中一般使用yaml文件手工重新部署或利用CICD平台进行自动部署,不用过多考虑将原有Kubernetes平台上的应用数据恢复到新集群中。但是一些有持久化数据的服务在迁移时要将原有数据也迁移到新集群中,这些服务通常采用Deployment+PVC或StatefulSet的方式进行部署,这时选择什么样的迁移方式显得很重要。对于类似数据库这样实时性要求高的,一般建议采用专业工具来进行在线迁移,如:Amazon DMS;如果是对实时性要求没有非常高要求的情况下,可以采用一些开源的数据迁移工具来进行。

 

 什么是有状态服务

 有状态应用(Stateful Application)通常是指有持久化存储需求的各种应用。有状态在Kubernetes中的定义是:StatefulSet是用来管理有状态应用的工作负载API对象。StatefulSet用来管理某些Pod集合的部署和扩缩,并为这些Pod提供持久存储和持久标识符。

 

 为什么有状态服务难迁移

 有状态应用在容器平台迁移时面临一个问题:在应用需要数据不丢失的情况下,必须要能做到持久化数据与容器一同进行迁移,否则原有数据将会丢失或无法访问。另外从技术角度讲,在跨平台迁移时因为底层存储驱动大多不一样,导致无法直接将数据迁移到另外的平台。目前,通用迁移方案大多依赖于有状态服务自身提供的备份和恢复机制来实现,然而在迁移操作过程中存在需要人工参与、操作时间过长等问题。

 

 迁移方案

 

 1.在源Kubernetes群所在云虚拟机上安装Velero CLI

 2.在源Kubernetes集群上安装并启动Velero server

 3.通过Velero CLI创建源Kubernetes集群上的有状态应用备份文件并存储到Cloud Object Storage中

 4.使用命令行工具将Cloud Object Storage中的备份文件同步到Amazon S3

 5.在Amazon EC2上同样安装Velero CLI

 6.在Amazon EKS上安装并启动Velero server

 7.使用Velero CLI将Amazon S3桶中的备份文件恢复到Amazon EKS集群上

 

 迁移原理

 Velero使用名为restic的免费开源备份工具备份和恢复Kubernetes卷。Velero引入了三个CRD(Custom Resource Definitions)和关联的Controllers。

 ResticRepository用来管理Velero的restic存储库的生命周期,当请求备份时,Velero会为每个namespace创建一个restic库,用于存储备份数据。PodVolumeBackup用于pod中卷的静态备份,主Velero备份进程在找到带注释的pod时会为其创建备份,集群中的每个node上都会运行一个备份controller用来处理该节点上的pod的PodVolumeBackup。PodVolumeRestore是用于卷的静态恢复的controller,Velero执行restic restore命令来恢复pod volume数据。

 在跨云迁移Kubernetes集群中的有状态服务时,由于经常使用的Kubernetes源集群的CSI(Cloud Storage Interface)不同于目标集群的CSI,会导致无法直接使用Snapshot来进行备份、恢复,这是在跨云迁移时的一个难题(不同云平台之间的CSI Driver并不相同)。

 所以使用Snapshot并不能完成有状态服务的迁移,在这里使用Velero的File System Backup功能来实现。Velero不支持容器中hostpath的备份,所以请注意Velero支持的场景和功能是否满足需求。如果在迁移需求中需要进行增量数据迁移,此时建议使用应用自带的迁移方法,如可使用Amazon DMS去满足数据库的全量+增量数据迁移。

 

 结论

 通过上面的测试,可以发现Velero的File System Backup功能可以有效的对源Kubernetes集群中的有状态服务进行跨云迁移,这解决了很多想将有状态服务迁移到云上或跨云迁移的客户的问题。




标题:采用亚马逊云科技Kubernetes和云原生技术,有效提高资源利用率

地址:http://www.pyldsnkxy.com/pycj/32795.html