首页 > 其他分享 >快速迁移自建Kubernetes资源上云及EKS资源备份恢复–基础篇

快速迁移自建Kubernetes资源上云及EKS资源备份恢复–基础篇

时间:2023-08-17 09:58:12浏览次数:45  
标签:Velero 上云及 Kubernetes velero -- 备份 集群 EKS

越来越多公司进行应用现代化,微服务化改造,容器化部署,而这一切皆绕不开“容器调度管理平台” Kubernetes。那么如何快速将云下自建Kubernetes迁移上云,及上云后如果按需备份恢复,及在必要时可以快速克隆生产环境进行开发测试成为众多客户的需求点,本文将通过简单场景示例来介绍如何通过Velero快速实现自建Kubernetes资源迁移到EKS及实现EKS集群内资源备份恢复。

 

一、工具Velero介绍:

Velero 是一款开源云原生的备份恢复和迁移工具,采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷,支持公有云,私有云及IDC本地化部署

支持如下功能:

1. 集群资源迁移到其他集群,例如k8s集群间资源迁移,自建k8s到云上托管k8s,不同云厂商托管k8s间资源迁移

2. 集群资源备份恢复,及复制生产集群资源到开发和测试集群
3. 手工或计划定期自动备份,配置备份前和备份后钩子,以在Velero备份之前和之后执行自定义操作

 

Velero工作原理:

 

 

1. Velero 客户端发送备份指令调用 Kubernetes API 服务器以创建 Backup 对象

2. BackupController 观测到通知有新的 Backup 对象被创建并执行对应动作

3. BackupController 开始备份过程,它通过查询API服务器以获取资源来收集数据以进行备份

4. BackupController将需要备份数据传送到远端存储

Velero组件包含:在集群上运行的服务器端;在本地运行的命令行客户端;

部署方式:支持命令行安装和Helm安装,后面环境测试将分别以两种不同的方式进行部署

 

二、环境准备:

前置条件:

a)两台EC2 用于部署自建Kubernetes集群

b)一套托管EKS集群

c)S3存储桶,用于存放备份数据

d)Velero:快速实现k8s备份恢复及迁移工具

1.自建K8s,配置Velero

自建Kubernetes集群步骤可参考Kubernetes官网或参考其他互联网在线文档自行部署即可

本实验环境采用:

2台EC2部署Redhat 8,一台作为master,一台作为work node

Kubernetes版本采用1.20.9,网络插件Calico

部署完成后,确保所有节点为就绪状态

 

 

所有系统组件均为running状态

 

 

待自建集群就绪即可开始Velero安装配置,下载最近版本Velero然后解压进行link或设置PATH环境变量均可

wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.2/velero-v1.9.2-linux-amd64.tar.gz

客户端安装完成后验证Velero命令可正常执行

 

接下来部署Velero服务端,此处采用Velero命令行自定义模式进行部署

velero install \

--velero-pod-cpu-request 200m \

--velero-pod-mem-request 200Mi \

--velero-pod-cpu-limit 1000m \

--velero-pod-mem-limit 1000Mi \

--use-restic \

--default-volumes-to-restic \

--restic-pod-cpu-request 200m \

--restic-pod-mem-request 200Mi \

--restic-pod-cpu-limit 1000m \

--restic-pod-mem-limit 1000Mi \

--provider aws \

--bucket velerobucketzxb \

--namespace velero \

--plugins velero/velero-plugin-for-aws:v1.2.0 \ --secret-file ./velero-secret-file #path to velero credentials file

部署完成后检验确认Velero命名空间存在,对应Velero资源已就绪如下:

 

至此,自建Kubernetes及Velero配置完成

可简单通过 Velero backup create backup-name进行备份测试, 确保备份功能正常,通过Velero backup get进行备份列表查看

 

2.托管EKS部署,配置Velero

EKS集群部署参考AWS官网在线文档进行部署即可,此处测试环境为EKS1.22. 在EKS集群就绪后,按如下步骤部署Velero

2.1 创建IAM策略赋予Velero对S3的读取写入权限

BUCKET= velerobucketzxb  #存储桶使用和自建k8s同一个测试

cat > velero_policy.json <<EOF

{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

 "Action": [

"ec2:DescribeVolumes", "ec2:DescribeSnapshots", "ec2:CreateTags",  

"ec2:CreateVolume", "ec2:CreateSnapshot", "ec2:DeleteSnapshot"

], "Resource": "*"

},

{

 "Effect": "Allow",

"Action": [

      "s3:GetObject",

"s3:DeleteObject",

"s3:PutObject",

"s3:AbortMultipartUpload",

"s3:ListMultipartUploadParts"

],

"Resource":[

"arn:aws:s3:::${BUCKET}/*"

]

},

{

"Effect": "Allow",

 "Action": [

"s3:ListBucket"

],

 "Resource": [

 "arn:aws:s3:::${BUCKET}"

]

 }

]

}

EOF

aws iam create-policy \

--policy-name VeleroAccessPolicy \ --policy-document file://velero_policy.json

2.2 为Velero创建service account

EKS_CLUSTER=eks-cluster-name

REGION=eks-region

ACCOUNT=$(aws sts get-caller-identity --query Account --output text)

eksctl create iamserviceaccount \

--cluster=$EKS_CLUSTER \

--name=velero-server \

--namespace= test-velero \

--role-name=eks-velero-backup \

--role-only \ --attach-policy-arn=arn:aws:iam::$ACCOUNT:policy/VeleroAccessPolicy \

--approve

 

2.3 在EKS上部署Velero服务端

生成Velero yaml配置文件

configuration:

backupStorageLocation:

bucket: $BUCKET

provider: aws

volumeSnapshotLocation:

config:

region: $REGION

credentials:

 useSecret: false

initContainers:

- name: velero-plugin-for-aws

image: velero/velero-plugin-for-aws:v1.2.0 volumeMounts:

- mountPath: /target

name: plugins

serviceAccount:

server:

annotations:

eks.amazonaws.com/role-arn: "arn:aws:iam::${ACCOUNT}:role/eks-velero-backup"

 

2.4 采用helm方式部署Velero服务端

添加helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts

helm install velero vmware-tanzu/velero \

--create-namespace \

--namespace test-velero \

-f velero-server.yaml

 

安装验证:确保下图所示命名空间及所属资源存在

 

 

三、测试场景

1.迁移自建k8s资源到托管EKS

在自建k8s创建web-front命名空间,并在该命名空间下创建nginx service和pod,通过Velero以备份恢复模式快速迁移该命名空间及所属资源到EKS

a. 连接到自建k8s,查看当前状态

 

b. 创建web-front命名空间并部署nginx pod和service

 

c. 通过Velero快速备份自建k8s集群命名空间web-front,然后在EKS上进行恢复以实现快速资源迁移

 

 

d. 切换连接到托管EKS,并确认当前该集群无web-front命名空间

 

e. 使用之前自建k8s备份在EKS上执行恢复操作

 

 

可以看到自建k8s上的web-front命名空间及其资源已在托管EKS集群运行起来

2.EKS备份恢复测试

备份game-2048命名空间及其资源,待备份完成后删除该命名空间并执行恢复操作,确认所有资源可正常运行。

a.确认当前集群连接为托管EKS集群:

 

b.创建game-2048命名空间及其资源

 

c.检查当前EKS集群已经部署game-2048测试应用且运行正常

 

d.执行备份操作,并确认备份成功

 

e.查看备份文件是否存在,删除原game-2048命名空间

 

f.执行恢复操作,并查看game-2048命名空间已恢复,并且对应pod资源已经正常运行

 

至此,基于Velero快速实现命名空间级资源备份恢复完成,在实际环境中如需要克隆生产环境进行开发测试,日常备份恢复及资源迁移都可采用该方式进行.

 

 

 

 

 

原文链接:https://aws.amazon.com/cn/blogs/china/quickly-migrate-self-built-kubernetes-resources-to-the-cloud-and-backup-and-restore-eks-resources/

 

标签:Velero,上云及,Kubernetes,velero,--,备份,集群,EKS
From: https://www.cnblogs.com/igongqi/p/17636782.html

相关文章

  • Kubernetes Deployment控制器创建pod k8s
    Deployment因为RCRS无法支持动态更新Deployment支持动态更新无状态应用管理Deployment控制器下面就是ReplicaSet当我们创建Deployment的时候实际上会给我们创建一个同名的ReplicaSet控制器,这个RS上面是我们对应的pod节点更新的时候,Deployment是支持自动更新的,RS也可以更新,就是......
  • Kubernetes部署v1.26.0
    一,准备环境主机名ip地址节点类型系统版本k8s01192.168.0.180master、etcdcentos7k8s02192.168.0.41workercentos7k8s03192.168.0.241workercentos7  二,配置环境1.修改主机[root@ecs-kmaster~]#hostnamectlset-hostnamekmaster[root@ecs-kma......
  • Kubernetes实战基础(五)
    本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。5.1NamespaceNamespace是k8s系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。默认情况下,k8s集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不......
  • Kubernetes介绍(一)
    k8s是一组服务器集群,K8s所管理的集群节点上的容器1.1kubernetes简介官方网站Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。它拥有一个庞大且快速增长的生态系统。Kubernetes的服务,支持和工具广泛可用。Kubernetes......
  • 云原生周刊:Kubernetes v1.28 新特性一览 | 2023.8.14
    推荐一个GitHub仓库:Fast-Kubernetes。Fast-Kubernetes是一个涵盖了Kubernetes的实验室(LABs)的仓库。它提供了关于Kubernetes的各种主题和组件的详细内容,包括Kubectl、Pod、Deployment、Service、ConfigMap、Volume、PV、PVC、Daemonset、Secret、Affinity、Taint-Tolerati......
  • 推荐工具!使终端便于 DevOps 和 Kubernetes 使用
    如果你熟悉DevOps和Kubernetes的使用,就会知道命令行界面(CLI)对于管理任务有多么重要。好在现在市面上有一些工具可以让终端在这些环境中更容易使用。在本文中,我们将探讨可以让工作流程简化的优秀工具,帮助你在DevOps和Kubernetes中自如地浏览终端。 ZshZsh(ZShell)是一......
  • 小版本更新kubernetes
    小版本更新kubernetes背景最近一段时间躺平了没有更新我的博客文档。感谢各位小伙伴一直以来的支持。此脚本基于https://github.com/cby-chen/Kubernetes/仓库内的安装部署文档。此脚本仅会升级k8s相关组件其他组件不进行升级。使用此脚本务必是使用该文档进行部署的集群......
  • 小版本更新kubernetes
    小版本更新kubernetes背景最近一段时间躺平了没有更新我的博客文档。感谢各位小伙伴一直以来的支持。此脚本基于https://github.com/cby-chen/Kubernetes/仓库内的安装部署文档。此脚本仅会升级k8s相关组件其他组件不进行升级。使用此脚本务必是使用该文档进行部署的集群......
  • 观察混合云环境中 Kubernetes 可观测性的 6 种有效策略
    在混合云环境中观察Kubernetes需要理解分布式系统的行为和性能。我下面这篇文章中的六个策略可以帮助实现这一目标。2023年,原生云应用和平台迅速增长。组织不断努力最大化其应用程序的潜力,确保无缝的用户体验,并推动业务增长。混合云环境的兴起和容器化技术(如Kubernetes)的采用,彻底改......
  • k8s--kubernetes--argo----使用动态存储PVC---基于nfs 的storageclass
    PVC简介Docker中有volumes的概念,在Docker中,volume是对物理节点服务器node路径目录的一种映射,也就是我们可以把服务器的一个目录挂载给镜像使用。同样的,k8s创建的pod也可以挂载volume,而且不仅仅支持pod所在的服务器node的目录映射,也可以挂载其他网络存储的作为目录挂载。k8s支......