Flexvolume场景云盘迁移方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 如果您在阿里云容器服务部署了应用,并且使用云盘数据卷保存数据,您可以有数据迁移、数据回滚、磁盘类型变配等需求,本方案为您提供了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来结合进行永久性磁盘的配置呢?本文通过其详细步骤和要点把成功配置的方法给大家做一个分享。本文不做理论性阐述,纯实战,有不严谨之处还望评论指正。
1378 0
自建K8S通过PVC配置NAS动态磁盘要点回顾
|
3月前
|
存储 API 块存储
OpenStack的块存储卷快照
【8月更文挑战第25天】
53 4
|
6月前
|
存储 弹性计算 固态存储
*PolarDB-PG开源版本 基于ECS+ESSD云盘共享存储的部署测评**
PolarDB-PG在阿里云ECS与ESSD云盘的组合下展现优秀性能,简化部署流程,提供高并发写入时低延迟稳定性。ESSD的高性能IOPS和读取速度优化了数据库表现,只读节点实现近乎实时数据访问。分布式部署保证高可用性,即使面对故障也能快速切换。尽管ESSD初期成本较高,但长期看能降低总体拥有成本,尤其适合高并发、大数据量场景。此解决方案平衡了性能、可用性和成本,是企业级应用的理想选择。
|
6月前
|
存储 弹性计算 容灾
通过HBR实现NAS容灾方案
本文介绍如何基于NAS+云上备份HBR实现云文件数据容灾。
213 0
通过HBR实现NAS容灾方案
|
6月前
|
存储 数据采集 弹性计算
通过EBS Lens实时监控块存储状态
块存储的监控与运维是非常重要的,EBS Lens针对块存储提供数据分析、资源监控的功能,可以帮助用户获取云上块存储资源信息与性能监控数据、提升云上块存储资源的管理效率、高效分析业务波动与资源性能消耗情况。
177 0
通过EBS Lens实时监控块存储状态
|
存储 弹性计算 容灾
【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?
本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量、实时的用户体验及揭秘背后的技术原理。依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特性的数据保护的技术方案,满足云上用户数据保护的迫切需求,保障云上企业业务连续性。
1170 0
|
存储 Shell Perl
使用阿里云Flexvolume插件实现云盘数据卷动态扩容
云盘扩容方案文章列表: 基于Flexvolume插件的云盘动态存储卷扩容方案(本文); 基于CSI插件的云盘动态存储卷扩容方案:参考; 不适合动态扩容的场景,可以使用手动扩容云盘存储卷方案:参考; 数据卷扩容说明: 符合以下要求的集群环境可以进行动态扩容操作: Kubernetes从1.
2422 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协议文件系统、低频文件查看以及取回低频文件至热介质。
1971 0
|
存储 弹性计算 Kubernetes
ACK集群中云盘数据卷的备份恢复方案
在阿里云ACK集群中部署有状态服务通常使用云盘数据卷做数据存储,云盘本身提供了数据的备份(快照)恢复机制,但是如何将底层能力和K8S服务集成并灵活的提供给应用使用,是云原生存储服务需要解决的问题。K8S使用如下两个特性来实现备份恢复能力: 通过VolumeSnapshot对象实现云盘的备份(快照.
2776 0
ACK集群中云盘数据卷的备份恢复方案