Portworx Essentials + Velero:備份Kubernetes應用

 

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生產系統裏管理有狀態應用!

相關文章
相關標籤/搜索