前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Portworx Essentials + Velero:备份Kubernetes应用

Portworx Essentials + Velero:备份Kubernetes应用

原创
作者头像
Portworx
修改2020-05-08 17:44:08
1.2K0
修改2020-05-08 17:44:08
举报

Portworx近期发布了免费的Essentials版本。(https://portworx.com/announcing-portworx-essentials/)。Essentias)。

Essentials版本支持小规模Kubernetes生产系统运行所需的必要功能:也许是CICD的pipeline,或是处于开发早期的面向用户的APP。不论是那种应用,都需要更快的存储、高可用、加密、快照等等必要功能。PortworxEssentials提供了这些必要功能。

备份和恢复Kubernetes集群和所有应用,或仅备份和恢复一个独立的Kubernetes应用,包括数据、应用配置和Kubernetes对象(如CRDs、Secrets、服务账户等),具体应该怎么做呢?

Portworx Enterprise版本的客户可以使用PX-Backup,来完成一个端到端的备份和恢复解决方案。但如果用户正在使用Portworx Essentials,则需要用户把Portworx快照与开源Kubernetes备份方案Velero配合来使用。Velero可以备份Kubernetes状态比如应用配置、和存储在etcd的对象。这个方案很适初始小型规模的Kubernetes环境。当用户的Kubernetes环境规模扩大以后,可以转向使用Portworx Enterprise和PX-Backup。

接下来我们会介绍如何使用Portworx Essentials和Velero,通过Portworx快照来完成备份和恢复功能。

安装Portworx Essentials

你可以登录Portworx网站来获取免费的Portworx Essentials(https://ask.portworx.com/essentials/?utm_medium=website&utm_source=pricing%20page&utm_campaign=Essentials)。

Portworx微信公众号上一期的文章,专门介绍了如何安装和使用Portworx Essentials,可供您参考。

在AWS上使用S3来安装Velero Server组件

为了配合使用Velero和Portworx,用户必须安装服务组件以及对象存储。在下面的操作中,我们使用的是Amazon的S3,建立S3的操作步骤可以参考这里(https://github.com/vmware-tanzu/velero-plugin-for-aws#create-s3-bucket)。

注意:我们在本文中使用S3作为我们备份中需要的对象存储。也可以使用其他的对象存储,比如Minio、微软Azure、GCP,等,只要能够正确的配置即可。

一旦配置完成了Amazon S3,你可以通过下面的命令来安装Velero,首先安装Velero,安装完成后我们会增加Portworx的插件。

代码语言:javascript
复制
$ velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.0.1 \
--bucket $BUCKET \
--backup-location-config region=$REGION \
--snapshot-location-config region=$REGION \
--secret-file ./credentials-velero

接下来,因为我们需要使用Portworx来完成云中的PV的快照,我们可以使用下面的命令来添加Portworx插件。

代码语言:javascript
复制
$ velero plugin add portworx/velero-plugin:1.0.0

一旦以上的步骤都顺利完成,就可以继续进行下面的配置了。

增加Portworx云身份验证

Portworx会创建基于云中块存储的快照(https://docs.portworx.com/reference/cli/cloud-snaps/)来备份用户的数据。因此,我们需要为Portworx配置对象存储的云身份验证。我们使用Pxctl – Portworx的CLI工具,来进行操作。首先,通过一个Portworx Pod创建PX-POD环境。

代码语言:javascript
复制
PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o jsonpath='{.items[0].metadata.name}')

接下来,我们要确保我们的云快照是被加密的,这样我们可以创建一个Secret,并用这个Secret作为我们的加密密文,传递给Portworx。一个简单的方式是使用64位的哈希字符串。

代码语言:javascript
复制
echo "mysupersecret" | base64
bXlzdXBlcnNlY3JldAo=

接下来,我们通过pxctl,并基于Amazon的密钥和加密密文来创建我们的身份验证。

代码语言:javascript
复制
$kubectl exec $PX_POD -n kube-system -- /opt/pwx/bin/pxctl credentials create --s3-access-key  --s3-secret-key  --s3-region us-east-1 --encryption-passphrase bXlzdXBlcnNlY3JldAo= --s3-endpoint s3.amazonaws.com --provider s3 awss3
Credentials created successfully, UUID:f8d2cf6d-ab50-4e42-90b6-9930336ad898

为Portworx创建快照的位置

Velero可以为持久卷的数据和应用元数据使用SnapshotLocation(https://velero.io/docs/master/api-types/volumesnapshotlocation/)和BackupLocation(https://velero.io/docs/master/locations/)。可以使用下面的命令。

注意:你将会需要使用credId,它是一个从上文的你的pxctl 验证身份创建命令里产生的UUID。

代码语言:javascript
复制
$ velero snapshot-location create portworx-cloud --provider portworx.io/portworx --config type=cloud,credId=f8d2cf6d-ab50-4e42-90b6-9930336ad898
Snapshot volume location "portworx-cloud" configured successfully.

你可以通过使用Kubectl命令,来检查卷快照的位置,

代码语言:javascript
复制
$ kubectl get volumesnapshotlocation -n velero
NAME AGE
default 17m
portworx-cloud 30s

创建一个应用(比如WordPress)

现在我们来使用PortworxEssentials和Velero。我们需要一个应用,填入一些数据,然后做备份操作。你可以使用WordPress+MySQL应用,部署到一个名为WordPress的命名空间里。(https://github.com/wallnerryan/pwx-app-catalog/tree/master/apps/Blog/Wordpress)

注意:可以通过上面的链接,查看如何部署WordPress和Mysql的操作。

代码语言:javascript
复制
$ kubectl get po -n wordpress
NAME READY STATUS RESTARTS AGE
pod/wordpress-79c6db4c56-4sjjs 1/1 Running 0 72m
pod/wordpress-79c6db4c56-697rt 1/1 Running 0 72m
pod/wordpress-79c6db4c56-92whn 1/1 Running 0 72m
pod/wordpress-mysql-d8f757c9d-sknz8 1/1 Running 0 76m

你可以看见两个Portworx卷,分别备份了WordPress和MySQL。其中一个卷是由多个WordPress Pods共享的RWX,另一个是为单独MySQL数据库后端独享的RWO。

代码语言:javascript
复制
$ kubectl get pvc -n wordpress
NAME STATUS VOLUME STORAGECLASS AGE
mysql-pvc-1 Bound pvc-45837d2c... portworx-sc-repl3 72m
wp-pv-claim Bound pvc-cb520f93... portworx-sc-repl3-shared 72m

通过访问WordPress的服务端点,并且按照提示来创建第一篇文章作为应用的数据。可以通过kubectl get svc -n wordpress 命令来获取端点的信息。默认状态下,这个应用可以被NodePort访问。(https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)

使用Portworx和Velero来完成MySQL+Wordpress的备份

现在我们在应用中已经创建了一些数据,让我们接着来备份一下应用和持久卷。

注意:–wait是可选的。

代码语言:javascript
复制
$ velero backup create wordpress-backup --include-namespaces=wordpress --snapshot-volumes --volume-snapshot-locations portworx-cloud --wait
Backup request "wordpress-backup" submitted successfully.
Waiting for backup to complete. You may safely press ctrl-c to stop waiting - your backup will continue in the background.
...............................................
Backup completed with status: Completed. You may check for more information using the commands `velero backup describe wordpress-backup` and `velero backup logs wordpress-backup`.

赞!我们已经使用Portworx和Velero成功创建了应用和数据的备份。

注意:Portworx Essentials的功能和限制(https://docs.portworx.com/concepts/portworx-essentials/),只允许每天每个卷备份一个云快照。同一天创建第二个备份会失败。我们可以等到第二天再创建备份,或者如果我们需要更频繁的备份的话,可以使用PX-Backup(https://portworx.com/cloud-native-application-backups-using-px-backup/)。

从备份中恢复MySQL和WordPress

为了模拟系统错误的出现,我们可以删除整个WordPress命名空间。

代码语言:javascript
复制
$ kubectl delete namespace wordpres

这样我们的WordPress和MySQL的部署就完全消失了,以及我们的PVs和PVCs也消失了。不用担心,我们从备份中来恢复。

代码语言:javascript
复制
$ velero restore create --from-backup wordpress-backup
Restore request "wordpress-backup-20200422153128" submitted successfully.
Run `velero restore describe wordpress-backup-20200422153128` or `velero restore logs wordpress-backup-20200422153128` for more details.

恢复操作完成后,你就可以重新访问你的NodePort端点了,你所有的数据也都恢复了。

注意:恢复操作中还有其他的选项,比如恢复一个新的命名空间。可以参考这里的文档。(https://velero.io/docs/master/restore-reference/)。

希望这篇文章能够帮助您更好的在小规模Kubernetes生产系统里管理有状态应用!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站建设
网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档