掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:為少 2021-08-25 05:05:26
存儲(chǔ)
存儲(chǔ)軟件
云原生
分布式 Longhorn 提供了 allow-recurring-job-while-volume-detached 設(shè)置,即使卷已分離,您也可以進(jìn)行周期性備份(recurring backup)。您可以在 Longhorn UI 中找到該設(shè)置。

梅河口網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),梅河口網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為梅河口超過(guò)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的梅河口做網(wǎng)站的公司定做!
snapshot 是 Kubernetes Volume 在任何給定時(shí)間點(diǎn)的狀態(tài)。
要?jiǎng)?chuàng)建現(xiàn)有集群的快照,
創(chuàng)建快照后,您將在卷頭(Volume Head)之前的卷的快照列表中看到它。
從 Longhorn UI,可以安排周期性快照和備份。
要設(shè)置時(shí)間表(schedule),您將轉(zhuǎn)到 Longhorn 中的卷詳細(xì)信息視圖。然后你將設(shè)置:
然后 Longhorn 會(huì)自動(dòng)為當(dāng)時(shí)的用戶(hù)創(chuàng)建快照或備份,只要該卷附加到一個(gè)節(jié)點(diǎn)。
可以使用 Longhorn UI 或使用 Kubernetes StorageClass 配置周期性快照。
注意:為了避免當(dāng)卷長(zhǎng)時(shí)間沒(méi)有新數(shù)據(jù)時(shí),recurring jobs 可能會(huì)用相同的備份和空快照覆蓋舊的備份/快照的問(wèn)題,Longhorn 執(zhí)行以下操作:
使用 Longhorn UI 設(shè)置周期性快照
可以從卷詳細(xì)信息頁(yè)面配置周期性快照和備份。要導(dǎo)航到此頁(yè)面,請(qǐng)單擊 Volume,,然后單擊卷的名稱(chēng)。
使用 StorageClass 設(shè)置 Recurring Jobs
可以在 StorageClass 的 recurringJobs 參數(shù)中配置計(jì)劃備份和快照。
使用這個(gè) StorageClass 創(chuàng)建的任何未來(lái)卷都將自動(dòng)設(shè)置這些 recurring jobs。
recurringJobs 字段應(yīng)遵循以下 JSON 格式:
- kind: StorageClass
- apiVersion: storage.k8s.io/v1
- metadata:
- name: longhorn
- provisioner: driver.longhorn.io
- parameters:
- numberOfReplicas: "3"
- staleReplicaTimeout: "30"
- fromBackup: ""
- recurringJobs: '[
- {
- "name":"snap",
- "task":"snapshot",
- "cron":"*/1 * * * *",
- "retain":1
- },
- {
- "name":"backup",
- "task":"backup",
- "cron":"*/2 * * * *",
- "retain":1
- }
- ]'
應(yīng)為每個(gè) recurring job 指定以下參數(shù):
Longhorn 提供了 allow-recurring-job-while-volume-detached 設(shè)置,即使卷已分離,您也可以進(jìn)行周期性備份(recurring backup)。您可以在 Longhorn UI 中找到該設(shè)置。
啟用該設(shè)置后,Longhorn 將自動(dòng)附加卷并在需要執(zhí)行周期性快照/備份(recurring snapshot/backup)時(shí)進(jìn)行快照/備份。
請(qǐng)注意,在卷自動(dòng)附加(attached automatically)期間,卷尚未準(zhǔn)備好處理工作負(fù)載。Workload 必須等到 recurring job 完成。
容災(zāi) (DR) 卷是一種特殊卷,主要用于在整個(gè)主集群出現(xiàn)故障時(shí)將數(shù)據(jù)存儲(chǔ)在備份集群中。災(zāi)難恢復(fù)卷用于提高 Longhorn 卷的彈性。
對(duì)于災(zāi)難恢復(fù)卷,Last Backup 表示其原始備份卷的最新備份。
如果代表災(zāi)難卷的圖標(biāo)為灰色,則表示該卷正在恢復(fù) Last Backup,并且該卷無(wú)法激活。如果圖標(biāo)為藍(lán)色,則表示該卷已恢復(fù) Last Backup。
先決條件: 設(shè)置兩個(gè) Kubernetes 集群。它們將被稱(chēng)為集群 A 和集群 B。在兩個(gè)集群上安裝 Longhorn,并在兩個(gè)集群上設(shè)置相同的備份目標(biāo)。
備份目標(biāo)是用于訪(fǎng)問(wèn) Longhorn 中 backupstore 的端點(diǎn)。backupstore 是 NFS 服務(wù)器或 S3 兼容服務(wù)器,用于存儲(chǔ) Longhorn 卷的備份。備份目標(biāo)可以在 Settings/General/BackupTarget 中設(shè)置。
如果您無(wú)權(quán)訪(fǎng)問(wèn) AWS S3 或想先嘗試備份存儲(chǔ),我們還提供了一種使用 MinIO 設(shè)置本地 S3 測(cè)試備份存儲(chǔ)的方法。
Longhorn 還支持通過(guò) Longhorn UI 或 Kubernetes Storage Class 為卷設(shè)置周期性快照/備份(recurring snapshot/backup)作業(yè)。
設(shè)置 AWS S3 備份存儲(chǔ)
在 AWS S3 中創(chuàng)建一個(gè)新存儲(chǔ)桶。
為 Longhorn 設(shè)置權(quán)限。有兩種設(shè)置憑據(jù)的選項(xiàng)。首先,您可以使用 AWS IAM 用戶(hù)的憑證設(shè)置 Kubernetes secret。第二個(gè)是您可以使用第三方應(yīng)用程序通過(guò) annotations 來(lái)管理 Pod 的臨時(shí) AWS IAM 權(quán)限,而不是使用 AWS 憑證進(jìn)行操作。
kube2iam 或 kiam 是一個(gè) Kubernetes 應(yīng)用程序,它允許通過(guò) annotations 而不是操作 AWS 憑證來(lái)管理 Pod 的 AWS IAM 權(quán)限。按照 kube2iam 或 kiam 的 GitHub 存儲(chǔ)庫(kù)中的說(shuō)明將其安裝到 Kubernetes 集群中。
按照指南為 AWS S3 服務(wù)創(chuàng)建新的 AWS IAM 角色,并設(shè)置以下權(quán)限:
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "GrantLonghornBackupstoreAccess0",
- "Effect": "Allow",
- "Action": [
- "s3:PutObject",
- "s3:GetObject",
- "s3:ListBucket",
- "s3:DeleteObject"
- ],
- "Resource": [
- "arn:aws:s3:::
", - "arn:aws:s3:::
/*" - ]
- }
- ]
- }
使用以下信任關(guān)系編輯 AWS IAM 角色:
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Principal": {
- "Service": "ec2.amazonaws.com"
- },
- "Action": "sts:AssumeRole"
- },
- {
- "Effect": "Allow",
- "Principal": {
- "AWS": "arn:aws:iam::
:role/ " - },
- "Action": "sts:AssumeRole"
- }
- ]
- }
在 Longhorn 所在的命名空間(默認(rèn)為 longhorn-system)中創(chuàng)建一個(gè)名稱(chēng)為 aws-secret 的 Kubernetes secret。secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪(fǎng)問(wèn)它:
- kubectl create secret generic
\ - --from-literal=AWS_IAM_ROLE_ARN=
\ - -n longhorn-system
按照指南創(chuàng)建新的 AWS IAM 用戶(hù),并設(shè)置以下權(quán)限。編輯 Resource 部分以使用您的 S3存儲(chǔ)桶名稱(chēng):
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "GrantLonghornBackupstoreAccess0",
- "Effect": "Allow",
- "Action": [
- "s3:PutObject",
- "s3:GetObject",
- "s3:ListBucket",
- "s3:DeleteObject"
- ],
- "Resource": [
- "arn:aws:s3:::
", - "arn:aws:s3:::
/*" - ]
- }
- ]
- }
在放置 Longhorn 的命名空間(默認(rèn)為 longhorn-system)中創(chuàng)建一個(gè)名稱(chēng)為 aws-secret 的 Kubernetes secret。secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪(fǎng)問(wèn)它:
- kubectl create secret generic
\ - --from-literal=AWS_ACCESS_KEY_ID=
\ - --from-literal=AWS_SECRET_ACCESS_KEY=
\ - -n longhorn-system
轉(zhuǎn)到 Longhorn UI。在頂部導(dǎo)航欄中,單擊 Settings。 在 Backup 部分中,將 Backup Target 設(shè)置為:
- s3://
@ /
確保末尾有 /,否則會(huì)報(bào)錯(cuò)??梢允褂米幽夸?前綴):
- s3://
@ /mypath/
還要確保您在 URL 中設(shè)置了 。
例如,對(duì)于 AWS,您可以在:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html 找到區(qū)域代碼(region codes)。
對(duì)于 Google Cloud Storage,您可以在:https://cloud.google.com/storage/docs/locations 找到區(qū)域代碼。
在備份部分將 備份目標(biāo)憑據(jù) Secret(Backup Target Credential Secret) 設(shè)置為:
- aws-secret
這是具有 AWS 憑證或 AWS IAM 角色的 secret 名稱(chēng)。
Result: Longhorn 可以在 S3 中存儲(chǔ)備份。要?jiǎng)?chuàng)建備份,請(qǐng)參閱本節(jié)。
Note: 如果您在代理后面操作 Longhorn 并且您想使用 AWS S3 作為備份存儲(chǔ),您必須在 aws-secret 中提供有關(guān)您的代理的 Longhorn 信息,如下所示:
- kubectl create secret generic
\ - --from-literal=AWS_ACCESS_KEY_ID=
\ - --from-literal=AWS_SECRET_ACCESS_KEY=
\ - --from-literal=HTTP_PROXY=
\ - --from-literal=HTTPS_PROXY=
\ - --from-literal=NO_PROXY=
\ - -n longhorn-system
確保 NO_PROXY 包含不應(yīng)使用代理(proxy)的網(wǎng)絡(luò)地址(network addresses)、網(wǎng)絡(luò)地址范圍和域(network address ranges and domains)。為了讓 Longhorn 運(yùn)行,NO_PROXY 的最低要求值為:
我們?cè)?./deploy/backupstores 中提供了兩個(gè)基于 NFS server 和 MinIO S3 server 的測(cè)試目的備份存儲(chǔ)(backupstore)。
創(chuàng)建 longhorn-system 后,使用以下命令為備份存儲(chǔ)設(shè)置 MinIO S3 服務(wù)器。
- kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/backupstores/minio-backupstore.yaml
轉(zhuǎn)到 Longhorn UI。在頂部導(dǎo)航欄中,單擊 Settings。在 Backup 部分,將 Backup Target 設(shè)置為
- s3://backupbucket@us-east-1/
并將 Backup Target Credential Secret(備份目標(biāo)憑據(jù) Secret) 設(shè)置為:
- minio-secret
minio-secret yaml 如下所示:
- apiVersion: v1
- kind: Secret
- metadata:
- name: minio-secret
- namespace: longhorn-system
- type: Opaque
- data:
- AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 # longhorn-test-access-key
- AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5 # longhorn-test-secret-key
- AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA== # https://minio-service.default:9000
- AWS_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMRENDQWhTZ0F3SUJBZ0lSQU1kbzQycGhUZXlrMTcvYkxyWjVZRHN3RFFZSktvWklodmNOQVFFTEJRQXcKR2pFWU1CWUdBMVVFQ2hNUFRHOXVaMmh2Y200Z0xTQlVaWE4wTUNBWERUSXdNRFF5TnpJek1EQXhNVm9ZRHpJeApNakF3TkRBek1qTXdNREV4V2pBYU1SZ3dGZ1lEVlFRS0V3OU1iMjVuYUc5eWJpQXRJRlJsYzNRd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEWHpVdXJnUFpEZ3pUM0RZdWFlYmdld3Fvd2RlQUQKODRWWWF6ZlN1USs3K21Oa2lpUVBvelVVMmZvUWFGL1BxekJiUW1lZ29hT3l5NVhqM1VFeG1GcmV0eDBaRjVOVgpKTi85ZWFJNWRXRk9teHhpMElPUGI2T0RpbE1qcXVEbUVPSXljdjRTaCsvSWo5Zk1nS0tXUDdJZGxDNUJPeThkCncwOVdkckxxaE9WY3BKamNxYjN6K3hISHd5Q05YeGhoRm9tb2xQVnpJbnlUUEJTZkRuSDBuS0lHUXl2bGhCMGsKVHBHSzYxc2prZnFTK3hpNTlJeHVrbHZIRXNQcjFXblRzYU9oaVh6N3lQSlorcTNBMWZoVzBVa1JaRFlnWnNFbQovZ05KM3JwOFhZdURna2kzZ0UrOElXQWRBWHExeWhqRDdSSkI4VFNJYTV0SGpKUUtqZ0NlSG5HekFnTUJBQUdqCmF6QnBNQTRHQTFVZER3RUIvd1FFQXdJQ3BEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBVEFQQmdOVkhSTUIKQWY4RUJUQURBUUgvTURFR0ExVWRFUVFxTUNpQ0NXeHZZMkZzYUc5emRJSVZiV2x1YVc4dGMyVnlkbWxqWlM1awpaV1poZFd4MGh3Ui9BQUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFDbUZMMzlNSHVZMzFhMTFEajRwMjVjCnFQRUM0RHZJUWozTk9kU0dWMmQrZjZzZ3pGejFXTDhWcnF2QjFCMVM2cjRKYjJQRXVJQkQ4NFlwVXJIT1JNU2MKd3ViTEppSEtEa0Jmb2U5QWI1cC9VakpyS0tuajM0RGx2c1cvR3AwWTZYc1BWaVdpVWorb1JLbUdWSTI0Q0JIdgpnK0JtVzNDeU5RR1RLajk0eE02czNBV2xHRW95YXFXUGU1eHllVWUzZjFBWkY5N3RDaklKUmVWbENtaENGK0JtCmFUY1RSUWN3cVdvQ3AwYmJZcHlERFlwUmxxOEdQbElFOW8yWjZBc05mTHJVcGFtZ3FYMmtYa2gxa3lzSlEralAKelFadHJSMG1tdHVyM0RuRW0yYmk0TktIQVFIcFc5TXUxNkdRakUxTmJYcVF0VEI4OGpLNzZjdEg5MzRDYWw2VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
有關(guān)創(chuàng)建 secret 的更多信息,請(qǐng)參閱 Kubernetes 文檔。 secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪(fǎng)問(wèn)它。
Note: 生成 base64 編碼時(shí)一定要使用 echo -n,否則會(huì)在字符串末尾添加新行,訪(fǎng)問(wèn) S3 時(shí)會(huì)出錯(cuò)。
單擊 UI 中的 Backup 選項(xiàng)卡。它應(yīng)該報(bào)告一個(gè)沒(méi)有任何錯(cuò)誤的空列表。
Result: Longhorn 可以在 S3 中存儲(chǔ)備份。
使用自簽名 SSL 證書(shū)進(jìn)行 S3 通信
如果要使用自簽名 SSL 證書(shū),可以在提供給 Longhorn 的 Kubernetes secret 中指定 AWS_CERT。 請(qǐng)參閱設(shè)置本地測(cè)試備份存儲(chǔ)中的示例。 需要注意的是,證書(shū)需要采用 PEM 格式,并且必須是其自己的 CA。 或者必須包含一個(gè)包含 CA 證書(shū)的證書(shū)鏈。 要包含多個(gè)證書(shū),只需連接不同的證書(shū)(PEM 文件)即可。
為 S3 兼容的備份存儲(chǔ)啟用 virtual-hosted-style 訪(fǎng)問(wèn)
在以下情況下,您可能需要為 S3 兼容的備份存儲(chǔ)啟用這種新的尋址方法
啟用 virtual-hosted-style 訪(fǎng)問(wèn)的方法
將值為 true 的新字段 VIRTUAL_HOSTED_STYLE 添加到您的備份目標(biāo) secret。例如:
- apiVersion: v1
- kind: Secret
- metadata:
- name: s3-compatible-backup-target-secret
- namespace: longhorn-system
- type: Opaque
- data:
- AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5
- AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5
- AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA==
- VIRTUAL_HOSTED_STYLE: dHJ1ZQ== # true
部署/更新(Deploy/update) secret,并在 Settings/General/BackupTargetSecret 中設(shè)置它。
NFS 備份存儲(chǔ)
要將 NFS 服務(wù)器用作備份存儲(chǔ),NFS 服務(wù)器必須支持 NFSv4。
目標(biāo) URL 應(yīng)如下所示:
- nfs://longhorn-test-nfs-svc.default:/opt/backupstore
Result: Longhorn 可以在 NFS 中存儲(chǔ)備份。
Longhorn 中的 Backups 是集群外備份存儲(chǔ)中的對(duì)象??煺盏膫浞荼粡?fù)制到備份存儲(chǔ),訪(fǎng)問(wèn)備份存儲(chǔ)的端點(diǎn)是備份目標(biāo)。
先決條件: 必須設(shè)置備份目標(biāo)。有關(guān)更多信息,請(qǐng)參閱設(shè)置備份目標(biāo)。如果尚未設(shè)置 BackupTarget,則會(huì)出現(xiàn)錯(cuò)誤。
要?jiǎng)?chuàng)建備份,
Result: 備份已創(chuàng)建。要查看它,請(qǐng)單擊頂部導(dǎo)航欄中的 Backup。
Longhorn 可以輕松地將備份恢復(fù)到一個(gè)卷。
還原備份時(shí),默認(rèn)情況下會(huì)創(chuàng)建一個(gè)同名的卷。如果已存在與備份同名的卷,則不會(huì)恢復(fù)備份。
要恢復(fù)備份,
Result: 恢復(fù)的卷在 Volume 頁(yè)面上可用。
Longhorn 支持恢復(fù)備份,該特性的一個(gè)用例是恢復(fù) Kubernetes StatefulSet 中使用的數(shù)據(jù),這需要為備份的每個(gè)副本恢復(fù)一個(gè)卷。
要恢復(fù),請(qǐng)按照以下說(shuō)明操作。下面的示例使用一個(gè) StatefulSet,其中一個(gè)卷附加到每個(gè) Pod 和兩個(gè)副本。
連接到 Web 瀏覽器中的 Longhorn UI 頁(yè)面。在 Backup 選項(xiàng)卡下,選擇 StatefulSet 卷的名稱(chēng)。單擊卷?xiàng)l目的下拉菜單并恢復(fù)它。將卷命名為稍后可以輕松引用的 Persistent Volumes。
| Backup Name | Restored Volume |
|---|---|
| pvc-01a | statefulset-vol-0 |
| pvc-02b | statefulset-vol-1 |
對(duì)需要恢復(fù)的每個(gè)卷重復(fù)此步驟。
例如,如果使用具有名為 pvc-01a 和 pvc-02b 的卷的兩個(gè)副本恢復(fù) StatefulSet,則恢復(fù)可能如下所示:
在 Kubernetes 中,為每個(gè)創(chuàng)建的 Longhorn 卷創(chuàng)建一個(gè) Persistent Volume。將卷命名為稍后可以輕松引用的 Persistent Volume Claims。storage 容量、numberOfReplicas、storageClassName 和 volumeHandle 必須在下面替換。在這個(gè)例子中,我們?cè)?Longhorn 中引用了 statefulset-vol-0 和 statefulset-vol-1,并使用 longhorn 作為我們的 storageClassName。
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: statefulset-vol-0
- spec:
- capacity:
- storage:
# must match size of Longhorn volume - volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Delete
- csi:
- driver: driver.longhorn.io # driver must match this
- fsType: ext4
- volumeAttributes:
- numberOfReplicas:
# must match Longhorn volume value - staleReplicaTimeout: '30' # in minutes
- volumeHandle: statefulset-vol-0 # must match volume name from Longhorn
- storageClassName: longhorn # must be same name that we will use later
- ---
- apiVersion: v1
- kind: PersistentVolume
- metadata:
- name: statefulset-vol-1
- spec:
- capacity:
- storage:
# must match size of Longhorn volume - volumeMode: Filesystem
- accessModes:
- - ReadWriteOnce
- persistentVolumeReclaimPolicy: Delete
- csi:
- driver: driver.longhorn.io # driver must match this
- fsType: ext4
- volumeAttributes:
- numberOfReplicas:
# must match Longhorn volume value - staleReplicaTimeout: '30'
- volumeHandle: statefulset-vol-1 # must match volume name from Longhorn
- storageClassName: longhorn # must be same name that we will use later
在 namespace 中,將部署 StatefulSet,為每個(gè) Persistent Volume 創(chuàng)建 PersistentVolume Claims。Persistent Volume Claim 的名稱(chēng)必須遵循以下命名方案:
- -
StatefulSet Pod 是零索引(zero-indexed)的。 在這個(gè)例子中,Volume Claim Template 的名字是 data,StatefulSet 的名字是 webapp, 并且有兩個(gè)副本,分別是索引 0 和 1。
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: data-webapp-0
- spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 2Gi # must match size from earlier
- storageClassName: longhorn # must match name from earlier
- volumeName: statefulset-vol-0 # must reference Persistent Volume
- ---
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: data-webapp-1
- spec:
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 2Gi # must match size from earlier
- storageClassName: longhorn # must match name from earlier
- volumeName: statefulset-vol-1 # must reference Persistent Volume
創(chuàng)建 StatefulSet:
- apiVersion: apps/v1beta2
- kind: StatefulSet
- metadata:
- name: webapp # match this with the PersistentVolumeClaim naming scheme
- spec:
- selector:
- matchLabels:
- app: nginx # has to match .spec.template.metadata.labels
- serviceName: "nginx"
- replicas: 2 # by default is 1
- template:
- metadata:
- labels:
- app: nginx # has to match .spec.selector.matchLabels
- spec:
- terminationGracePeriodSeconds: 10
- containers:
- - name: nginx
- image: k8s.gcr.io/nginx-slim:0.8
- ports:
- - containerPort: 80
- name: web
- volumeMounts:
- - name: data
- mountPath: /usr/share/nginx/html
- volumeClaimTemplates:
- - metadata:
- name: data # match this with the PersistentVolumeClaim naming scheme
- spec:
- accessModes: [ "ReadWriteOnce" ]
- storageClassName: longhorn # must match name from earlier
- resources:
- requests:
- storage: 2Gi # must match size from earlier
Result: 現(xiàn)在應(yīng)該可以從 StatefulSet Pods 內(nèi)部訪(fǎng)問(wèn)恢復(fù)的數(shù)據(jù)。
先決條件
CSI 快照支持可用于 Kubernetes 版本 >= 1.17。
Kubernetes 發(fā)行版負(fù)責(zé)部署快照控制器(snapshot controller)以及相關(guān)的自定義資源定義。
有關(guān)更多信息,請(qǐng)參閱 CSI 卷快照。
添加一個(gè)默認(rèn)的 VolumeSnapshotClass
確保 Snapshot Beta CRD 的可用性。然后創(chuàng)建一個(gè)默認(rèn)的 VolumeSnapshotClass。
- kind: VolumeSnapshotClass
- apiVersion: snapshot.storage.k8s.io/v1beta1
- metadata:
- name: longhorn
- driver: driver.longhorn.io
- deletionPolicy: Delete
如果您在 Air Gap 環(huán)境中從以前的 Longhorn 版本進(jìn)行更新
如果您的 Kubernetes 發(fā)行版未捆綁 Snapshot Controller
您可以通過(guò)執(zhí)行以下步驟手動(dòng)安裝這些組件。
請(qǐng)注意,下面提到的 snapshot controller YAML 文件部署到 default 命名空間中。
先決條件
對(duì)于一般用途,請(qǐng)?jiān)诎惭b之前使用適當(dāng)?shù)?namespace 更新 snapshot controller YAML。
例如,在 vanilla Kubernetes 集群上,在發(fā)出 kubectl create 命令之前,將命名空間從 default 更新為 kube-system。
安裝 Snapshot Beta CRDs:
從 https://github.com/kubernetes-csi/external-snapshotter/tree/release-4.0/client/config/crd 下載文件
運(yùn)行 kubectl create -f client/config/crd.
每個(gè)集群執(zhí)行一次。
安裝 Common Snapshot Controller:
從 https://github.com/kubernetes-csi/external-snapshotter/tree/release-4.0/deploy/kubernetes/snapshot-controller 下載文件
將 namespace 更新為適合您環(huán)境的值(例如:kube-system)
運(yùn)行 kubectl create -f deploy/kubernetes/snapshot-controller
每個(gè)集群執(zhí)行一次。
有關(guān)其他信息,請(qǐng)參閱 kubernetes external-snapshotter git repo 中的 Usage 部分。
Longhorn 中的 Backups 是集群外備份存儲(chǔ)(backupstore)中的對(duì)象,訪(fǎng)問(wèn)備份存儲(chǔ)的端點(diǎn)是備份目標(biāo)。
要以編程方式創(chuàng)建 backups,您可以使用通用的 Kubernetes CSI 快照機(jī)制。
先決條件: 需要在您的集群上啟用 CSI snapshot 支持。 如果您的 kubernetes 發(fā)行版沒(méi)有提供 kubernetes snapshot controller 以及快照相關(guān)的自定義資源定義,您需要手動(dòng)部署它們 更多信息,參閱 Enable CSI Snapshot Support
要使用 CSI 機(jī)制創(chuàng)建備份,請(qǐng)通過(guò) kubectl 創(chuàng)建一個(gè) Kubernetes VolumeSnapshot 對(duì)象。
Result: 已創(chuàng)建備份。VolumeSnapshot 對(duì)象的創(chuàng)建導(dǎo)致了 VolumeSnapshotContent Kubernetes 對(duì)象的創(chuàng)建。
VolumeSnapshotContent 是指其 VolumeSnapshotContent.snapshotHandle 字段中名為 bs://backup-volume/backup-name 的 Longhorn backup。
當(dāng)使用 kubectl 創(chuàng)建 VolumeSnapshot 對(duì)象時(shí),VolumeSnapshot.uuid 字段用于標(biāo)識(shí) Longhorn snapshot 和關(guān)聯(lián)的 VolumeSnapshotContent 對(duì)象。
這將創(chuàng)建一個(gè)名為 snapshot-uuid 的新 Longhorn snapshot。
然后啟動(dòng)該 snapshot 的 backup,并返回 CSI request。
然后創(chuàng)建一個(gè)名為 snapcontent-uuid 的 VolumeSnapshotContent 對(duì)象。
CSI snapshotter sidecar 定期查詢(xún) Longhorn CSI 插件以評(píng)估備份狀態(tài)(backup status)。
備份完成后,VolumeSnapshotContent.readyToUse 標(biāo)志設(shè)置為 true。
要查看備份,請(qǐng)單擊頂部導(dǎo)航欄中的 Backup 并導(dǎo)航到 VolumeSnapshotContent.snapshotHandle 中提到的備份卷(backup-volume)。
VolumeSnapshot 示例
下面是一個(gè)示例 VolumeSnapshot 對(duì)象。source 需要指向應(yīng)為其創(chuàng)建備份的 Longhorn volume 的 PVC。
volumeSnapshotClassName 字段指向一個(gè) VolumeSnapshotClass。
我們創(chuàng)建了一個(gè)名為 longhorn 的默認(rèn)類(lèi),它使用 Delete 作為它的 deletionPolicy。
- apiVersion: snapshot.storage.k8s.io/v1beta1
- kind: VolumeSnapshot
- metadata:
- name: test-snapshot-pvc
- spec:
- volumeSnapshotClassName: longhorn
- source:
- persistentVolumeClaimName: test-vol
如果您希望在刪除 VolumeSnapshot 時(shí)保留卷的關(guān)聯(lián)備份,請(qǐng)創(chuàng)建一個(gè)新的 VolumeSnapshotClass,并將 Retain 設(shè)置為 deletionPolicy。
有關(guān)快照類(lèi)的更多信息,請(qǐng)參閱 VolumeSnapshotClasses 的 kubernetes 文檔。
Longhorn 可以輕松地將備份恢復(fù)到一個(gè)卷。
要以編程方式恢復(fù)備份,您可以使用通用的 kubernetes csi 快照機(jī)制。
先決條件
需要在您的集群上啟用 CSI 快照支持。
如果您的 Kubernetes 發(fā)行版未提供 Kubernetes snapshot controller 以及與快照相關(guān)的自定義資源定義,則您需要手動(dòng)部署它們。
創(chuàng)建一個(gè) PersistentVolumeClaim 對(duì)象,其中 dataSource 字段指向現(xiàn)有的 VolumeSnapshot 對(duì)象。
csi-provisioner 將獲取它并指示 Longhorn CSI driver 使用關(guān)聯(lián)備份(associated backup)中的數(shù)據(jù)來(lái)配置新卷。
您可以使用相同的機(jī)制來(lái)恢復(fù)尚未通過(guò) CSI 機(jī)制創(chuàng)建的 Longhorn 備份。
下面是一個(gè) PersistentVolumeClaim 示例。 dataSource 字段需要指向現(xiàn)有的 VolumeSnapshot 對(duì)象。
- apiVersion: v1
- kind: PersistentVolumeClaim
- metadata:
- name: test-restore-snapshot-pvc
- spec:
- storageClassName: longhorn
- dataSource:
- name: test-snapshot-pvc
- kind: VolumeSnapshot
- apiGroup: snapshot.storage.k8s.io
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 2Gi
要恢復(fù)未通過(guò) CSI 機(jī)制創(chuàng)建的 Longhorn 備份,您必須首先手動(dòng)為備份創(chuàng)建 VolumeSnapshot 和 VolumeSnapshotContent 對(duì)象。
創(chuàng)建一個(gè) VolumeSnapshotContent 對(duì)象,并將 snapshotHandle 字段設(shè)置為 bs://backup-volume/backup-name。
backup-volume 和 backup-name 值可以從 Longhorn UI 的 Backup 頁(yè)面檢索。
- apiVersion: snapshot.storage.k8s.io/v1beta1
- kind: VolumeSnapshotContent
- metadata:
- name: test-existing-backup
- spec:
- volumeSnapshotClassName: longhorn
- driver: driver.longhorn.io
- deletionPolicy: Delete
- source:
- # NOTE: change this to point to an existing backup on the backupstore
- snapshotHandle: bs://test-vol/backup-625159fb469e492e
- volumeSnapshotRef:
- name: test-snapshot-existing-backup
- namespace: default
創(chuàng)建關(guān)聯(lián)的 VolumeSnapshot 對(duì)象,并將 name 字段設(shè)置為 test-snapshot-existing-backup,其中 source 字段通過(guò) volumeSnapshotContentName 字段引用 VolumeSnapshotContent 對(duì)象。
這與創(chuàng)建 backup 不同,在這種情況下,source 字段通過(guò) persistentVolumeClaimName 字段引用 PerstistentVolumeClaim。
只能為 VolumeSnapshot 對(duì)象設(shè)置一種類(lèi)型的引用。
- apiVersion: snapshot.storage.k8s.io/v1beta1
- kind: VolumeSnapshot
- metadata:
- name: test-snapshot-existing-backup
- spec:
- volumeSnapshotClassName: longhorn
- source:
- volumeSnapshotContentName: test-existing-backup
現(xiàn)在您可以創(chuàng)建一個(gè)引用新創(chuàng)建的 VolumeSnapshot 對(duì)象的 PerstistentVolumeClaim 對(duì)象。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流