精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Longhorn,企業(yè)級云原生容器分布式存儲之備份與恢復(fù)

存儲 存儲軟件 云原生 分布式
Longhorn 提供了 allow-recurring-job-while-volume-detached 設(shè)置,即使卷已分離,您也可以進(jìn)行周期性備份(recurring backup)。您可以在 Longhorn UI 中找到該設(shè)置。

[[419258]]

目錄

  • 創(chuàng)建一個快照
  • 周期性(Recurring)快照和備份
    • 使用 Longhorn UI 設(shè)置周期性快照
    • 使用 StorageClass 設(shè)置 Recurring Jobs
    • 分離卷時(shí)允許 Recurring Job
  • 容災(zāi)卷
    • 創(chuàng)建容災(zāi)(DR)卷
  • 設(shè)置備份目標(biāo)
    • 設(shè)置 AWS S3 備份存儲
    • 設(shè)置本地測試備份存儲
    • 使用自簽名 SSL 證書進(jìn)行 S3 通信
    • 為 S3 兼容的備份存儲啟用 virtual-hosted-style 訪問
    • NFS 備份存儲
  • 創(chuàng)建備份
  • 從備份恢復(fù)
  • 為 Kubernetes StatefulSets 恢復(fù)卷
  • 在集群上啟用 CSI 快照支持
    • 添加一個默認(rèn)的 VolumeSnapshotClass
    • 如果您在 Air Gap 環(huán)境中從以前的 Longhorn 版本進(jìn)行更新
    • 如果您的 Kubernetes 發(fā)行版未捆綁 Snapshot Controller
  • 通過 CSI 創(chuàng)建備份
  • 通過 CSI Mechanism 創(chuàng)建備份
    • CSI Mechanism 工作原理
    • 查看備份
    • VolumeSnapshot 示例
  • 通過 CSI 恢復(fù)備份
  • 通過 VolumeSnapshot 對象恢復(fù)備份
    • 還原沒有關(guān)聯(lián) VolumeSnapshot 的備份

創(chuàng)建一個快照

snapshot 是 Kubernetes Volume 在任何給定時(shí)間點(diǎn)的狀態(tài)。

要創(chuàng)建現(xiàn)有集群的快照,

  • 在 Longhorn UI 的頂部導(dǎo)航欄中,單擊 Volume。
  • 單擊要為其創(chuàng)建快照的卷的名稱。這會導(dǎo)致卷詳細(xì)信息頁面。
  • 單擊 Take Snapshot 按鈕。

創(chuàng)建快照后,您將在卷頭(Volume Head)之前的卷的快照列表中看到它。

周期性快照和備份

從 Longhorn UI,可以安排周期性快照和備份。

要設(shè)置時(shí)間表(schedule),您將轉(zhuǎn)到 Longhorn 中的卷詳細(xì)信息視圖。然后你將設(shè)置:

  • schedule 類型,備份(backup)或快照(snapshot)
  • 將創(chuàng)建備份或快照的時(shí)間,以 CRON expression 的形式
  • 要保留的備份或快照的數(shù)量
  • 應(yīng)應(yīng)用于備份或快照的任何標(biāo)簽(Any labels)

然后 Longhorn 會自動為當(dāng)時(shí)的用戶創(chuàng)建快照或備份,只要該卷附加到一個節(jié)點(diǎn)。

可以使用 Longhorn UI 或使用 Kubernetes StorageClass 配置周期性快照。

注意:為了避免當(dāng)卷長時(shí)間沒有新數(shù)據(jù)時(shí),recurring jobs 可能會用相同的備份和空快照覆蓋舊的備份/快照的問題,Longhorn 執(zhí)行以下操作:

  1. Recurring backup job 僅在自上次備份以來卷有新數(shù)據(jù)時(shí)才進(jìn)行新備份。
  2. Recurring snapshot job 僅在卷頭(volume head)中有新數(shù)據(jù)(實(shí)時(shí)數(shù)據(jù))時(shí)才拍攝新快照。

使用 Longhorn UI 設(shè)置周期性快照

可以從卷詳細(xì)信息頁面配置周期性快照和備份。要導(dǎo)航到此頁面,請單擊 Volume,,然后單擊卷的名稱。

使用 StorageClass 設(shè)置 Recurring Jobs

可以在 StorageClass 的 recurringJobs 參數(shù)中配置計(jì)劃備份和快照。

使用這個 StorageClass 創(chuàng)建的任何未來卷都將自動設(shè)置這些 recurring jobs。

recurringJobs 字段應(yīng)遵循以下 JSON 格式:

  1. kind: StorageClass 
  2.     apiVersion: storage.k8s.io/v1 
  3.     metadata: 
  4.       name: longhorn 
  5.     provisioner: driver.longhorn.io 
  6.     parameters: 
  7.       numberOfReplicas: "3" 
  8.       staleReplicaTimeout: "30" 
  9.       fromBackup: "" 
  10.       recurringJobs: '[ 
  11.         { 
  12.           "name":"snap"
  13.           "task":"snapshot"
  14.           "cron":"*/1 * * * *"
  15.           "retain":1 
  16.         }, 
  17.         { 
  18.           "name":"backup"
  19.           "task":"backup"
  20.           "cron":"*/2 * * * *"
  21.           "retain":1 
  22.         } 
  23.       ]' 

應(yīng)為每個 recurring job 指定以下參數(shù):

  1. name:一項(xiàng) job 的名稱。不要在一個 recurringJobs 中使用重復(fù)的名稱。 并且 name 的長度不能超過 8 個字符。
  2. task:一項(xiàng) job 的類型。它僅支持 snapshot(定期創(chuàng)建快照)或backup(定期創(chuàng)建快照然后進(jìn)行備份)。
  3. cron:Cron 表達(dá)式。它告訴一項(xiàng) job 的執(zhí)行時(shí)間。
  4. retain:Longhorn 將為一項(xiàng) job 保留多少快照/備份(snapshots/backups)。應(yīng)該不少于 1。

分離卷時(shí)允許 Recurring Job

Longhorn 提供了 allow-recurring-job-while-volume-detached 設(shè)置,即使卷已分離,您也可以進(jìn)行周期性備份(recurring backup)。您可以在 Longhorn UI 中找到該設(shè)置。

啟用該設(shè)置后,Longhorn 將自動附加卷并在需要執(zhí)行周期性快照/備份(recurring snapshot/backup)時(shí)進(jìn)行快照/備份。

請注意,在卷自動附加(attached automatically)期間,卷尚未準(zhǔn)備好處理工作負(fù)載。Workload 必須等到 recurring job 完成。

容災(zāi)卷

容災(zāi) (DR) 卷是一種特殊卷,主要用于在整個主集群出現(xiàn)故障時(shí)將數(shù)據(jù)存儲在備份集群中。災(zāi)難恢復(fù)卷用于提高 Longhorn 卷的彈性。

對于災(zāi)難恢復(fù)卷,Last Backup 表示其原始備份卷的最新備份。

如果代表災(zāi)難卷的圖標(biāo)為灰色,則表示該卷正在恢復(fù) Last Backup,并且該卷無法激活。如果圖標(biāo)為藍(lán)色,則表示該卷已恢復(fù) Last Backup。

創(chuàng)建容災(zāi)(DR)卷

先決條件: 設(shè)置兩個 Kubernetes 集群。它們將被稱為集群 A 和集群 B。在兩個集群上安裝 Longhorn,并在兩個集群上設(shè)置相同的備份目標(biāo)。

  1. 在集群 A 中,確保原始卷 X 已創(chuàng)建備份或已安排 recurring backups。
  2. 在集群 B 的備份頁面,選擇備份卷 X,然后創(chuàng)建容災(zāi)卷 Y。強(qiáng)烈建議使用備份卷名作為容災(zāi)卷名。
  3. Longhorn 會自動將 DR 卷 Y 附加到隨機(jī)節(jié)點(diǎn)。然后 Longhorn 將開始輪詢卷 X 的最后一次備份,并將其增量恢復(fù)到卷 Y。

設(shè)置備份目標(biāo)

備份目標(biāo)是用于訪問 Longhorn 中 backupstore 的端點(diǎn)。backupstore 是 NFS 服務(wù)器或 S3 兼容服務(wù)器,用于存儲 Longhorn 卷的備份。備份目標(biāo)可以在 Settings/General/BackupTarget 中設(shè)置。

如果您無權(quán)訪問 AWS S3 或想先嘗試備份存儲,我們還提供了一種使用 MinIO 設(shè)置本地 S3 測試備份存儲的方法。

Longhorn 還支持通過 Longhorn UI 或 Kubernetes Storage Class 為卷設(shè)置周期性快照/備份(recurring snapshot/backup)作業(yè)。

設(shè)置 AWS S3 備份存儲

在 AWS S3 中創(chuàng)建一個新存儲桶。

為 Longhorn 設(shè)置權(quán)限。有兩種設(shè)置憑據(jù)的選項(xiàng)。首先,您可以使用 AWS IAM 用戶的憑證設(shè)置 Kubernetes secret。第二個是您可以使用第三方應(yīng)用程序通過 annotations 來管理 Pod 的臨時(shí) AWS IAM 權(quán)限,而不是使用 AWS 憑證進(jìn)行操作。

  • 選項(xiàng) 1:使用 IAM 用戶憑證創(chuàng)建 Kubernetes secret
  • 選項(xiàng) 2:通過 AWS STS AssumeRole(kube2iam 或 kiam)使用 IAM 臨時(shí)憑證設(shè)置權(quán)限

kube2iam 或 kiam 是一個 Kubernetes 應(yīng)用程序,它允許通過 annotations 而不是操作 AWS 憑證來管理 Pod 的 AWS IAM 權(quán)限。按照 kube2iam 或 kiam 的 GitHub 存儲庫中的說明將其安裝到 Kubernetes 集群中。

按照指南為 AWS S3 服務(wù)創(chuàng)建新的 AWS IAM 角色,并設(shè)置以下權(quán)限:

  1.   "Version""2012-10-17"
  2.   "Statement": [ 
  3.     { 
  4.       "Sid""GrantLonghornBackupstoreAccess0"
  5.       "Effect""Allow"
  6.       "Action": [ 
  7.         "s3:PutObject"
  8.         "s3:GetObject"
  9.         "s3:ListBucket"
  10.         "s3:DeleteObject" 
  11.       ], 
  12.       "Resource": [ 
  13.         "arn:aws:s3:::<your-bucket-name>"
  14.         "arn:aws:s3:::<your-bucket-name>/*" 
  15.       ] 
  16.     } 
  17.   ] 

使用以下信任關(guān)系編輯 AWS IAM 角色:

  1.   "Version""2012-10-17"
  2.   "Statement": [ 
  3.     { 
  4.       "Effect""Allow"
  5.       "Principal": { 
  6.           "Service""ec2.amazonaws.com" 
  7.       }, 
  8.       "Action""sts:AssumeRole" 
  9.     }, 
  10.     { 
  11.       "Effect""Allow"
  12.       "Principal": { 
  13.         "AWS""arn:aws:iam::<AWS_ACCOUNT_ID>:role/<AWS_EC2_NODE_INSTANCE_ROLE>" 
  14.       }, 
  15.       "Action""sts:AssumeRole" 
  16.     } 
  17.   ] 

在 Longhorn 所在的命名空間(默認(rèn)為 longhorn-system)中創(chuàng)建一個名稱為 aws-secret 的 Kubernetes secret。secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪問它:

  1. kubectl create secret generic <aws-secret> \ 
  2.     --from-literal=AWS_IAM_ROLE_ARN=<your-aws-iam-role-arn> \ 
  3.     -n longhorn-system 

按照指南創(chuàng)建新的 AWS IAM 用戶,并設(shè)置以下權(quán)限。編輯 Resource 部分以使用您的 S3存儲桶名稱:

  1.   "Version""2012-10-17"
  2.   "Statement": [ 
  3.     { 
  4.       "Sid""GrantLonghornBackupstoreAccess0"
  5.       "Effect""Allow"
  6.       "Action": [ 
  7.         "s3:PutObject"
  8.         "s3:GetObject"
  9.         "s3:ListBucket"
  10.         "s3:DeleteObject" 
  11.       ], 
  12.       "Resource": [ 
  13.         "arn:aws:s3:::<your-bucket-name>"
  14.         "arn:aws:s3:::<your-bucket-name>/*" 
  15.       ] 
  16.     } 
  17.   ] 

在放置 Longhorn 的命名空間(默認(rèn)為 longhorn-system)中創(chuàng)建一個名稱為 aws-secret 的 Kubernetes secret。secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪問它:

  1. kubectl create secret generic <aws-secret> \ 
  2.     --from-literal=AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \ 
  3.     --from-literal=AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \ 
  4.     -n longhorn-system 

轉(zhuǎn)到 Longhorn UI。在頂部導(dǎo)航欄中,單擊 Settings。 在 Backup 部分中,將 Backup Target 設(shè)置為:

  1. s3://<your-bucket-name>@<your-aws-region>/ 

確保末尾有 /,否則會報(bào)錯。可以使用子目錄(前綴):

  1. s3://<your-bucket-name>@<your-aws-region>/mypath/ 

還要確保您在 URL 中設(shè)置了

例如,對于 AWS,您可以在:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html 找到區(qū)域代碼(region codes)。

對于 Google Cloud Storage,您可以在:https://cloud.google.com/storage/docs/locations 找到區(qū)域代碼。

在備份部分將 備份目標(biāo)憑據(jù) Secret(Backup Target Credential Secret) 設(shè)置為:

  1. aws-secret 

這是具有 AWS 憑證或 AWS IAM 角色的 secret 名稱。

Result: Longhorn 可以在 S3 中存儲備份。要創(chuàng)建備份,請參閱本節(jié)。

Note: 如果您在代理后面操作 Longhorn 并且您想使用 AWS S3 作為備份存儲,您必須在 aws-secret 中提供有關(guān)您的代理的 Longhorn 信息,如下所示:

  1. kubectl create secret generic <aws-secret> \ 
  2.     --from-literal=AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \ 
  3.     --from-literal=AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \ 
  4.     --from-literal=HTTP_PROXY=<your-proxy-ip-and-port> \ 
  5.     --from-literal=HTTPS_PROXY=<your-proxy-ip-and-port> \ 
  6.     --from-literal=NO_PROXY=<excluded-ip-list> \ 
  7.     -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 的最低要求值為:

  • localhost
  • 127.0.0.1
  • 0.0.0.0
  • 10.0.0.0/8 (K8s components' IPs)
  • 192.168.0.0/16 (internal IPs in the cluster)

設(shè)置本地測試備份存儲

我們在 ./deploy/backupstores 中提供了兩個基于 NFS server 和 MinIO S3 server 的測試目的備份存儲(backupstore)。

創(chuàng)建 longhorn-system 后,使用以下命令為備份存儲設(shè)置 MinIO S3 服務(wù)器。

  1. 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è)置為

  1. s3://backupbucket@us-east-1/ 

并將 Backup Target Credential Secret(備份目標(biāo)憑據(jù) Secret) 設(shè)置為:

  1. minio-secret 

minio-secret yaml 如下所示:

  1. apiVersion: v1 
  2. kind: Secret 
  3. metadata: 
  4.   name: minio-secret 
  5.   namespace: longhorn-system 
  6. type: Opaque 
  7. data: 
  8.   AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 # longhorn-test-access-key 
  9.   AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5 # longhorn-test-secret-key 
  10.   AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA== # https://minio-service.default:9000 
  11.   AWS_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMRENDQWhTZ0F3SUJBZ0lSQU1kbzQycGhUZXlrMTcvYkxyWjVZRHN3RFFZSktvWklodmNOQVFFTEJRQXcKR2pFWU1CWUdBMVVFQ2hNUFRHOXVaMmh2Y200Z0xTQlVaWE4wTUNBWERUSXdNRFF5TnpJek1EQXhNVm9ZRHpJeApNakF3TkRBek1qTXdNREV4V2pBYU1SZ3dGZ1lEVlFRS0V3OU1iMjVuYUc5eWJpQXRJRlJsYzNRd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEWHpVdXJnUFpEZ3pUM0RZdWFlYmdld3Fvd2RlQUQKODRWWWF6ZlN1USs3K21Oa2lpUVBvelVVMmZvUWFGL1BxekJiUW1lZ29hT3l5NVhqM1VFeG1GcmV0eDBaRjVOVgpKTi85ZWFJNWRXRk9teHhpMElPUGI2T0RpbE1qcXVEbUVPSXljdjRTaCsvSWo5Zk1nS0tXUDdJZGxDNUJPeThkCncwOVdkckxxaE9WY3BKamNxYjN6K3hISHd5Q05YeGhoRm9tb2xQVnpJbnlUUEJTZkRuSDBuS0lHUXl2bGhCMGsKVHBHSzYxc2prZnFTK3hpNTlJeHVrbHZIRXNQcjFXblRzYU9oaVh6N3lQSlorcTNBMWZoVzBVa1JaRFlnWnNFbQovZ05KM3JwOFhZdURna2kzZ0UrOElXQWRBWHExeWhqRDdSSkI4VFNJYTV0SGpKUUtqZ0NlSG5HekFnTUJBQUdqCmF6QnBNQTRHQTFVZER3RUIvd1FFQXdJQ3BEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBVEFQQmdOVkhSTUIKQWY4RUJUQURBUUgvTURFR0ExVWRFUVFxTUNpQ0NXeHZZMkZzYUc5emRJSVZiV2x1YVc4dGMyVnlkbWxqWlM1awpaV1poZFd4MGh3Ui9BQUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFDbUZMMzlNSHVZMzFhMTFEajRwMjVjCnFQRUM0RHZJUWozTk9kU0dWMmQrZjZzZ3pGejFXTDhWcnF2QjFCMVM2cjRKYjJQRXVJQkQ4NFlwVXJIT1JNU2MKd3ViTEppSEtEa0Jmb2U5QWI1cC9VakpyS0tuajM0RGx2c1cvR3AwWTZYc1BWaVdpVWorb1JLbUdWSTI0Q0JIdgpnK0JtVzNDeU5RR1RLajk0eE02czNBV2xHRW95YXFXUGU1eHllVWUzZjFBWkY5N3RDaklKUmVWbENtaENGK0JtCmFUY1RSUWN3cVdvQ3AwYmJZcHlERFlwUmxxOEdQbElFOW8yWjZBc05mTHJVcGFtZ3FYMmtYa2gxa3lzSlEralAKelFadHJSMG1tdHVyM0RuRW0yYmk0TktIQVFIcFc5TXUxNkdRakUxTmJYcVF0VEI4OGpLNzZjdEg5MzRDYWw2VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== 

有關(guān)創(chuàng)建 secret 的更多信息,請參閱 Kubernetes 文檔。 secret 必須在 longhorn-system 命名空間中創(chuàng)建,以便 Longhorn 訪問它。

Note: 生成 base64 編碼時(shí)一定要使用 echo -n,否則會在字符串末尾添加新行,訪問 S3 時(shí)會出錯。

單擊 UI 中的 Backup 選項(xiàng)卡。它應(yīng)該報(bào)告一個沒有任何錯誤的空列表。

Result: Longhorn 可以在 S3 中存儲備份。

使用自簽名 SSL 證書進(jìn)行 S3 通信

如果要使用自簽名 SSL 證書,可以在提供給 Longhorn 的 Kubernetes secret 中指定 AWS_CERT。 請參閱設(shè)置本地測試備份存儲中的示例。 需要注意的是,證書需要采用 PEM 格式,并且必須是其自己的 CA。 或者必須包含一個包含 CA 證書的證書鏈。 要包含多個證書,只需連接不同的證書(PEM 文件)即可。

為 S3 兼容的備份存儲啟用 virtual-hosted-style 訪問

在以下情況下,您可能需要為 S3 兼容的備份存儲啟用這種新的尋址方法

  1. 您想立即切換到這種新的訪問方式,這樣您就無需擔(dān)心 Amazon S3 路徑棄用計(jì)劃;
  2. 您使用的 backupstore 只支持 virtual-hosted-style 的訪問,例如:Alibaba Cloud(Aliyun) OSS;
  3. 您已配置 MINIO_DOMAIN 環(huán)境變量以啟用 MinIO 服務(wù)器的 virtual-host-style 請求;
  4. 這個錯誤 ...... error: AWS Error: SecondLevelDomainForbidden Please use virtual hosted style to access. ..... 被觸發(fā)。

啟用 virtual-hosted-style 訪問的方法

將值為 true 的新字段 VIRTUAL_HOSTED_STYLE 添加到您的備份目標(biāo) secret。例如:

  1. apiVersion: v1 
  2. kind: Secret 
  3. metadata: 
  4.   name: s3-compatible-backup-target-secret 
  5.   namespace: longhorn-system 
  6. type: Opaque 
  7. data: 
  8.   AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 
  9.   AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5 
  10.   AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA== 
  11.   VIRTUAL_HOSTED_STYLE: dHJ1ZQ== # true 

部署/更新(Deploy/update) secret,并在 Settings/General/BackupTargetSecret 中設(shè)置它。

NFS 備份存儲

要將 NFS 服務(wù)器用作備份存儲,NFS 服務(wù)器必須支持 NFSv4。

目標(biāo) URL 應(yīng)如下所示:

  1. nfs://longhorn-test-nfs-svc.default:/opt/backupstore 

Result: Longhorn 可以在 NFS 中存儲備份。

創(chuàng)建備份

Longhorn 中的 Backups 是集群外備份存儲中的對象。快照的備份被復(fù)制到備份存儲,訪問備份存儲的端點(diǎn)是備份目標(biāo)。

先決條件: 必須設(shè)置備份目標(biāo)。有關(guān)更多信息,請參閱設(shè)置備份目標(biāo)。如果尚未設(shè)置 BackupTarget,則會出現(xiàn)錯誤。

要創(chuàng)建備份,

  1. 導(dǎo)航到 Volume 菜單。
  2. 選擇要備份的卷。
  3. 單擊 Create Backup。
  4. 添加適當(dāng)?shù)臉?biāo)簽并單擊 OK。

Result: 備份已創(chuàng)建。要查看它,請單擊頂部導(dǎo)航欄中的 Backup。

從備份恢復(fù)

Longhorn 可以輕松地將備份恢復(fù)到一個卷。

還原備份時(shí),默認(rèn)情況下會創(chuàng)建一個同名的卷。如果已存在與備份同名的卷,則不會恢復(fù)備份。

要恢復(fù)備份,

  1. 導(dǎo)航到 Backup 菜單
  2. 選擇您要恢復(fù)的備份,然后單擊 Restore Latest Backup
  3. 在 Name 字段中,選擇要恢復(fù)的卷
  4. 單擊 OK

Result: 恢復(fù)的卷在 Volume 頁面上可用。

為 Kubernetes StatefulSets 恢復(fù)卷

Longhorn 支持恢復(fù)備份,該特性的一個用例是恢復(fù) Kubernetes StatefulSet 中使用的數(shù)據(jù),這需要為備份的每個副本恢復(fù)一個卷。

要恢復(fù),請按照以下說明操作。下面的示例使用一個 StatefulSet,其中一個卷附加到每個 Pod 和兩個副本。

連接到 Web 瀏覽器中的 Longhorn UI 頁面。在 Backup 選項(xiàng)卡下,選擇 StatefulSet 卷的名稱。單擊卷?xiàng)l目的下拉菜單并恢復(fù)它。將卷命名為稍后可以輕松引用的 Persistent Volumes。

Backup Name Restored Volume
pvc-01a statefulset-vol-0
pvc-02b statefulset-vol-1

對需要恢復(fù)的每個卷重復(fù)此步驟。

例如,如果使用具有名為 pvc-01a 和 pvc-02b 的卷的兩個副本恢復(fù) StatefulSet,則恢復(fù)可能如下所示:

在 Kubernetes 中,為每個創(chuàng)建的 Longhorn 卷創(chuàng)建一個 Persistent Volume。將卷命名為稍后可以輕松引用的 Persistent Volume Claims。storage 容量、numberOfReplicas、storageClassName 和 volumeHandle 必須在下面替換。在這個例子中,我們在 Longhorn 中引用了 statefulset-vol-0 和 statefulset-vol-1,并使用 longhorn 作為我們的 storageClassName。

  1. apiVersion: v1 
  2. kind: PersistentVolume 
  3. metadata: 
  4.   name: statefulset-vol-0 
  5. spec: 
  6.   capacity: 
  7.     storage: <size> # must match size of Longhorn volume 
  8.   volumeMode: Filesystem 
  9.   accessModes: 
  10.     - ReadWriteOnce 
  11.   persistentVolumeReclaimPolicy: Delete 
  12.   csi: 
  13.     driver: driver.longhorn.io # driver must match this 
  14.     fsType: ext4 
  15.     volumeAttributes: 
  16.       numberOfReplicas: <replicas> # must match Longhorn volume value 
  17.       staleReplicaTimeout: '30' # in minutes 
  18.     volumeHandle: statefulset-vol-0 # must match volume name from Longhorn 
  19.   storageClassName: longhorn # must be same name that we will use later 
  20. --- 
  21. apiVersion: v1 
  22. kind: PersistentVolume 
  23. metadata: 
  24.   name: statefulset-vol-1 
  25. spec: 
  26.   capacity: 
  27.     storage: <size>  # must match size of Longhorn volume 
  28.   volumeMode: Filesystem 
  29.   accessModes: 
  30.     - ReadWriteOnce 
  31.   persistentVolumeReclaimPolicy: Delete 
  32.   csi: 
  33.     driver: driver.longhorn.io # driver must match this 
  34.     fsType: ext4 
  35.     volumeAttributes: 
  36.       numberOfReplicas: <replicas> # must match Longhorn volume value 
  37.       staleReplicaTimeout: '30' 
  38.     volumeHandle: statefulset-vol-1 # must match volume name from Longhorn 
  39.   storageClassName: longhorn # must be same name that we will use later 

在 namespace 中,將部署 StatefulSet,為每個 Persistent Volume 創(chuàng)建 PersistentVolume Claims。Persistent Volume Claim 的名稱必須遵循以下命名方案:

  1. <name of Volume Claim Template>-<name of StatefulSet>-<index

StatefulSet Pod 是零索引(zero-indexed)的。 在這個例子中,Volume Claim Template 的名字是 data,StatefulSet 的名字是 webapp, 并且有兩個副本,分別是索引 0 和 1。

  1. apiVersion: v1 
  2. kind: PersistentVolumeClaim 
  3. metadata: 
  4.   name: data-webapp-0 
  5. spec: 
  6.   accessModes: 
  7.   - ReadWriteOnce 
  8.   resources: 
  9.     requests: 
  10.       storage: 2Gi # must match size from earlier 
  11. storageClassName: longhorn # must match name from earlier 
  12. volumeName: statefulset-vol-0 # must reference Persistent Volume 
  13. --- 
  14. apiVersion: v1 
  15. kind: PersistentVolumeClaim 
  16. metadata: 
  17.   name: data-webapp-1 
  18. spec: 
  19.   accessModes: 
  20.   - ReadWriteOnce 
  21.   resources: 
  22.     requests: 
  23.       storage: 2Gi # must match size from earlier 
  24. storageClassName: longhorn # must match name from earlier 
  25. volumeName: statefulset-vol-1 # must reference Persistent Volume 

創(chuàng)建 StatefulSet:

  1. apiVersion: apps/v1beta2 
  2. kind: StatefulSet 
  3. metadata: 
  4.   name: webapp # match this with the PersistentVolumeClaim naming scheme 
  5. spec: 
  6.   selector: 
  7.     matchLabels: 
  8.       app: nginx # has to match .spec.template.metadata.labels 
  9.   serviceName: "nginx" 
  10.   replicas: 2 # by default is 1 
  11.   template: 
  12.     metadata: 
  13.       labels: 
  14.         app: nginx # has to match .spec.selector.matchLabels 
  15.     spec: 
  16.       terminationGracePeriodSeconds: 10 
  17.       containers: 
  18.       - name: nginx 
  19.         image: k8s.gcr.io/nginx-slim:0.8 
  20.         ports: 
  21.         - containerPort: 80 
  22.           name: web 
  23.         volumeMounts: 
  24.         - name: data 
  25.           mountPath: /usr/share/nginx/html 
  26.   volumeClaimTemplates: 
  27.   - metadata: 
  28.       name: data # match this with the PersistentVolumeClaim naming scheme 
  29.     spec: 
  30.       accessModes: [ "ReadWriteOnce" ] 
  31.       storageClassName: longhorn # must match name from earlier 
  32.       resources: 
  33.         requests: 
  34.           storage: 2Gi # must match size from earlier 

Result: 現(xiàn)在應(yīng)該可以從 StatefulSet Pods 內(nèi)部訪問恢復(fù)的數(shù)據(jù)。

在集群上啟用 CSI 快照支持

先決條件

CSI 快照支持可用于 Kubernetes 版本 >= 1.17。

Kubernetes 發(fā)行版負(fù)責(zé)部署快照控制器(snapshot controller)以及相關(guān)的自定義資源定義。

有關(guān)更多信息,請參閱 CSI 卷快照。

添加一個默認(rèn)的 VolumeSnapshotClass

確保 Snapshot Beta CRD 的可用性。然后創(chuàng)建一個默認(rèn)的 VolumeSnapshotClass。

  1. kind: VolumeSnapshotClass 
  2. apiVersion: snapshot.storage.k8s.io/v1beta1 
  3. metadata: 
  4.   name: longhorn 
  5. driver: driver.longhorn.io 
  6. deletionPolicy: Delete 

如果您在 Air Gap 環(huán)境中從以前的 Longhorn 版本進(jìn)行更新

  • 更新 csi-provisioner 鏡像到 longhornio/csi-provisioner:v1.6.0
  • 更新 csi-snapshotter 鏡像到 longhornio/csi-snapshotter:v2.1.1

如果您的 Kubernetes 發(fā)行版未捆綁 Snapshot Controller

您可以通過執(zhí)行以下步驟手動安裝這些組件。

請注意,下面提到的 snapshot controller YAML 文件部署到 default 命名空間中。

先決條件

對于一般用途,請?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.

每個集群執(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

每個集群執(zhí)行一次。

有關(guān)其他信息,請參閱 kubernetes external-snapshotter git repo 中的 Usage 部分。

通過 CSI 創(chuàng)建備份

Longhorn 中的 Backups 是集群外備份存儲(backupstore)中的對象,訪問備份存儲的端點(diǎn)是備份目標(biāo)。

要以編程方式創(chuàng)建 backups,您可以使用通用的 Kubernetes CSI 快照機(jī)制。

先決條件: 需要在您的集群上啟用 CSI snapshot 支持。 如果您的 kubernetes 發(fā)行版沒有提供 kubernetes snapshot controller 以及快照相關(guān)的自定義資源定義,您需要手動部署它們 更多信息,參閱 Enable CSI Snapshot Support

通過 CSI Mechanism 創(chuàng)建備份

要使用 CSI 機(jī)制創(chuàng)建備份,請通過 kubectl 創(chuàng)建一個 Kubernetes VolumeSnapshot 對象。

Result: 已創(chuàng)建備份。VolumeSnapshot 對象的創(chuàng)建導(dǎo)致了 VolumeSnapshotContent Kubernetes 對象的創(chuàng)建。

VolumeSnapshotContent 是指其 VolumeSnapshotContent.snapshotHandle 字段中名為 bs://backup-volume/backup-name 的 Longhorn backup。

CSI Mechanism 工作原理

當(dāng)使用 kubectl 創(chuàng)建 VolumeSnapshot 對象時(shí),VolumeSnapshot.uuid 字段用于標(biāo)識 Longhorn snapshot 和關(guān)聯(lián)的 VolumeSnapshotContent 對象。

這將創(chuàng)建一個名為 snapshot-uuid 的新 Longhorn snapshot。

然后啟動該 snapshot 的 backup,并返回 CSI request。

然后創(chuàng)建一個名為 snapcontent-uuid 的 VolumeSnapshotContent 對象。

CSI snapshotter sidecar 定期查詢 Longhorn CSI 插件以評估備份狀態(tài)(backup status)。

備份完成后,VolumeSnapshotContent.readyToUse 標(biāo)志設(shè)置為 true。

查看備份

要查看備份,請單擊頂部導(dǎo)航欄中的 Backup 并導(dǎo)航到 VolumeSnapshotContent.snapshotHandle 中提到的備份卷(backup-volume)。

VolumeSnapshot 示例

下面是一個示例 VolumeSnapshot 對象。source 需要指向應(yīng)為其創(chuàng)建備份的 Longhorn volume 的 PVC。

volumeSnapshotClassName 字段指向一個 VolumeSnapshotClass。

我們創(chuàng)建了一個名為 longhorn 的默認(rèn)類,它使用 Delete 作為它的 deletionPolicy。

  1. apiVersion: snapshot.storage.k8s.io/v1beta1 
  2. kind: VolumeSnapshot 
  3. metadata: 
  4.   name: test-snapshot-pvc 
  5. spec: 
  6.   volumeSnapshotClassName: longhorn 
  7.   source: 
  8.     persistentVolumeClaimName: test-vol 

如果您希望在刪除 VolumeSnapshot 時(shí)保留卷的關(guān)聯(lián)備份,請創(chuàng)建一個新的 VolumeSnapshotClass,并將 Retain 設(shè)置為 deletionPolicy。

有關(guān)快照類的更多信息,請參閱 VolumeSnapshotClasses 的 kubernetes 文檔。

通過 CSI 恢復(fù)備份

Longhorn 可以輕松地將備份恢復(fù)到一個卷。

要以編程方式恢復(fù)備份,您可以使用通用的 kubernetes csi 快照機(jī)制。

先決條件

需要在您的集群上啟用 CSI 快照支持。

如果您的 Kubernetes 發(fā)行版未提供 Kubernetes snapshot controller 以及與快照相關(guān)的自定義資源定義,則您需要手動部署它們。

通過 VolumeSnapshot 對象恢復(fù)備份

創(chuàng)建一個 PersistentVolumeClaim 對象,其中 dataSource 字段指向現(xiàn)有的 VolumeSnapshot 對象。

csi-provisioner 將獲取它并指示 Longhorn CSI driver 使用關(guān)聯(lián)備份(associated backup)中的數(shù)據(jù)來配置新卷。

您可以使用相同的機(jī)制來恢復(fù)尚未通過 CSI 機(jī)制創(chuàng)建的 Longhorn 備份。

下面是一個 PersistentVolumeClaim 示例。 dataSource 字段需要指向現(xiàn)有的 VolumeSnapshot 對象。

  1. apiVersion: v1 
  2. kind: PersistentVolumeClaim 
  3. metadata: 
  4.   name: test-restore-snapshot-pvc 
  5. spec: 
  6.   storageClassName: longhorn 
  7.   dataSource: 
  8.     name: test-snapshot-pvc 
  9.     kind: VolumeSnapshot 
  10.     apiGroup: snapshot.storage.k8s.io 
  11.   accessModes: 
  12.     - ReadWriteOnce 
  13.   resources: 
  14.     requests: 
  15.       storage: 2Gi 

還原沒有關(guān)聯(lián) VolumeSnapshot 的備份

要恢復(fù)未通過 CSI 機(jī)制創(chuàng)建的 Longhorn 備份,您必須首先手動為備份創(chuàng)建 VolumeSnapshot 和 VolumeSnapshotContent 對象。

創(chuàng)建一個 VolumeSnapshotContent 對象,并將 snapshotHandle 字段設(shè)置為 bs://backup-volume/backup-name。

backup-volume 和 backup-name 值可以從 Longhorn UI 的 Backup 頁面檢索。

  1. apiVersion: snapshot.storage.k8s.io/v1beta1 
  2. kind: VolumeSnapshotContent 
  3. metadata: 
  4.   name: test-existing-backup 
  5. spec: 
  6.   volumeSnapshotClassName: longhorn 
  7.   driver: driver.longhorn.io 
  8.   deletionPolicy: Delete 
  9.   source: 
  10.     # NOTE: change this to point to an existing backup on the backupstore 
  11.     snapshotHandle: bs://test-vol/backup-625159fb469e492e 
  12.   volumeSnapshotRef: 
  13.     name: test-snapshot-existing-backup 
  14.     namespace: default 

創(chuàng)建關(guān)聯(lián)的 VolumeSnapshot 對象,并將 name 字段設(shè)置為 test-snapshot-existing-backup,其中 source 字段通過 volumeSnapshotContentName 字段引用 VolumeSnapshotContent 對象。

這與創(chuàng)建 backup 不同,在這種情況下,source 字段通過 persistentVolumeClaimName 字段引用 PerstistentVolumeClaim。

只能為 VolumeSnapshot 對象設(shè)置一種類型的引用。

  1. apiVersion: snapshot.storage.k8s.io/v1beta1 
  2. kind: VolumeSnapshot 
  3. metadata: 
  4.   name: test-snapshot-existing-backup 
  5. spec: 
  6.   volumeSnapshotClassName: longhorn 
  7.   source: 
  8.     volumeSnapshotContentName: test-existing-backup 

 

現(xiàn)在您可以創(chuàng)建一個引用新創(chuàng)建的 VolumeSnapshot 對象的 PerstistentVolumeClaim 對象。

 

責(zé)任編輯:武曉燕 來源: 黑客下午茶
相關(guān)推薦

2021-08-24 05:02:34

云原生容器分布式

2021-08-26 00:23:14

分布式存儲高可用

2021-08-28 05:04:19

存儲云原生分布式

2021-08-26 23:54:46

分布式存儲負(fù)載

2021-09-03 05:00:28

分布式存儲云原生

2021-08-29 23:53:32

存儲Air Gap安裝

2021-10-18 23:49:50

云原生分布式存儲

2021-08-18 14:33:53

存儲云原生容器

2021-08-17 00:24:38

塊存儲云原生分布式

2022-02-21 10:17:33

Rancher開源云原生

2021-08-17 12:36:21

Longhorn云原生存儲

2023-09-14 15:38:55

云原生分布式架構(gòu)

2014-03-03 09:23:43

Zabbix分布式系統(tǒng)監(jiān)控

2020-12-16 20:07:18

容器技術(shù)

2009-10-26 14:10:46

分布式設(shè)計(jì)

2025-07-17 00:05:00

MCPAI 技術(shù)Nacos 3.0

2019-01-24 14:49:15

深信服

2022-02-23 21:10:53

LonghornKubernetes快照

2009-08-25 13:25:00

Java企業(yè)級應(yīng)用架構(gòu)分布式結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

免费国产在线精品一区二区三区| 久久久av电影| 日韩毛片在线免费看| 国产小视频在线播放| 蜜桃久久久久久| 欧美日本高清一区| av直播在线观看| 久久91视频| 亚洲国产日产av| 日韩精品一线二线三线| 国产chinasex对白videos麻豆| 国产视频一区在线观看一区免费| 一区二区三区国产在线观看| 三级网站免费看| xxx欧美xxx| 亚洲精品日日夜夜| 欧美少妇一区| 亚洲AV无码国产精品午夜字幕| 国产偷自视频区视频一区二区| 自拍亚洲一区欧美另类| 怡红院一区二区| 欧美a一级片| 欧美视频免费在线观看| 久久观看最新视频| 嫩草研究院在线观看| 国产精品系列在线播放| 国产精品久久久久久久久久小说| 久一区二区三区| 日本在线电影一区二区三区| 亚洲第一偷拍网| 久久6免费视频| 亚洲成人一区在线观看| 精品久久久久久国产| 日本一区二区免费高清视频| 国产系列在线观看| 99国产一区二区三精品乱码| 91沈先生播放一区二区| 艳妇乳肉豪妇荡乳av| 久久激情中文| 97久久国产精品| 久久精品美女视频| 欧美.www| 久久久久北条麻妃免费看| www.99热| 日韩激情一区| 伊人成人开心激情综合网| 欧美 变态 另类 人妖| 成人av影音| 精品日韩在线观看| 色欲无码人妻久久精品| 国产视频一区二区在线播放| 欧美日韩一区二区三区免费看| 国产精品无码av无码| 成人动漫一区| 色婷婷亚洲精品| 情侣黄网站免费看| 中文字幕在线免费观看视频| 亚洲高清一区二区三区| 僵尸世界大战2 在线播放| 亚洲wwwww| 亚洲精品久久久蜜桃| 在线视频一二三区| 粗大黑人巨茎大战欧美成人| 亚洲精品国产第一综合99久久| 艳母动漫在线免费观看| av理论在线观看| 亚洲免费观看高清完整版在线| 欧美少妇一级片| 色在线视频网| 亚洲va在线va天堂| 3751色影院一区二区三区| 国产日韩一区二区在线| 波多视频一区| 欧美日韩一区二区电影| 欧美三级午夜理伦三级富婆| 亚洲久草在线| 日韩午夜小视频| www.超碰97| 黄色不卡一区| 日韩在线播放av| 精品99在线观看| 国产欧美短视频| 国产精品igao视频| 91国偷自产中文字幕久久| 国产乱妇无码大片在线观看| 成人免费观看网站| 亚洲人成色777777精品音频| av一二三不卡影片| 日本视频精品一区| 国产精品久久久久久福利| 亚洲综合图片区| 黄色片久久久久| 二区三区精品| 亚洲精品国产美女| 天堂а√在线中文在线鲁大师| 午夜日韩福利| 国产精品扒开腿做爽爽爽男男 | 欧美伊人久久久久久久久影院| gogogo高清免费观看在线视频| swag国产精品一区二区| 亚洲精品一二区| 99热这里只有精品4| 亚洲毛片一区| 成人妇女免费播放久久久| 好吊视频一二三区| 中文在线免费一区三区高中清不卡| 天堂av免费看| 性欧美gay| 精品少妇一区二区三区在线视频| 少妇人妻好深好紧精品无码| 欧美激情综合| 国产精品美女久久久久久免费| 国产成人a人亚洲精品无码| 久久久综合精品| 激情视频小说图片| 日韩另类视频| 亚洲国产高清自拍| www日韩在线| 爽好久久久欧美精品| 91免费版网站在线观看| 永久免费在线观看视频| 富二代精品短视频| 亚洲av无码成人精品区| 成人av二区| 国模视频一区二区三区| 国产内射老熟女aaaa∵| 国产日产欧产精品推荐色 | 欧美女同一区| 91精品国产色综合久久久蜜香臀| 国产黄色大片免费看| 亚洲激情在线| 1卡2卡3卡精品视频| 亚洲xxxxxx| 欧美在线视频日韩| 亚欧洲乱码视频| 亚洲精品社区| 俄罗斯精品一区二区三区| 欧美激情视频在线播放| 欧美影视一区二区三区| 亚欧洲乱码视频| 欧美一区=区| 久久精品国产第一区二区三区最新章节 | 香港三级韩国三级日本三级| 欧美午夜在线播放| 久久久黄色av| 99久久久国产精品无码免费 | 日韩精品一区二区在线播放| 懂色av中文一区二区三区| 久久久久福利视频| 精品国产乱码久久久久久樱花| x99av成人免费| 亚洲天堂网在线观看视频| 国产精品色呦呦| www.cao超碰| 亚洲色图欧美| 99免费在线视频观看| 污污片在线免费视频| 日韩欧美aaaaaa| 国产一级生活片| av电影天堂一区二区在线 | 交100部在线观看| 亚洲高清在线观看| www.国产高清| 国产亚洲午夜高清国产拍精品 | 亚洲精品av在线播放| 国产第一页在线播放| aa级大片欧美| 欧美精品成人网| 日韩成人精品一区| 91久久国产精品91久久性色| 在线欧美三级| 日韩精品在线免费观看视频| 无码人妻一区二区三区线| 国产亚洲一区二区在线观看| 自拍偷拍一区二区三区四区| 亚洲网色网站| 国产一区二区三区色淫影院| 亚洲最大网站| 日韩在线观看免费| 三级小视频在线观看| 日韩欧美国产网站| 国产午夜精品理论片在线| 国产99久久久久| 一本大道熟女人妻中文字幕在线| 国产日韩欧美一区二区三区| 亚洲一区二区三区四区在线播放| caoporn视频在线| 在线亚洲欧美视频| 国产刺激高潮av| 在线观看一区不卡| 久久综合色综合| 欧美激情中文字幕| 涩视频在线观看| 日本不卡一二三区黄网| 成人精品视频在线播放| 大片网站久久| 国产亚洲自拍偷拍| 国产欧美自拍| 国产91精品久久久久| 在线日本视频| 日韩精品免费观看| 国产sm主人调教女m视频| 精品毛片三在线观看| 登山的目的在线| 久久久久久一二三区| 伊人影院在线观看视频| 日韩成人免费看| 青青青青草视频| 91精品国产91久久综合| 欧美亚洲免费高清在线观看| 一本色道69色精品综合久久| 国产精品美女www爽爽爽视频| 蜜桃视频在线观看播放| 美女少妇精品视频| freemovies性欧美| 精品亚洲一区二区三区在线观看| 国产一区二区在线播放视频| 亚洲午夜久久久久久久久久久| 日本久久久久久久久久| 黄色小说综合网站| 50路60路老熟妇啪啪| 欧美爱爱网站| av激情久久| 成人免费毛片嘿嘿连载视频…| 欧美国产日韩精品| 超碰在线免费公开| 在线观看久久久久久| 亚洲欧美另类一区| 911精品产国品一二三产区| 国产一卡二卡三卡| 午夜国产精品影院在线观看| 顶臀精品视频www| 中文字幕免费观看一区| caopeng视频| www.成人在线| 久久久久中文字幕亚洲精品 | 99re热精品视频| 国产精品香蕉国产| 国产经典三级在线| 欧美黑人狂野猛交老妇| 秋霞午夜在线观看| 亚洲天堂成人在线| 国产女主播在线写真| 日韩成人久久久| 殴美一级特黄aaaaaa| 欧美一区二区观看视频| 国产高清免费在线观看| 欧美精品三级日韩久久| 中文字幕第99页| 日本黄色一区二区| 日日骚av一区二区| 欧美日韩免费在线观看| 日产精品久久久久久久| 偷窥少妇高潮呻吟av久久免费| 久久午夜鲁丝片午夜精品| 亚洲精品久久嫩草网站秘色| 精品一级少妇久久久久久久| 一区二区三区四区五区视频在线观看| 97在线观看免费高| 一区二区三区中文字幕精品精品| 国产老头老太做爰视频| 国产精品色噜噜| 91久久国产综合| 亚洲精品视频在线看| 美女毛片在线观看| 天天射综合影视| 91精品国产综合久久久蜜臀九色| 欧美日韩激情网| 亚洲精品国产欧美在线观看| 欧美三级中文字| 96亚洲精品久久久蜜桃| 在线成人av影院| www香蕉视频| 亚洲高清福利视频| 欧美 日韩 中文字幕| 日韩精品小视频| www.91在线| 日韩在线观看成人| 91福利区在线观看| 欧美中文字幕在线| 91在线成人| 成人黄动漫网站免费| 欧美aaaaaaaa牛牛影院| 日本一区二区三区视频在线观看 | 国产在线一区二区综合免费视频| 国产精品久久久久久9999| 国产精品伊人色| 一本加勒比北条麻妃| 国产拍欧美日韩视频二区| 日本裸体美女视频| 亚洲va天堂va国产va久| av手机天堂网| 日韩免费看网站| 日本免费一区视频| 在线成人激情黄色| 中文国产字幕在线观看| 欧美与黑人午夜性猛交久久久| 成人影院在线免费观看| 福利视频一区二区三区| 老司机精品在线| 伊人久久av导航| 一区二区福利| 国产精品嫩草影院8vv8| 26uuu另类欧美| 欧洲美女女同性互添| 同产精品九九九| 国产黄色一区二区| 国产亚洲美女久久| 男女视频在线| 国产在线视频91| 欧美日韩一本| 18视频在线观看娇喘| 日韩中文字幕区一区有砖一区 | av电影天堂一区二区在线观看| 色屁屁草草影院ccyy.com| 一区二区三区国产豹纹内裤在线 | 国产二区在线播放| 午夜伦理精品一区| 亚洲一区二区小说| 欧美日韩大片一区二区三区| 91久久综合| www.亚洲自拍| 久久久www免费人成精品| 日本一级淫片免费放| 在线播放/欧美激情| 日韩精品视频在线观看一区二区三区| 欧美丰满少妇xxxxx| 国产成人毛片| 蜜桃av久久久亚洲精品| 99视频一区| xxxxwww一片| 亚洲欧美一区二区三区久本道91 | 亚洲国产三级| 任你躁av一区二区三区| 国产精品沙发午睡系列990531| 特级毛片www| 亚洲精品一线二线三线| 老司机av在线免费看| 国产成人精品久久二区二区91| 国产成人夜色高潮福利影视| 男同互操gay射视频在线看| 男女性色大片免费观看一区二区| 在线 丝袜 欧美 日韩 制服| 欧美日韩国产一区二区| 亚洲av无码乱码在线观看性色 | 精品视频一区二区| 国产精品分类| 欧美一级片黄色| 亚洲成人av在线电影| 亚洲国产精品国自产拍久久| 欧美激情在线视频二区| 永久免费精品视频| 日韩a级黄色片| 成人综合婷婷国产精品久久| 九九在线观看视频| 欧美日韩一卡二卡三卡| 毛片在线看网站| 91在线网站视频| 国产精品av一区二区| 中文字幕永久免费| 亚洲一卡二卡三卡四卡| 香蕉视频免费在线看| 97久久精品在线| 婷婷综合一区| 性生交免费视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩电影大片中文字幕| 9lporm自拍视频区在线| 精品国产乱码久久久久软件| 亚洲一区二区动漫| 男生草女生视频| 欧美性受极品xxxx喷水| 欧美一区二区三区| 国产91视觉| 亚洲欧美日本国产专区一区| 美女爆乳18禁www久久久久久| 欧美性感一区二区三区| 超碰免费公开在线| 国产精品国产一区二区| 日韩精品1区2区3区| 开心激情五月网| 日韩免费视频一区| 免费在线小视频| 视频一区视频二区视频三区高| 久久99国产精品久久99| 深夜福利影院在线观看| 亚洲成色999久久网站| 国产91亚洲精品久久久| 欧美另类videosbestsex日本| av不卡一区二区三区| 亚洲精品国产无码| 国内伊人久久久久久网站视频 | 亚洲狠狠婷婷综合久久久| 国产大陆精品国产| 羞羞影院体验区| 国产一区二区av| 国产精品色呦| 日日躁夜夜躁aaaabbbb| 午夜婷婷国产麻豆精品| 波多野结衣一区二区|