<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 高級使用之備份恢復(fù)與 ReadWriteMany

          共 9166字,需瀏覽 19分鐘

           ·

          2022-02-27 14:50

          備份恢復(fù)

          Longhorn 提供了備份恢復(fù)功能,要使用這個功能我們需要給卷創(chuàng)建一個 snapshot 快照,快照是 Kubernetes Volume 在任何指定時間點的狀態(tài)。

          在 Longhorn UI 的 Volume 頁面中點擊要創(chuàng)建快照的卷,進入卷的詳細信息頁面,點擊下方的 Take Snapshot 按鈕即可創(chuàng)建快照了,創(chuàng)建快照后,將在卷頭(Volume Head)之前的快照列表中可以看到它,比如這里我們會前面測試使用的 mysql 卷創(chuàng)建一個快照:

          同樣在節(jié)點的數(shù)據(jù)目錄下面也可以看到創(chuàng)建的快照數(shù)據(jù):

          ??tree?/var/lib/longhorn/replicas/pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307-fbf72396/
          /var/lib/longhorn/replicas/pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307-fbf72396/
          ├──?revision.counter
          ├──?volume-head-002.img
          ├──?volume-head-002.img.meta
          ├──?volume.meta
          ├──?volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img
          ├──?volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img.meta
          ├──?volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img
          └──?volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img.meta

          0?directories,?8?files

          其中的 volume-snap-xxx 后面的數(shù)據(jù)和頁面上的快照名稱是一致的,比如頁面中我們剛剛創(chuàng)建的快照名稱為 3b1f877b-24ba-44ec-808e-ab8d4b15f8dd,其中的 img 文件是鏡像文件,而 img.meta 是保持當前快照的元信息:

          ??cat?volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img.meta
          {"Name":"volume-head-001.img","Parent":"volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img","Removed":false,"UserCreated":true,"Created":"2022-02-22T07:36:48Z","Labels":null}

          元信息里面包含父級的文件鏡像,這其實表面快照是增量的快照。

          此外除了手動創(chuàng)建快照之外,從 Longhorn UI 上還可以進行周期性快照和備份,同樣在卷的詳細頁面可以進行配置,在 Recurring Jobs Schedule 區(qū)域點擊 Add 按鈕即可創(chuàng)建一個定時的快照。

          創(chuàng)建任務(wù)的時候可以選擇任務(wù)類型是備份(backup)或快照(snapshot),任務(wù)的時間以 CRON 表達式的形式進行配置,還可以配置要保留的備份或快照數(shù)量以及標簽。

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

          • Recurring backup job 僅在自上次備份以來卷有新數(shù)據(jù)時才進行新備份
          • Recurring snapshot job 僅在卷頭(volume head)中有新數(shù)據(jù)時才拍攝新快照

          此外我們還可以通過使用 Kubernetes 的 StorageClass 來配置定時快照,可以通過 StorageClass 的 recurringJobs 參數(shù)配置定時備份和快照,recurringJobs 字段應(yīng)遵循以下 JSON 格式:

          apiVersion:?storage.k8s.io/v1
          kind:?StorageClass
          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)為每個 recurring job 指定以下參數(shù):

          • name:任務(wù)的名稱,不要在一個 recurringJobs 中使用重復(fù)的名稱,并且 name 的長度不能超過 8 個字符
          • task:任務(wù)的類型,它僅支持 snapshot 或 backup
          • cron:Cron 表達式,指定任務(wù)的執(zhí)行時間
          • retain:Longhorn 將為一項任務(wù)保留多少快照/備份,不少于 1

          使用這個 StorageClass 創(chuàng)建的任何卷都將自動配置上這些 recurring jobs。

          要備份卷就需要在 Longhorn 中配置一個備份目標,可以是一個 NFS 服務(wù)或者 S3 兼容的對象存儲服務(wù),用于存儲 Longhorn 卷的備份數(shù)據(jù),備份目標可以在 Settings/General/BackupTarget 中配置,我們這里使用 Helm Chart 安裝的,最好的方式是去定制 values 文件中的 defaultSettings.backupTarget,當然也可以直接去通過 Longhorn UI 進行配置,比如這里我們先配置備份目標為 nfs 服務(wù),Backup Target 值設(shè)置為 nfs://192.168.31.31:/var/lib/k8s/data(要確保目錄存在),Backup Target Credential Secret 留空即可,然后拉到最下面點擊 Save

          備份目標配置后,就可以開始備份了,同樣導(dǎo)航到 Longhorn UI 的 Volume 頁面,選擇要備份的卷,點擊 Create Backup,然后添加合適的標簽點擊 OK 即可。

          備份完成后導(dǎo)航到 Backup 頁面就可以看到對應(yīng)的備份數(shù)據(jù)了:

          這些備份的數(shù)據(jù)也會對應(yīng)一個 backupvolumes crd 對象:

          ??kubectl?get?backupvolumes?-n?longhorn-system
          NAME???????????????????????????????????????CREATEDAT??????????????LASTBACKUPNAME????????????LASTBACKUPAT???????????LASTSYNCEDAT
          pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307???2022-02-22T09:23:24Z???backup-8ae4af9c49534859???2022-02-22T09:23:24Z???2022-02-22T09:41:09Z

          然后我們?nèi)サ?NFS 服務(wù)器上查看會在掛載目錄下面創(chuàng)建一個 backupstore 目錄,下面會保留我們備份的數(shù)據(jù):

          ??tree?/var/lib/k8s/data/backupstore
          /var/lib/k8s/data/backupstore
          └──?volumes
          ????└──?5e
          ????????└──?b6
          ????????????└──?pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307
          ????????????????├──?backups
          ????????????????│???└──?backup_backup-8ae4af9c49534859.cfg
          ????????????????├──?blocks
          ????????????????│???├──?02
          ????????????????│???│???└──?2e
          ????????????????│???│???????└──?022eefc6526cd3d8fc3a9f9a4ba253a910c61a1c430a807403f60a2f233fa210.blk
          ????????????????......
          ????????????????│???└──?f7
          ????????????????│???????└──?e3
          ????????????????│???????????└──?f7e3ae1f83e10da4ece5142abac1fafc0d0917370f7418874c151a66a18bfa15.blk
          ????????????????└──?volume.cfg

          51?directories,?25?files

          同樣這個時候我們也可以去快照列表選擇要備份的快照:

          有了備份數(shù)據(jù)后要想要恢復(fù)數(shù)據(jù),只需要選擇對應(yīng)的備份數(shù)據(jù),點擊 Restore Latest Backup 恢復(fù)數(shù)據(jù)即可:

          ReadWriteMany

          Longhorn 可以通過 NFSv4 服務(wù)器暴露 Longhorn 卷,原生支持 RWX 工作負載,使用的 RWX 卷 會在 longhorn-system 命名空間下面創(chuàng)建一個 share-manager- 的 Pod,該 Pod 負責通過在 Pod 內(nèi)運行的 NFSv4 服務(wù)器暴露 Longhorn 卷。

          要能夠使用 RWX 卷,每個客戶端節(jié)點都需要安裝 NFSv4 客戶端,對于 Ubuntu,可以通過以下方式安裝 NFSv4 客戶端:

          ??apt?install?nfs-common

          對于基于 RPM 的發(fā)行版,可以通過以下方式安裝 NFSv4 客戶端:

          ??yum?install?nfs-utils

          現(xiàn)在我們來創(chuàng)建一個如下所示的 PVC 對象,訪問模式配置為 ReadWriteMany

          #?html-vol.yaml
          kind:?PersistentVolumeClaim
          apiVersion:?v1
          metadata:
          ??name:?html
          spec:
          ??accessModes:
          ????-?ReadWriteMany
          ??storageClassName:?longhorn
          ??resources:
          ????requests:
          ??????storage:?1Gi

          直接創(chuàng)建上面的資源對象就會動態(tài)創(chuàng)建一個 PV 與之綁定:

          ??kubectl?get?pvc?html
          NAME???STATUS???VOLUME?????????????????????????????????????CAPACITY???ACCESS?MODES???STORAGECLASS???AGE
          html???Bound????pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15???1Gi????????RWX????????????longhorn???????15s
          ??kubectl?get?pv?pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
          NAME???????????????????????????????????????CAPACITY???ACCESS?MODES???RECLAIM?POLICY???STATUS???CLAIM??????????STORAGECLASS???REASON???AGE
          pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15???1Gi????????RWX????????????Delete???????????Bound????default/html???longhorn????????????????63s

          然后創(chuàng)建一個如下所示的名為 writer 的 Deployment 資源對象,使用上面創(chuàng)建的 PVC 來持久化數(shù)據(jù):

          #?html-writer.yaml
          apiVersion:?apps/v1
          kind:?Deployment
          metadata:
          ??name:?writer
          spec:
          ??selector:
          ????matchLabels:
          ??????app:?writer
          ??template:
          ????metadata:
          ??????labels:
          ????????app:?writer
          ????spec:
          ??????containers:
          ??????-?name:?content
          ????????image:?alpine:latest
          ????????volumeMounts:
          ????????-?name:?html
          ??????????mountPath:?/html
          ????????command:?["/bin/sh",?"-c"]
          ????????args:
          ????????-?while?true;?do
          ??????????date?>>?/html/index.html;
          ??????????sleep?5;
          ??????????done
          ??????volumes:
          ??????-?name:?html
          ????????persistentVolumeClaim:
          ??????????claimName:?html

          部署后上面創(chuàng)建的 Longhorn 的卷就變成 Attached 狀態(tài)了:

          并且這個時候會自動啟動一個 share-manager 的 Pod,通過該 Pod 內(nèi)運行的 NFSv4 服務(wù)器來暴露 Longhorn 卷:

          ??kubectl?get?pods?-n?longhorn-system?-l?longhorn.io/component=share-manager
          NAME?????????????????????????????????????????????????????READY???STATUS????RESTARTS???AGE
          share-manager-pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15???1/1?????Running???0??????????2m16s
          ??kubectl?logs?-f?share-manager-pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15?-n?longhorn-system
          time="2022-02-22T10:07:42Z"?level=info?msg="starting?RLIMIT_NOFILE?rlimit.Cur?1048576,?rlimit.Max?1048576"
          time="2022-02-22T10:07:42Z"?level=info?msg="ending?RLIMIT_NOFILE?rlimit.Cur?1048576,?rlimit.Max?1048576"
          time="2022-02-22T10:07:42Z"?level=debug?msg="volume?pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15?device?/dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15?contains?filesystem?of?format?"?encrypted=false?volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
          I0222?10:07:42.432630???????1?mount_linux.go:425]?Disk?"/dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15"?appears?to?be?unformatted,?attempting?to?format?as?type:?"ext4"?with?options:?[-F?-m0?/dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15]
          I0222?10:07:42.981928???????1?mount_linux.go:435]?Disk?successfully?formatted?(mkfs):?ext4?-?/dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15?/export/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
          time="2022-02-22T10:07:43Z"?level=info?msg="starting?nfs?server,?volume?is?ready?for?export"?encrypted=false?volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
          time="2022-02-22T10:07:43Z"?level=info?msg="Running?NFS?server!"
          time="2022-02-22T10:07:43Z"?level=info?msg="starting?health?check?for?volume"?encrypted=false?volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15

          然后我們再創(chuàng)建一個如下所示的 Deployment:

          #?html-reader.yaml
          apiVersion:?apps/v1
          kind:?Deployment
          metadata:
          ??name:?reader
          spec:
          ??replicas:?3
          ??selector:
          ????matchLabels:
          ??????app:?reader
          ??template:
          ????metadata:
          ??????labels:
          ????????app:?reader
          ????spec:
          ??????containers:
          ??????-?name:?nginx
          ????????image:?nginx:stable-alpine
          ????????ports:
          ????????-?containerPort:?80
          ????????volumeMounts:
          ????????-?name:?html
          ??????????mountPath:?/usr/share/nginx/html
          ??????volumes:
          ??????-?name:?html
          ????????persistentVolumeClaim:
          ??????????claimName:?html
          ---
          apiVersion:?v1
          kind:?Service
          metadata:
          ??name:?reader
          spec:
          ??selector:
          ????app:?reader
          ??type:?NodePort
          ??ports:
          ??-?protocol:?TCP
          ????port:?80
          ????targetPort:?80

          上面的 reader Pods 可以引用 writer Pod 相同的 PVC,是因為上面我們創(chuàng)建的 PV 和 PVC 是 ReadWriteMany 訪問模式,直接創(chuàng)建上面的資源對象,我們可以通過 NodePort 來訪問應(yīng)用:

          ??kubectl?get?pods?-l?app=reader
          NAME?????????????????????READY???STATUS????RESTARTS???AGE
          reader-b54c4749d-4bjxf???1/1?????Running???0??????????11s
          reader-b54c4749d-5thwz???1/1?????Running???0??????????4m11s
          reader-b54c4749d-drcfk???1/1?????Running???0??????????5m35s
          ??kubectl?get?svc?reader
          NAME?????TYPE???????CLUSTER-IP?????EXTERNAL-IP???PORT(S)????????AGE
          reader???NodePort???10.101.54.19???????????80:31800/TCP???84s
          ??curl?http://192.168.31.31:31800
          ......
          Tue?Feb?22?10:18:39?UTC?2022
          Tue?Feb?22?10:18:44?UTC?2022
          Tue?Feb?22?10:18:49?UTC?2022
          Tue?Feb?22?10:18:54?UTC?2022
          Tue?Feb?22?10:18:59?UTC?2022
          ......

          現(xiàn)在我們嘗試從一個 reader Pod 中去產(chǎn)生一些數(shù)據(jù),然后再去訪問應(yīng)用驗證數(shù)據(jù)是否正確:

          ??kubectl?exec?reader-b54c4749d-4bjxf--?/bin/sh?-c?"echo?longhorn?rwx?access?mode?>>?/usr/share/nginx/html/index.html"
          ??curl?http://192.168.31.31:31800
          ......
          Tue?Feb?22?10:23:49?UTC?2022
          longhorn?rwx?access?mode

          這里我們就驗證了在 Longhorn 中使用 ReadWriteMany 訪問模式的 Volume 卷。

          瀏覽 80
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  后入少妇视频在线观看 | 五月丁香婷婷五月 | 欧美综合免费 | 国内外成人在线视频导航 | 影音先锋少妇 |