Flexvolume场景云盘迁移方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 如果您在阿里云容器服务部署了应用,并且使用云盘数据卷保存数据,您可以有数据迁移、数据回滚、磁盘类型变配等需求,本方案为您提供了Flexvolume、Disk-Controller所运行的集群中,云盘数据管理方案;

介绍:

如果您在阿里云容器服务部署了应用,并且使用云盘数据卷保存数据,您可以有数据迁移、数据回滚、磁盘类型变配等需求,本方案为您提供了Flexvolume、Disk-Controller所运行的集群中,云盘数据管理方案;

适合以下场景:

磁盘轮转:您之前使用了essd云盘,想轮转为ssd的盘;或者反之;
磁盘轮转:您之前使用了加密云盘,想轮转为非加密盘;或者反之;
跨可用区迁移:您之前使用了可用区A的盘,想在可用区B使用;
跨Region迁移:您之前在杭州Region使用的云盘,想在北京Region使用;
数据回滚:您的磁盘定期打了快照,想使用某个版本的快照恢复数据;


方案总体原则是:通过云盘快照技术实现数据的回滚、迁移、变配操作,并保持数据的一致性。

示例应用:

创建一个StatfulSet应用并挂载一块云盘,模板如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql"
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        command: ["sh", "-c"]
        args: ["sleep 10000"]
        volumeMounts:
        - name: ssd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: ssd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd"
      resources:
        requests:
          storage: 20Gi


创建上面应用,并写入验证数据:

# kubectl get pod
mysql-0                       1/1     Running   0          6m40s
mysql-1                       1/1     Running   0          72s
mysql-2                       1/1     Running   0          65s

# kubectl get pvc
ssd-mysql-0    Bound    d-2ze48olpbvnlpofw9wpi   20Gi       RWO            alicloud-disk-ssd   7m3s
ssd-mysql-1    Bound    d-2ze6sw4nc3n9ovquss0s   20Gi       RWO            alicloud-disk-ssd   95s
ssd-mysql-2    Bound    d-2zeddogm2wsjovoch45m   20Gi       RWO            alicloud-disk-ssd   88s

# kubectl exec -ti mysql-0 touch /data/mysql0
# kubectl exec -ti mysql-1 touch /data/mysql1
# kubectl exec -ti mysql-2 touch /data/mysql2

# kubectl exec -ti mysql-0 ls /data
lost+found  mysql0
# kubectl exec -ti mysql-1 ls /data
lost+found  mysql1
# kubectl exec -ti mysql-2 ls /data
lost+found  mysql2

磁盘类型转换场景:

上述MySQL实例中3个pod使用了3个ssd云盘,我们通过轮转的方式将3个云盘变成essd类型,但数据保持一致。轮转过程包括:

将多个云盘分别打成快照;
通过快照创建新的pvc、pv;
pvc、pv名字要符合新的StatefulSet命名规则;


步骤1:创建快照;

从3个pod所对应的pv信息中找到云盘ID,并到到ECS控制台分别创建云盘快照;


假设三个云盘快照ID分别为:

pod-0 -> ssd-mysql-0 -> d-2ze48olpbvnlpofw9wpi -> s-2zeh66llz43m8g65y4um
pod-1 -> ssd-mysql-1 -> d-2ze6sw4nc3n9ovquss0s -> s-2zegk0d8ne75tz0g15zd
pod-2 -> ssd-mysql-2 -> d-2zeddogm2wsjovoch45m -> s-2zec3gco02of30dt6lgb

步骤2:创建新pvc;

老的pvc模板如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ssd-mysql-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: alicloud-disk-ssd


创建新的pvc:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    provider.disksnapshot.aliyuncs.com/disk-snapshot-id: s-2zeh66llz43m8g65y4um
  name: essd-mysql-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: alicloud-disk-essd

改动包括:
1)名字改成“essd-mysql-0”;
2)添加annotations,并且value为pod-0,pvc-0对应的云盘快照ID;
3)storageClassName改成 alicloud-disk-essd;

创建pvc:

# kubectl apply -f pvc-0.yaml
essd-mysql-0   Bound    d-2ze1nxm8hrcdmktxuocn   20Gi       RWO            alicloud-disk-essd   18m

同理,创建pvc-1:essd-mysql-1,pvc-2:essd-mysql-2;

essd-mysql-1   Bound    d-2zeh66llz43m8tzeminq   20Gi       RWO            alicloud-disk-essd   2m27s
essd-mysql-2   Bound    d-2ze383b6z44xjm79qoj2   20Gi       RWO            alicloud-disk-essd   2m25s


步骤3:更新应用:

删除老的statefulset,并创建新的statefulset,模板如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql"
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        command: ["sh", "-c"]
        args: ["sleep 10000"]
        volumeMounts:
        - name: essd
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: essd
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alicloud-disk-ssd"
      resources:
        requests:
          storage: 20Gi

相对于老的模板,需要修改两个地方:
1)volumeClaimTemplates里面的name改成 essd;
2)volumeMounts里面的name改成 essd;

# kubectl get pod
mysql-0                       1/1     Running   0          58s
mysql-1                       1/1     Running   0          28s
mysql-2                       1/1     Running   0          23s

# kubectl describe pod mysql-0 |grep ClaimName
    ClaimName:  essd-mysql-0
# kubectl describe pod mysql-1 |grep ClaimName
    ClaimName:  essd-mysql-1
# kubectl describe pod mysql-2 |grep ClaimName
    ClaimName:  essd-mysql-2

# kubectl exec mysql-0 ls /data
lost+found mysql0

# kubectl exec mysql-1 ls /data
lost+found mysql1

# kubectl exec mysql-2 ls /data
lost+found mysql2

综上:mysql 3副本的云盘已经通过快照的方式变成了essd类型;




其他场景文档后续提供。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 弹性计算 Kubernetes
自建K8S通过PVC配置NAS动态磁盘要点回顾
在K8S上如何配置永久性PVC是大家在生产环境中比较关心的话题,那么如果通过阿里云的NAS来结合进行永久性磁盘的配置呢?本文通过其详细步骤和要点把成功配置的方法给大家做一个分享。本文不做理论性阐述,纯实战,有不严谨之处还望评论指正。
1394 0
自建K8S通过PVC配置NAS动态磁盘要点回顾
|
4月前
|
存储 数据管理 API
OpenStack的块存储卷管理快照与克隆
【8月更文挑战第27天】
74 4
|
7月前
|
存储 弹性计算 固态存储
*PolarDB-PG开源版本 基于ECS+ESSD云盘共享存储的部署测评**
PolarDB-PG在阿里云ECS与ESSD云盘的组合下展现优秀性能,简化部署流程,提供高并发写入时低延迟稳定性。ESSD的高性能IOPS和读取速度优化了数据库表现,只读节点实现近乎实时数据访问。分布式部署保证高可用性,即使面对故障也能快速切换。尽管ESSD初期成本较高,但长期看能降低总体拥有成本,尤其适合高并发、大数据量场景。此解决方案平衡了性能、可用性和成本,是企业级应用的理想选择。
|
块存储
阿里云最新产品手册——阿里云核心产品——块存储——块存储扩容
阿里云最新产品手册——阿里云核心产品——块存储——块存储扩容自制脑图
118 1
|
存储 弹性计算 Cloud Native
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
425 0
云原生-云应用挂载持久化存储卷NAS及通过NAS实现批量机器并发查找日志
|
SQL 存储 关系型数据库
PolarDB-X 1.0-用户指南-扩容管理—平滑扩容
平滑扩容流程分为配置>迁移>切换>清理四个步骤。关于平滑扩容基本原理,详情请参见平滑扩容介绍。
460 0
PolarDB-X 1.0-用户指南-扩容管理—平滑扩容
|
存储 Shell Perl
使用阿里云Flexvolume插件实现云盘数据卷动态扩容
云盘扩容方案文章列表: 基于Flexvolume插件的云盘动态存储卷扩容方案(本文); 基于CSI插件的云盘动态存储卷扩容方案:参考; 不适合动态扩容的场景,可以使用手动扩容云盘存储卷方案:参考; 数据卷扩容说明: 符合以下要求的集群环境可以进行动态扩容操作: Kubernetes从1.
2434 0
使用阿里云Flexvolume插件实现云盘数据卷动态扩容
|
文件存储 容器 测试技术
阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
11月26日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高。
阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
|
存储 文件存储 Windows
阿里云文件存储NAS生命周期管理新功能介绍
简介: 在2020年,阿里云文件存储通用型NAS(简称NAS)推出了新的低频介质(低频型)和生命周期管理功能。在新的一年,我们对生命周期管理功能进行持续迭代。新的生命周期管理支持SMB协议文件系统、低频文件查看以及取回低频文件至热介质。
1987 0
|
存储 弹性计算 Kubernetes
ACK集群中云盘数据卷的备份恢复方案
在阿里云ACK集群中部署有状态服务通常使用云盘数据卷做数据存储,云盘本身提供了数据的备份(快照)恢复机制,但是如何将底层能力和K8S服务集成并灵活的提供给应用使用,是云原生存储服务需要解决的问题。K8S使用如下两个特性来实现备份恢复能力: 通过VolumeSnapshot对象实现云盘的备份(快照.
2783 0
ACK集群中云盘数据卷的备份恢复方案
下一篇
DataWorks