Portworx近期發(fā)布了免費(fèi)的Essentials版本。(https://portworx.com/announcing-portworx-essentials/)。Essentias)。
Essentials版本支持小規(guī)模Kubernetes生產(chǎn)系統(tǒng)運(yùn)行所需的必要功能:也許是CICD的pipeline,或是處于開發(fā)早期的面向用戶的APP。不論是那種應(yīng)用,都需要更快的存儲、高可用、加密、快照等等必要功能。PortworxEssentials提供了這些必要功能。
備份和恢復(fù)Kubernetes集群和所有應(yīng)用,或僅備份和恢復(fù)一個(gè)獨(dú)立的Kubernetes應(yīng)用,包括數(shù)據(jù)、應(yīng)用配置和Kubernetes對象(如CRDs、Secrets、服務(wù)賬戶等),具體應(yīng)該怎么做呢?
Portworx Enterprise版本的客戶可以使用PX-Backup,來完成一個(gè)端到端的備份和恢復(fù)解決方案。但如果用戶正在使用Portworx Essentials,則需要用戶把Portworx快照與開源Kubernetes備份方案Velero配合來使用。Velero可以備份Kubernetes狀態(tài)比如應(yīng)用配置、和存儲在etcd的對象。這個(gè)方案很適初始小型規(guī)模的Kubernetes環(huán)境。當(dāng)用戶的Kubernetes環(huán)境規(guī)模擴(kuò)大以后,可以轉(zhuǎn)向使用Portworx Enterprise和PX-Backup。
接下來我們會介紹如何使用Portworx Essentials和Velero,通過Portworx快照來完成備份和恢復(fù)功能。
安裝Portworx Essentials
你可以登錄Portworx網(wǎng)站來獲取免費(fèi)的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,用戶必須安裝服務(wù)組件以及對象存儲。在下面的操作中,我們使用的是Amazon的S3,建立S3的操作步驟可以參考這里(https://github.com/vmware-tanzu/velero-plugin-for-aws#create-s3-bucket)。
注意:我們在本文中使用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
接下來,因?yàn)槲覀冃枰褂肞ortworx來完成云中的PV的快照,我們可以使用下面的命令來添加Portworx插件。
$ velero plugin add portworx/velero-plugin:1.0.0
一旦以上的步驟都順利完成,就可以繼續(xù)進(jìn)行下面的配置了。
增加Portworx云身份驗(yàn)證
Portworx會創(chuàng)建基于云中塊存儲的快照(https://docs.portworx.com/reference/cli/cloud-snaps/)來備份用戶的數(shù)據(jù)。因此,我們需要為Portworx配置對象存儲的云身份驗(yàn)證。我們使用Pxctl – Portworx的CLI工具,來進(jìn)行操作。首先,通過一個(gè)Portworx Pod創(chuàng)建PX-POD環(huán)境。
PX_POD=$(kubectl get pods -l name=portworx -n kube-system -o jsonpath='{.items[0].metadata.name}')
接下來,我們要確保我們的云快照是被加密的,這樣我們可以創(chuàng)建一個(gè)Secret,并用這個(gè)Secret作為我們的加密密文,傳遞給Portworx。一個(gè)簡單的方式是使用64位的哈希字符串。
echo "mysupersecret" | base64 bXlzdXBlcnNlY3JldAo=
接下來,我們通過pxctl,并基于Amazon的密鑰和加密密文來創(chuàng)建我們的身份驗(yàn)證。
$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創(chuàng)建快照的位置
Velero可以為持久卷的數(shù)據(jù)和應(yīng)用元數(shù)據(jù)使用SnapshotLocation(https://velero.io/docs/master/api-types/volumesnapshotlocation/)和BackupLocation(https://velero.io/docs/master/locations/)??梢允褂孟旅娴拿?。
注意:你將會需要使用credId,它是一個(gè)從上文的你的pxctl 驗(yàn)證身份創(chuàng)建命令里產(chǎn)生的UUID。
$ 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命令,來檢查卷快照的位置,
$ kubectl get volumesnapshotlocation -n velero NAME AGE default 17m portworx-cloud 30s
創(chuàng)建一個(gè)應(yīng)用(比如WordPress)
現(xiàn)在我們來使用PortworxEssentials和Velero。我們需要一個(gè)應(yīng)用,填入一些數(shù)據(jù),然后做備份操作。你可以使用WordPress+MySQL應(yīng)用,部署到一個(gè)名為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 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
你可以看見兩個(gè)Portworx卷,分別備份了WordPress和MySQL。其中一個(gè)卷是由多個(gè)WordPress Pods共享的RWX,另一個(gè)是為單獨(dú)MySQL數(shù)據(jù)庫后端獨(dú)享的RWO。
$ 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的服務(wù)端點(diǎn),并且按照提示來創(chuàng)建第一篇文章作為應(yīng)用的數(shù)據(jù)??梢酝ㄟ^kubectl get svc -n wordpress 命令來獲取端點(diǎn)的信息。默認(rèn)狀態(tài)下,這個(gè)應(yīng)用可以被NodePort訪問。(https://kubernetes.io/docs/concepts/services-networking/service/#nodeport)
使用Portworx和Velero來完成MySQL+Wordpress的備份
現(xiàn)在我們在應(yīng)用中已經(jīng)創(chuàng)建了一些數(shù)據(jù),讓我們接著來備份一下應(yīng)用和持久卷。
注意:–wait是可選的。
$ 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`.
贊!我們已經(jīng)使用Portworx和Velero成功創(chuàng)建了應(yīng)用和數(shù)據(jù)的備份。
注意:Portworx Essentials的功能和限制(https://docs.portworx.com/concepts/portworx-essentials/),只允許每天每個(gè)卷備份一個(gè)云快照。同一天創(chuàng)建第二個(gè)備份會失敗。我們可以等到第二天再創(chuàng)建備份,或者如果我們需要更頻繁的備份的話,可以使用PX-Backup(https://portworx.com/cloud-native-application-backups-using-px-backup/)。
從備份中恢復(fù)MySQL和WordPress
為了模擬系統(tǒng)錯(cuò)誤的出現(xiàn),我們可以刪除整個(gè)WordPress命名空間。
$ kubectl delete namespace wordpres
這樣我們的WordPress和MySQL的部署就完全消失了,以及我們的PVs和PVCs也消失了。不用擔(dān)心,我們從備份中來恢復(fù)。
$ 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.
恢復(fù)操作完成后,你就可以重新訪問你的NodePort端點(diǎn)了,你所有的數(shù)據(jù)也都恢復(fù)了。
注意:恢復(fù)操作中還有其他的選項(xiàng),比如恢復(fù)一個(gè)新的命名空間??梢詤⒖歼@里的文檔。(https://velero.io/docs/master/restore-reference/)。