Portworx近期发布了免费的Essentials版本。(https://portworx.com/announcing-portworx-essentials/)。Essentias)。node
Essentials版本支持小规模Kubernetes生产系统运行所需的必要功能:也许是CICD的pipeline,或是处于开发早期的面向用户的APP。不管是那种应用,都须要更快的存储、高可用、加密、快照等等必要功能。PortworxEssentials提供了这些必要功能。mysql
备份和恢复Kubernetes集群和全部应用,或仅备份和恢复一个独立的Kubernetes应用,包括数据、应用配置和Kubernetes对象(如CRDs、Secrets、服务帐户等),具体应该怎么作呢?git
Portworx Enterprise版本的客户可使用PX-Backup,来完成一个端到端的备份和恢复解决方案。但若是用户正在使用Portworx Essentials,则须要用户把Portworx快照与开源Kubernetes备份方案Velero配合来使用。Velero能够备份Kubernetes状态好比应用配置、和存储在etcd的对象。这个方案很适初始小型规模的Kubernetes环境。当用户的Kubernetes环境规模扩大之后,能够转向使用Portworx Enterprise和PX-Backup。github
接下来咱们会介绍如何使用Portworx Essentials和Velero,经过Portworx快照来完成备份和恢复功能。web
安装Portworx Essentialssql
你能够登陆Portworx网站来获取免费的Portworx Essentials(https://ask.portworx.com/essentials/?utm_medium=website&utm_source=pricing%20page&utm_campaign=Essentials)。数据库
Portworx微信公众号上一期的文章,专门介绍了如何安装和使用Portworx Essentials,可供您参考。json
在AWS上使用S3来安装Velero Server组件后端
为了配合使用Velero和Portworx,用户必须安装服务组件以及对象存储。在下面的操做中,咱们使用的是Amazon的S3,创建S3的操做步骤能够参考这里(https://github.com/vmware-tanzu/velero-plugin-for-aws#create-s3-bucket)。api
注意:咱们在本文中使用S3做为咱们备份中须要的对象存储。也可使用其余的对象存储,好比Minio、微软Azure、GCP,等,只要可以正确的配置便可。
一旦配置完成了Amazon S3,你能够经过下面的命令来安装Velero,首先安装Velero,安装完成后咱们会增长Portworx的插件。
$ 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插件。
$ 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环境。
PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o jsonpath='{.items[0].metadata.name}')
接下来,咱们要确保咱们的云快照是被加密的,这样咱们能够建立一个Secret,并用这个Secret做为咱们的加密密文,传递给Portworx。一个简单的方式是使用64位的哈希字符串。
echo "mysupersecret" | base64 bXlzdXBlcnNlY3JldAo=
接下来,咱们经过pxctl,并基于Amazon的密钥和加密密文来建立咱们的身份验证。
$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 awss3Credentials 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。
$ velero snapshot-location create portworx-cloud --provider portworx.io/portworx --config type=cloud,credId=f8d2cf6d-ab50-4e42-90b6-9930336ad898Snapshot volume location "portworx-cloud" configured successfully.
你能够经过使用Kubectl命令,来检查卷快照的位置,
$ kubectl get volumesnapshotlocation -n velero NAME AGEdefault 17mportworx-cloud 30s
建立一个应用(好比WordPress)
如今咱们来使用PortworxEssentials和Velero。咱们须要一个应用,填入一些数据,而后作备份操做。你可使用WordPress+MySQL应用,部署到一个名为WordPress的命名空间里。(https://github.com/wallnerryan/pwx-app-catalog/tree/master/apps/Blog/Wordpress)
注意:能够经过上面的连接,查看如何部署WordPress和Mysql的操做。
$ kubectl get po -n wordpress NAME READY STATUS RESTARTS AGE pod/wordpress-79c6db4c56-4sjjs 1/1 Running 0 72mpod/wordpress-79c6db4c56-697rt 1/1 Running 0 72mpod/wordpress-79c6db4c56-92whn 1/1 Running 0 72mpod/wordpress-mysql-d8f757c9d-sknz8 1/1 Running 0 76m
你能够看见两个Portworx卷,分别备份了WordPress和MySQL。其中一个卷是由多个WordPress Pods共享的RWX,另外一个是为单独MySQL数据库后端独享的RWO。
$ kubectl get pvc -n wordpress NAME STATUS VOLUME STORAGECLASS AGE mysql-pvc-1 Bound pvc-45837d2c... portworx-sc-repl3 72mwp-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是可选的。
$ velero backup create wordpress-backup --include-namespaces=wordpress --snapshot-volumes --volume-snapshot-locations portworx-cloud --waitBackup 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命名空间。
$ kubectl delete namespace wordpres
这样咱们的WordPress和MySQL的部署就彻底消失了,以及咱们的PVs和PVCs也消失了。不用担忧,咱们从备份中来恢复。
$ velero restore create --from-backup wordpress-backupRestore 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生产系统里管理有状态应用!