<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 18863字,需瀏覽 38分鐘

           ·

          2022-02-22 17:57

          內(nèi)容來源于官方?Longhorn 1.1.2?英文技術手冊。

          目錄

          • 創(chuàng)建一個快照

          • 周期性(Recurring)快照和備份

            • 使用?Longhorn UI?設置周期性快照

            • 使用?StorageClass?設置?Recurring Jobs

            • 分離卷時允許?Recurring Job

          • 容災卷

            • 創(chuàng)建容災(DR)卷

          • 設置備份目標

            • 設置?AWS S3?備份存儲

            • 設置本地測試備份存儲

            • 使用自簽名?SSL?證書進行?S3?通信

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

            • NFS?備份存儲

          • 創(chuàng)建備份

          • 從備份恢復

          • 為?Kubernetes StatefulSets?恢復卷

          • 在集群上啟用?CSI?快照支持

            • 添加一個默認的?VolumeSnapshotClass

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

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

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

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

            • CSI Mechanism?工作原理

            • 查看備份

            • VolumeSnapshot?示例

          • 通過?CSI?恢復備份

          • 通過?VolumeSnapshot?對象恢復備份

            • 還原沒有關聯(lián)?VolumeSnapshot?的備份

          創(chuàng)建一個快照

          snapshot?是?Kubernetes Volume?在任何給定時間點的狀態(tài)。

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

          1. 在?Longhorn UI?的頂部導航欄中,單擊?Volume

          2. 單擊要為其創(chuàng)建快照的卷的名稱。這會導致卷詳細信息頁面。

          3. 單擊?Take Snapshot?按鈕。

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

          周期性快照和備份

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

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

          • schedule?類型,備份(backup)快照(snapshot)

          • 將創(chuàng)建備份或快照的時間,以?CRON expression?的形式

          • 要保留的備份或快照的數(shù)量

          • 應應用于備份或快照的任何標簽(Any labels)

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

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

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

          1. Recurring backup job?僅在自上次備份以來卷有新數(shù)據(jù)時才進行新備份。

          2. Recurring snapshot job?僅在卷頭(volume head)中有新數(shù)據(jù)(實時數(shù)據(jù))時才拍攝新快照。

          使用 Longhorn UI 設置周期性快照

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

          使用 StorageClass 設置 Recurring Jobs

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

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

          recurringJobs?字段應遵循以下?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
          }
          ]'

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

          1. name:一項?job?的名稱。不要在一個?recurringJobs?中使用重復的名稱。 并且?name?的長度不能超過?8?個字符。

          2. task:一項?job?的類型。它僅支持?snapshot(定期創(chuàng)建快照)或backup(定期創(chuàng)建快照然后進行備份)。

          3. cronCron?表達式。它告訴一項?job?的執(zhí)行時間。

          4. retainLonghorn?將為一項?job?保留多少快照/備份(snapshots/backups)。應該不少于?1

          分離卷時允許 Recurring Job

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

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

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

          容災卷

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

          對于災難恢復卷,Last Backup?表示其原始備份卷的最新備份。

          如果代表災難卷的圖標為灰色,則表示該卷正在恢復?Last Backup,并且該卷無法激活。如果圖標為藍色,則表示該卷已恢復?Last Backup

          創(chuàng)建容災(DR)卷

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

          1. 在集群?A?中,確保原始卷?X?已創(chuàng)建備份或已安排?recurring backups

          2. 在集群?B?的備份頁面,選擇備份卷?X,然后創(chuàng)建容災卷?Y。強烈建議使用備份卷名作為容災卷名。

          3. Longhorn?會自動將?DR?卷?Y?附加到隨機節(jié)點。然后?Longhorn?將開始輪詢卷?X?的最后一次備份,并將其增量恢復到卷?Y

          設置備份目標

          備份目標是用于訪問?Longhorn?中?backupstore?的端點。backupstore?是?NFS?服務器或?S3?兼容服務器,用于存儲?Longhorn?卷的備份。備份目標可以在?Settings/General/BackupTarget?中設置。

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

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

          設置 AWS S3 備份存儲

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

          2. 為?Longhorn?設置權限。有兩種設置憑據(jù)的選項。首先,您可以使用?AWS IAM?用戶的憑證設置?Kubernetes secret。第二個是您可以使用第三方應用程序通過?annotations?來管理?Pod?的臨時?AWS IAM?權限,而不是使用?AWS?憑證進行操作。

            • 選項 1:使用?IAM?用戶憑證創(chuàng)建?Kubernetes secret

            • 選項 2:通過?AWS STS AssumeRolekube2iam?或?kiam)使用?IAM?臨時憑證設置權限

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

            1. 按照指南為?AWS S3?服務創(chuàng)建新的?AWS IAM?角色,并設置以下權限:

              {
              "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:::/*"
              ]
              }
              ]
              }
            2. 使用以下信任關系編輯?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"
              }
              ]
              }
            3. 在?Longhorn?所在的命名空間(默認為?longhorn-system)中創(chuàng)建一個名稱為?aws-secret?的?Kubernetes secretsecret?必須在?longhorn-system?命名空間中創(chuàng)建,以便?Longhorn?訪問它:

              kubectl create secret generic  \
              --from-literal=AWS_IAM_ROLE_ARN= \
              -n longhorn-system
            4. 按照指南創(chuàng)建新的?AWS IAM?用戶,并設置以下權限。編輯?Resource?部分以使用您的?S3存儲桶名稱:

              {
              "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:::/*"
              ]
              }
              ]
              }
            5. 在放置?Longhorn?的命名空間(默認為?longhorn-system)中創(chuàng)建一個名稱為?aws-secret?的?Kubernetes secretsecret?必須在?longhorn-system?命名空間中創(chuàng)建,以便?Longhorn?訪問它:

              kubectl create secret generic  \
              --from-literal=AWS_ACCESS_KEY_ID= \
              --from-literal=AWS_SECRET_ACCESS_KEY= \
              -n longhorn-system
          3. 轉(zhuǎn)到?Longhorn UI。在頂部導航欄中,單擊?Settings。 在?Backup?部分中,將?Backup Target?設置為:

            s3://@/

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

            s3://@/mypath/

            還要確保您在 URL 中設置了?

            例如,對于?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ū)域代碼。

          4. 在備份部分將?備份目標憑據(jù) Secret(Backup Target Credential Secret)?設置為:

            aws-secret

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

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

          Note:?如果您在代理后面操作?Longhorn?并且您想使用?AWS S3?作為備份存儲,您必須在?aws-secret?中提供有關您的代理的?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?包含不應使用代理(proxy)的網(wǎng)絡地址(network addresses)、網(wǎng)絡地址范圍和域(network address ranges and domains)。為了讓?Longhorn?運行,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)

          設置本地測試備份存儲

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

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

            kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/backupstores/minio-backupstore.yaml
          2. 轉(zhuǎn)到?Longhorn UI。在頂部導航欄中,單擊?Settings。在?Backup?部分,將?Backup Target?設置為

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

            并將?Backup Target Credential Secret(備份目標憑據(jù) Secret)?設置為:

            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==

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

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

          3. 單擊?UI?中的?Backup?選項卡。它應該報告一個沒有任何錯誤的空列表。

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

          使用自簽名 SSL 證書進行 S3 通信

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

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

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

          1. 您想立即切換到這種新的訪問方式,這樣您就無需擔心?Amazon S3 路徑棄用計劃;

          2. 您使用的?backupstore?只支持?virtual-hosted-style?的訪問,例如:Alibaba Cloud(Aliyun) OSS

          3. 您已配置?MINIO_DOMAIN?環(huán)境變量以啟用 MinIO 服務器的 virtual-host-style 請求;

          4. 這個錯誤?...... error: AWS Error: SecondLevelDomainForbidden Please use virtual hosted style to access. .....?被觸發(fā)。

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

          1. 將值為?true?的新字段?VIRTUAL_HOSTED_STYLE?添加到您的備份目標?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
          2. 部署/更新(Deploy/update)?secret,并在?Settings/General/BackupTargetSecret?中設置它。

          NFS 備份存儲

          要將?NFS?服務器用作備份存儲,NFS?服務器必須支持?NFSv4

          目標 URL 應如下所示:

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

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

          創(chuàng)建備份

          Longhorn?中的?Backups?是集群外備份存儲中的對象。快照的備份被復制到備份存儲,訪問備份存儲的端點是備份目標。

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

          要創(chuàng)建備份,

          1. 導航到?Volume?菜單。

          2. 選擇要備份的卷。

          3. 單擊?Create Backup

          4. 添加適當?shù)臉撕灢螕?OK

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

          從備份恢復

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

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

          要恢復備份,

          1. 導航到?Backup?菜單

          2. 選擇您要恢復的備份,然后單擊?Restore Latest Backup

          3. 在?Name?字段中,選擇要恢復的卷

          4. 單擊?OK

          Result:?恢復的卷在?Volume?頁面上可用。

          為 Kubernetes StatefulSets 恢復卷

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

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

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

            Backup NameRestored Volume
            pvc-01astatefulset-vol-0
            pvc-02bstatefulset-vol-1
            • 對需要恢復的每個卷重復此步驟。

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

          2. 在?Kubernetes?中,為每個創(chuàng)建的?Longhorn?卷創(chuàng)建一個?Persistent Volume。將卷命名為稍后可以輕松引用的?Persistent Volume Claimsstorage?容量、numberOfReplicasstorageClassName?和?volumeHandle?必須在下面替換。在這個例子中,我們在?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
          3. 在?namespace?中,將部署?StatefulSet,為每個?Persistent Volume?創(chuàng)建?PersistentVolume ClaimsPersistent Volume Claim?的名稱必須遵循以下命名方案:

            --

            StatefulSet Pod?是零索引(zero-indexed)的。 在這個例子中,Volume Claim Template?的名字是?dataStatefulSet?的名字是?webapp, 并且有兩個副本,分別是索引?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
          4. 創(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)在應該可以從?StatefulSet?Pods?內(nèi)部訪問恢復的數(shù)據(jù)。

          在集群上啟用 CSI 快照支持

          先決條件

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

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

          有關更多信息,請參閱?CSI 卷快照。

          添加一個默認的?VolumeSnapshotClass

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

          kind: VolumeSnapshotClass
          apiVersion: snapshot.storage.k8s.io/v1beta1
          metadata:
          name: longhorn
          driver: driver.longhorn.io
          deletionPolicy: Delete

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

          1. 更新?csi-provisioner?鏡像到?longhornio/csi-provisioner:v1.6.0

          2. 更新?csi-snapshotter?鏡像到?longhornio/csi-snapshotter:v2.1.1

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

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

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

          先決條件

          對于一般用途,請在安裝之前使用適當?shù)?namespace?更新?snapshot controller YAML

          例如,在?vanilla Kubernetes?集群上,在發(fā)出?kubectl create?命令之前,將命名空間從?default?更新為?kube-system

          安裝?Snapshot Beta CRDs

          1. 從?https://github.com/kubernetes-csi/external-snapshotter/tree/release-4.0/client/config/crd?下載文件

          2. 運行?kubectl create -f client/config/crd.

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

          安裝?Common Snapshot Controller

          1. 從?https://github.com/kubernetes-csi/external-snapshotter/tree/release-4.0/deploy/kubernetes/snapshot-controller?下載文件

          2. 將?namespace?更新為適合您環(huán)境的值(例如:kube-system

          3. 運行?kubectl create -f deploy/kubernetes/snapshot-controller

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

          有關其他信息,請參閱?kubernetes external-snapshotter git repo?中的?Usage?部分。

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

          Longhorn?中的?Backups?是集群外備份存儲(backupstore)中的對象,訪問備份存儲的端點是備份目標。

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

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

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

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

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

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

          CSI Mechanism 工作原理

          當使用?kubectl?創(chuàng)建?VolumeSnapshot?對象時,VolumeSnapshot.uuid?字段用于標識?Longhorn snapshot?和關聯(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?標志設置為?true

          查看備份

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

          VolumeSnapshot 示例

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

          volumeSnapshotClassName?字段指向一個?VolumeSnapshotClass

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

          apiVersion: snapshot.storage.k8s.io/v1beta1
          kind: VolumeSnapshot
          metadata:
          name: test-snapshot-pvc
          spec:
          volumeSnapshotClassName: longhorn
          source:
          persistentVolumeClaimName: test-vol

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

          有關快照類的更多信息,請參閱?VolumeSnapshotClasses?的?kubernetes?文檔。

          通過 CSI 恢復備份

          Longhorn?可以輕松地將備份恢復到一個卷。

          要以編程方式恢復備份,您可以使用通用的?kubernetes csi?快照機制。

          先決條件

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

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

          通過?VolumeSnapshot?對象恢復備份

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

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

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

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

          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

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

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

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

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

          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)建關聯(lián)的?VolumeSnapshot?對象,并將?name?字段設置為?test-snapshot-existing-backup,其中?source?字段通過?volumeSnapshotContentName?字段引用?VolumeSnapshotContent?對象。

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

          只能為?VolumeSnapshot?對象設置一種類型的引用。

          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)建一個引用新創(chuàng)建的?VolumeSnapshot?對象的?PerstistentVolumeClaim?對象。

          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉人人 | 天天好逼网在线观看 | 欧美性手机在线 | 网站啪啪 | 无码系列亚洲精品国产A√现线 |