006.OpenShift永續性儲存

木二發表於2020-06-21

一 持久儲存

1.1 持久儲存概述

預設情況下,執行容器使用容器內的臨時儲存。Pods由一個或多個容器組成,這些容器一起部署,共享相同的儲存和其他資源,可以在任何時候建立、啟動、停止或銷燬。使用臨時儲存意味著,當容器停止時,寫入容器內的檔案系統的資料將丟失。
當容器在停止時也需要持久的儲存資料時,OpenShift使用Kubernetes持久卷(PVs)為pod提供持久儲存。

1.2 持久儲存場景

通常用於資料庫,啟動一個資料庫的pod時提供的預設臨時儲存。如果銷燬並重新建立資料庫pod,則銷燬臨時儲存並丟失資料。如果使用持久儲存,則資料庫將資料儲存到pod外部的持久卷中。如果銷燬並重新建立pod,資料庫應用程式將繼續訪問儲存資料的相同外部儲存。

1.3 持久儲存相關概念

持久卷(PV)是OpenShift資源,它只由OpenShift管理員建立和銷燬。持久卷資源表示所有OpenShift節點都可以訪問的網路連線儲存。
永續性儲存元件:
OCP使用Kubernetes持久卷(PV)技術,允許管理員為叢集提供永續性儲存。開發人員使用永續性卷宣告(PVC)請求PV資源,而不需要了解具體的底層儲存基礎設施。
Persistent Volume:PV是OpenShift叢集中的資源,由PersistentVolume API物件定義,它表示叢集中由管理員提供的現有網路儲存的一部分。它是叢集中的資源,就像節點是叢集資源一樣。PV的生命週期獨立於使用PV的任何單獨pod。
Persistent Volume Claim:pvc由PersistentVolumeClaim API物件定義,該物件表示開發人員對儲存的請求。它與pod類似,pod消耗節點資源,而pvc消耗PV資源。

1.4 持久儲存外掛

卷是掛載的檔案系統,對pods及其容器可用,並且可以由許多本地或網路連線的儲存進行備份。OpenShift使用外掛來支援以下不同的後端用於持久儲存:
  • NFS
  • GlusterFS
  • OpenStack Cinder
  • Ceph RBD
  • AWS Elastic Block Store (EBS)
  • GCE Persistent Disk
  • iSCSI
  • Fibre Channel
  • Azure Disk and Azure File
  • FlexVolume (allows for the extension of storage back-ends that do not have a built-in plug-in)
  • VMWare vSphere
  • Dynamic Provisioning and Creating Storage Classes
  • Volume Security
  • Selector-Label Volume Binding

1.5 PV訪問模式

PV可以以resource provider的任何方式掛載在主機上,provider具有不同的功能,並且每個持久卷的訪問模式都設定為該特定卷支援的特定模式。例如,NFS可以支援多個讀/寫客戶端,但是特定的NFS PV可以在伺服器上作為只讀匯出。
每個PV接收自己的一組訪問模式,描述特定的持久卷的功能。
訪問模式見下表:
訪問模式
CLI縮寫
描述
ReadWriteOnce
RWO
卷可以被單個節點掛載為讀/寫
ReadOnlyMany
ROX
卷可以由許多節點以只讀方式掛載
ReadWriteMany
RWX
卷可以被許多節點掛載為讀/寫
PV claims與具有類似訪問模式的卷匹配。唯一的兩個匹配標準是訪問模式和大小。claim的訪問模式表示請求。因此,可以授予使用者更大的訪問許可權,但絕不能減少訪問許可權。例如,如果一個claim請求RWO,但是惟一可用的卷是NFS PV (RWO+ROX+RWX),那麼claim將匹配NFS,因為它支援RWO。
所有具有相同模式的卷都被分組,然後按大小(從最小到最大)排序。
master上負責將PV繫結到PVC上的service接收具有匹配模式的組,並在每個組上迭代(按大小順序),直到一個大小匹配為止,然後將PV繫結到PVC上。

1.6 Persistent Volume Storage Classes

PV Claims可以通過在storageClassName屬性中指定它的名稱來選擇性地請求特定的儲存類。只有與PVC具有相同儲存類名稱的請求類的pv才能繫結到PVC。
叢集管理員可以為所有PVC設定一個預設儲存類,或者配置動態供應程式來服務一個或多個儲存類,這些儲存類將匹配可用PVC中的規範。

1.7 建立pv和PVC資源

pv是叢集中的資源,pvc是對這些資源的請求,也充當對資源的claim檢查。pv與PVCs的相互作用具有以下生命週期:
  • 建立持久卷
叢集管理員建立任意數量的pv,這些pv表示叢集使用者可以通過OpenShift API使用的實際儲存的資訊。
  • 定義持久卷宣告
使用者建立具有特定儲存量、特定訪問模式和可選儲存類的PVC。master監視新的pvc,要麼找到匹配的PV,要麼等待儲存類建立一個供應程式,然後將它們繫結在一起。
  • 使用持久儲存
Pods使用claims作為卷。叢集檢查查詢繫結卷的宣告,併為pod繫結該卷。對於那些支援多種訪問模式的卷,使用者在將其宣告用作pod中的卷時指定需要哪種模式。
一旦使用者有了一個claim,並且該claim被繫結,繫結的PV就屬於使用者,使用過程中該PV都屬於該使用者。使用者通過在pod的Volume中包含一個持久的卷claim來排程pod並訪問其宣告的pv。

1.8 使用NFS的PV

OpenShift使用隨機uid執行容器,因此將Linux使用者從OpenShift節點對映到NFS伺服器上的使用者並不能正常工作。作為OpenShift pv使用的NFS共享必須遵從如下配置:
  • 屬於nfsnobody使用者和組。
  • 擁有rwx------許可權(即0700)。
  • 使用all_squash選項
示例配置:
/var/export/vol *(rw,async,all_squash)
其他NFS export選項,例如sync和async,與OpenShift無關。如果使用任何一個選項,OpenShift都可以工作。但是,在高延遲環境中,新增async選項可以加快NFS共享的寫操作(例如,將image push到倉庫的場景)。
使用async選項更快,因為NFS伺服器在處理請求時立即響應客戶端,而不需要等待資料寫到磁碟。
當使用sync選項時,則相反,NFS伺服器只在資料寫到磁碟之後才響應客戶端。
注意:NFS共享檔案系統大小和使用者配額對OpenShift沒有影響。PV大小在PV資源定義中指定。如果實際檔案系統更小,則PV被建立並繫結。如果PV更大,OpenShift不會將使用的空間限制為指定的PV大小,並且允許容器使用檔案系統上的所有空閒空間。OpenShift自身提供了儲存配額和儲存位置限制,可用於控制專案中的資源分配。
預設的SELinux策略不允許容器訪問NFS共享。必須在每個OpenShift例項節點中更改策略,方法是將virt_use_nfs和virt_sandbox_use_nfs變數設定為true。
  1 # setsebool -P virt_use_nfs=true
  2 # setsebool -P virt_sandbox_use_nfs=true
 

1.9 NFS回收政策

NFS支援OpenShift的Recyclable外掛,根據在每個持久捲上設定的策略處理自動執行回收任務。
預設情況下,持久卷被設定為Retain。Retain reclaim策略允許手動回收資源。當刪除pv claim時,持久卷仍然存在,並且認為該卷已被釋放。但它還不能用於另一個claim,因為來自前一個claim的資料仍然保留在捲上。此時管理員可以手動回收卷。
NFS卷及其回收策略設定為Recycle,表示在從claim中釋放後將被清除。例如,當將NFS回收策略設定為Recycle後,在刪除使用者繫結到該卷的pv claim之後,會在該捲上執行rm -rf命令。在它被回收之後,NFS卷可以直接繫結到一個新的pv claim。

1.10 Supplemental group

Supplemental group是常規的Linux組。當一個程式在Linux中執行時,它有一個UID、一個GID和一個或多個Supplemental group。可以為容器的主程式設定這些屬性。
Supplemental groupid通常用於控制對共享儲存的訪問,比如NFS和GlusterFS,而fsGroup用於控制對塊儲存(如Ceph的RBD活iSCSI)的訪問。
OpenShift共享儲存外掛掛載卷,以便使掛載上的POSIX許可權與目標儲存上的許可權匹配。例如,如果目標儲存的所有者ID是1234,組ID是5678,那麼宿主節點和容器中的掛載將具有相同的ID。因此,容器的主程式必須匹配一個或兩個id,才能訪問該卷。
  1 [root@node ~]# showmount -e
  2 Export list for master.lab.example.com:
  3 /var/export/nfs-demo *
  4 [root@services ~]# cat /etc/exports.d/nfs-demo.conf
  5 /var/export/nfs-demo
  6 ...
  7 [root@services ~]# ls -lZ /var/export -d
  8 drwx------. 10000000 650000 unconfined_u:object_r:usr_t:s0 /var/export/nfs-demo
 
圖上示例,UID 10000000和組650000可以訪問/var/export/nfs-demo export。通常,容器不應該作為root使用者執行。在這個NFS示例中,如果容器不是作為UID 10000000執行的,並且不是組650000的成員,那麼這些容器就不能訪問NFS export。

1.11 通過fsgroup使用塊儲存

fsGroup定義了pod的“file-system group”ID,該ID被新增到容器的supplemental group中。supplemental group ID應用於共享儲存,而fsGroup ID用於塊儲存。
塊儲存,如Ceph RBD、iSCSI和各種型別的雲端儲存,通常專用於單個pod。與共享儲存不同,塊儲存由pod接管,這意味著pod(或image)定義中提供的使用者和組id應用於實際的物理塊裝置,塊儲存通常不共享。

1.12 SELINUX和卷security

除了SCC之外,所有預定義的安全上下文約束都將seLinuxContext設定為MustRunAs。最可能匹配pod需求的SCC迫使pod使用SELinux策略。pod使用的SELinux策略可以在pod本身、image、SCC或project(提供預設值)中定義。
SELinux標籤可以在pod的securityContext中定義。,並支援user、role、type和level標籤。

1.13 ELinuxContext選項

  • MustRunAs
如果不使用預先分配的值,則要求配置seLinuxOptions。使用seLinuxOptions作為預設值,從而針對seLinuxOptions驗證。
  • RunAsAny
沒有提供預設,允許指定任何seLinuxOptions。

二 持久卷練習

2.1 前置準備

準備完整的OpenShift叢集,參考《003.OpenShift網路》2.1。

2.2 本練習準備

  1 [student@workstation ~]$ lab deploy-volume setup

2.3 配置NFS

本實驗不詳解NFS的配置和建立,直接使用/root/DO280/labs/deploy-volume/config-nfs.sh指令碼實現,具體指令碼內容可通過以下方式檢視。
同時NFS由services節點提供。
  1 [root@services ~]# less -FiX /root/DO280/labs/deploy-volume/config-nfs.sh
  2 [root@services ~]# /root/DO280/labs/deploy-volume/config-nfs.sh		#建立NFS
  3 Export directory /var/export/dbvol created.
  4 [root@services ~]# showmount -e						#確認驗證
 
clipboard

2.4 node節點掛載NFS

  1 [root@node1 ~]# mount -t nfs services.lab.example.com:/var/export/dbvol /mnt
  2 [root@node1 ~]# mount | grep /mnt
  3 [root@node1 ~]# ll -a /mnt/		#檢查相關許可權
 
clipboard
  1 [root@node1 ~]# umount /mnt/		#解除安裝
提示:建議node2也做以上掛載測試,測試完成後建議下載,NFS共享在OpenShift需要的時候會自動掛載。

2.5 建立持久卷

  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ less -FiX /home/student/DO280/labs/deploy-volume/mysqldb-volume.yml
  3 apiVersion: v1
  4 kind: PersistentVolume
  5 metadata:
  6   name: mysqldb-volume
  7 spec:
  8   capacity:
  9     storage: 3Gi
 10   accessModes:
 11   - ReadWriteMany
 12   nfs:
 13     path: /var/export/dbvol
 14     server: services.lab.example.com
 15   persistentVolumeReclaimPolicy: Recycle
 16 [student@workstation ~]$ oc create -f /home/student/DO280/labs/deploy-volume/mysqldb-volume.yml
 17 [student@workstation ~]$ oc get pv		#檢視PV
 18 NAME    CAPACITYACCESS    MODES    RECLAIM    POLICY STATUS    CLAIM    STORAGECLASS    REASON    AGE
 19 mysqldb-volume    3Gi     RWX      Recycle    Available                                           1m
 

2.6 建立專案

  1 [student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ oc new-project persistent-storage
 

2.7 部署應用

  1 [student@workstation ~]$ oc new-app --name=mysqldb \
  2 --docker-image=registry.lab.example.com/rhscl/mysql-57-rhel7 \
  3 -e MYSQL_USER=ose \
  4 -e MYSQL_PASSWORD=openshift \
  5 -e MYSQL_DATABASE=quotes
  6 [student@workstation ~]$ oc status		#確認驗證
  7 In project persistent-storage on server https://master.lab.example.com:443
  8 
  9 
 10 svc/mysqldb - 172.30.39.72:3306
 11   dc/mysqldb deploys istag/mysqldb:latest
 12     deployment #1 deployed 58 seconds ago - 1 pod

2.8 配置持久卷

  1 [student@workstation ~]$ oc describe pod mysqldb | grep -A2 'Volumes'	#檢視當前pod的Volume
  2 Volumes:
  3   mysqldb-volume-1:
  4     Type:    EmptyDir (a temporary directory that shares a pod's lifetime)
  5 [student@workstation ~]$ oc set volumes dc mysqldb \
  6 --add --overwrite --name=mysqldb-volume-1 -t pvc \
  7 --claim-name=mysqldb-pvclaim \
  8 --claim-size=3Gi \
  9 --claim-mode='ReadWriteMany'		#修改dc並建立PVC
 10 [student@workstation ~]$ oc describe pod mysqldb | grep -E -A 2 'Volumes|ClaimName'	#檢視驗證
 
clipboard
  1 [student@workstation ~]$ oc get pvc		#檢視PVC
  2 NAME              STATUS    VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  3 mysqldb-pvclaim   Bound     mysqldb-volume   3Gi        RWX                           2m
 

2.9 埠轉發

  1 [student@workstation ~]$ oc get pod
  2 NAME              READY     STATUS    RESTARTS   AGE
  3 mysqldb-2-r7wz8   1/1       Running   0          4m
  4 [student@workstation ~]$ oc port-forward mysqldb-2-r7wz8 3306:3306
 

2.10 測試資料庫

  1 [student@workstation ~]$ mysql -h127.0.0.1 -uose -popenshift \
  2 quotes < /home/student/DO280/labs/deploy-volume/quote.sql	#填充資料測試
  3 [student@workstation ~]$ mysql -h127.0.0.1 -uose -popenshift \
  4 quotes -e "select count(*) from quote;"				#確認填充完成
  5 [student@workstation ~]$ ssh root@services ls -la /var/export/dbvol	#檢視NFS服務端資料
  6 ……
  7 drwxr-x---. 2 nfsnobody nfsnobody       54 Jul 21 23:43 quotes
  8 ……
  9 [student@workstation ~]$ ssh root@services ls -la /var/export/dbvol/quotes
 10 total 116
 11 drwxr-x---. 2 nfsnobody nfsnobody    54 Jul 21 23:43 .
 12 drwx------. 6 nfsnobody nfsnobody  4096 Jul 21 23:39 ..
 13 -rw-r-----. 1 nfsnobody nfsnobody    65 Jul 21 23:39 db.opt
 14 -rw-r-----. 1 nfsnobody nfsnobody  8584 Jul 21 23:43 quote.frm
 15 -rw-r-----. 1 nfsnobody nfsnobody 98304 Jul 21 23:44 quote.ibd
 

2.11 刪除PV

  1 [student@workstation ~]$ oc delete project persistent-storage	#刪除專案
  2 project "persistent-storage" deleted
  3 [student@workstation ~]$ oc delete pv mysqldb-volume		#刪除PV
  4 persistentvolume "mysqldb-volume" deleted
 
 

2.12 驗證永續性

刪除PV後驗證資料是否會長期保留。
  1 [student@workstation ~]$ ssh root@services ls -la /var/export/dbvol
  2 ……
  3 drwxr-x---. 2 nfsnobody nfsnobody       54 Jul 21 23:43 quotes
  4 ……
  5 [student@workstation ~]$ ssh root@services rm -rf /var/export/dbvol/*	#使用rm才可以徹底刪除
 

三 私有倉庫持久儲存

3.1 建立私有倉庫持久卷

OCP內部倉庫是source-to-image(S2I)流程的一個重要元件,該流程用於從應用程式原始碼建立pod。S2I流程的最終輸出是一個容器image,它被推送到OCP內部倉庫,然後可以用於部署。
在生產環境中,通常建議為內部倉庫提供一個永續性儲存。否則,在重新建立registry pod之後,S2I建立的pod可能無法啟動。例如,在master節點重新啟動之後。
OpenShift安裝程式配置並啟動一個預設的持久倉庫,該倉庫使用NFS共享,由Inventory檔案中的openshift_hosted_registry_storage_*變數定義。在生產環境中,Red Hat建議由外部專用的儲存提供永續性儲存,該伺服器配置為彈性和高可用性。
高階安裝程式將NFS伺服器配置為使用外部NFS伺服器上的持久儲存,在[NFS]欄位中定義的一個NFS伺服器的列表。該伺服器與openshift_hosted_registry_storage*變數一起使用,以配置NFS伺服器。
示例配置:
  1 [OSEv3:vars]
  2 openshift_hosted_registry_storage_kind=nfs		#定義OCP儲存後端
  3 openshift_hosted_registry_storage_access_modes=['ReadWriteMany']	#定義訪問模式,預設為ReadWriteMany,表示允許多個節點以讀寫形式掛載
  4 openshift_hosted_registry_storage_nfs_directory=/exports		#定義NFS伺服器上的NFS儲存目錄
  5 openshift_hosted_registry_storage_nfs_options='*(rw,root_squash)'	#定義儲存卷的NFS選項。這些選項被新增到/etc/ exports.d/openshift-ansible.exports中。rw選項允許對NFS捲進行讀寫訪問,root_squash選項阻止遠端連線的根使用者擁有root特權,併為nfsnobody分配使用者ID
  6 openshift_hosted_registry_storage_volume_name=registry		#定義要用於持久倉庫的NFS目錄的名稱
  7 openshift_hosted_registry_storage_volume_size=40Gi			#定義持久卷大小
  8 ... output omitted ...
  9 [nfs]
 10 services.lab.example.com
 
在為持久倉庫安裝和配置儲存之後,OpenShift在OpenShift專案中建立一個名為register-volume的持久卷。永續性卷的容量為40gb,並且根據定義設定了Retain策略。同時預設專案中的pvc呼叫pv。
  1 [student@workstation ~]$ oc describe pv registry-volume
  2 Name:            registry-volume	#定義持久卷名
  3 Labels:          <none>
  4 Annotations:     pv.kubernetes.io/bound-by-controller=yes
  5 StorageClass:
  6 Status:          Bound
  7 Claim:           default/registry-claim	#定義使用持久卷的宣告
  8 Reclaim Policy:  Retain			#預設持久卷策略,具有Retain策略的卷在從其宣告中釋放後不會被擦除
  9 Access Modes:    RWX			#定義持久卷的訪問模式,由Ansible inventory檔案的openshift_hosted_registry_storage_access_modes=['ReadWriteMany']變數定義
 10 Capacity:        40Gi			#定義持久卷的大小,由Ansible inventory檔案的openshift_hosted_registry_storage_volume_size變數定義
 11 Message:
 12 Source:					#定義儲存後端的位置和NFS共享
 13     Type:      NFS (an NFS mount that lasts the lifetime of a pod)
 14     Server:    services.lab.example.com
 15     Path:      /exports/registry
 16     ReadOnly:  false
 17 Events:        <none>
 
執行以下命令,確認OpenShift內部倉庫已配置registry-volume作為預設的PersistentVolumeClaim。
  1 [user@demo ~] oc describe dc/docker-registry | grep -A4 Volumes
  2   Volumes:
  3    registry-storage:
  4     Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
  5     ClaimName:  registry-claim
  6     ReadOnly:   false
 
OCP內部倉庫將image和metadata儲存為普通檔案和資料夾,這意味著可以檢查PV源儲存,檢視倉庫是否向其寫入了檔案。
在生產環境中,這是通過訪問外部NFS伺服器來完成的。但是,在本環境中,NFS共享是在services的VM上配置的,因此ssh至services檢視,以便於驗證OCP內部倉庫成功將image儲存到持久儲存中。
示例:一個名為hello的應用程式在default名稱空間中執行,下面的命令驗證影像是否儲存在持久儲存中。
  1 [user@demo ~] ssh root@master ls -l \
  2 /var/export/registryvol/docker/registry/v2/repositories/default/
 

四 PV綜合實驗

4.1 前置準備

準備完整的OpenShift叢集,參考《003.OpenShift網路》2.1。

4.2 本練習準備

[student@workstation ~]$ lab storage-review setup

4.3 配置NFS

本實驗不詳解NFS的配置和建立,直接使用/root/DO280/labs/deploy-volume/config-nfs.sh指令碼實現,具體指令碼內容可通過以下方式檢視。
同時NFS由services節點提供。
  1 [root@services ~]# less -FiX /root/DO280/labs/storage-review/config-review-nfs.sh
  2 [root@services ~]# /root/DO280/labs/storage-review/config-review-nfs.sh		#建立NFS
  3 [root@services ~]# showmount -e							#確認驗證
 
clipboard

4.4 建立持久卷

  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ less -FiX /home/student/DO280/labs/storage-review/review-volume-pv.yaml
  3 apiVersion: v1
  4 kind: PersistentVolume
  5 metadata:
  6   name: review-pv
  7 spec:
  8   capacity:
  9     storage: 3Gi
 10   accessModes:
 11   - ReadWriteMany
 12   nfs:
 13     path: /var/export/review-dbvol
 14     server: services.lab.example.com
 15   persistentVolumeReclaimPolicy: Recycle
 16 [student@workstation ~]$ oc create -f /home/student/DO280/labs/storage-review/review-volume-pv.yaml
 17 [student@workstation ~]$ oc get pv		#檢視PV
 18 NAME    CAPACITYACCESS    MODES    RECLAIM    POLICY STATUS    CLAIM    STORAGECLASS    REASON    AGE
 19 review-pv    3Gi     RWX      Recycle    Available                                           13s
 

4.5 部署模板

  1 [student@workstation ~]$ less -FiX /home/student/DO280/labs/storage-review/instructor-template.yaml
  2 [student@workstation ~]$ oc create -n openshift -f /home/student/DO280/labs/storage-review/instructor-template.yaml
  3 #使用模板建立應用至openshift namespace中
 

4.6 建立專案

  1 [student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ oc new-project instructor
 

4.7 web部署應用

瀏覽器訪問: https://master.lab.example.com
clipboard
選擇Catalog
clipboard
選擇PHP,並使用instructor-template。
clipboard
設定Application Hostname,然後直接下一步,模板會建立一個資料庫伺服器。
clipboard
單擊Continue to project overview以監視應用程式的構建過程。從提供的服務框架中,單擊講師。單擊部署配置#1條目旁邊的下拉箭頭,開啟部署皮膚。當構建完成時,build部分的Complete旁邊應該出現一個綠色的複選標記。
clipboard
clipboard

4.8 埠轉發

  1 [student@workstation ~]$ oc login -u developer -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ oc get pod
  3 NAME                 READY     STATUS      RESTARTS   AGE
  4 instructor-1-9fmct   1/1       Running     0          43s
  5 instructor-1-build   0/1       Completed   0          2m
  6 mysql-1-f7rrq        1/1       Running     0          2m
  7 [student@workstation ~]$ oc port-forward mysql-1-f7rrq 3306:3306
 

4.9 填充資料庫

  1 [student@workstation ~]$ mysql -h127.0.0.1 -u instructor -ppassword \
  2 instructor < /home/student/DO280/labs/storage-review/instructor.sql
  3 [student@workstation ~]$ mysql -h127.0.0.1 -u instructor -ppassword instructor -e "select * from instructors;"	#檢視
  4 
clipboard

4.10 測試訪問

clipboardworkstations的瀏覽器訪問:http://instructor.apps.lab.example.com

4.11 測試新增資料

 
clipboard
 
clipboard

4.12 確認驗證

  1 [student@workstation ~]$ lab storage-review grade		#環境指令碼判斷實驗

4.13 清理刪除

  1 [student@workstation ~]$ oc login -uadmin -predhat
  2 [student@workstation ~]$ oc delete project instructor
  3 [student@workstation ~]$ oc delete pv review-pv
  4 [student@workstation ~]$ ssh root@services
  5 [root@services ~]# rm -rf /var/export/review-dbvol
  6 [root@services ~]# rm -f /etc/exports.d/review-dbvol.exports
 

相關文章