摘要:手動配置本地卷此節介紹在不使用情況下如何配置手動本地卷。主機掛載本地卷如本例在主機配置本地卷,需將目錄手動掛載到目錄,如環境設置權限部署可選。
本地卷描述
如Hadoop、ES等系統,其DataNode需大量存儲,且其本身提供了冗余功能,那么我們就沒必要讓其從存儲系統中分配卷,而是像裸機部署一樣讓其使用本地節點上的存儲,local volumes出現之前,我們可使用HostPath掛載卷到容器中,但此方案有很多局限性:
The prior mechanism of accessing local storage through hostPath volumes had many challenges. hostPath volumes were difficult to use in production at scale: operators needed to care for local disk management, topology, and scheduling of individual pods when using hostPath volumes, and could not use many Kubernetes features (like StatefulSets). Existing Helm charts that used remote volumes could not be easily ported to use hostPath volumes. The Local Persistent Volumes feature aims to address hostPath volumes’ portability, disk accounting, and scheduling challenges.
注意:本地卷僅適用于少量應用,如同HostPath一樣Pod被綁定到特定的主機上,若主機異常,則Pod沒法調度到其他節點,其適用場景:
Caching of datasets that can leverage data gravity for fast processing
Distributed storage systems that shard or replicate data across multiplenodes. Examples include distributed datastores like Cassandra, or distributedfile systems like Gluster or Ceph.
localvolume與hostpath類似,但其更靈活且統一,如應用使用hostpath,則只能在yaml文件中硬編碼,而localvolume如同普通pvc靈活可用,具體見下文。
手動配置本地卷此節介紹在不使用local provisioner情況下如何配置手動本地卷。
管理員必須為本地卷創建一個存儲類,如下所示,創建了一個名為local-storage的存儲類:
% kubectl create -f - <注意:
此存儲類無法動態提供存儲功能,所有PV需手動創建;
volumeBindingMode: WaitForFirstConsumer:Pod調度前不先綁定PVC與PV,而是等待Pod被調度時,這樣可根據Pod資源等請求合理調度,如:selectors, affinity and anti-affinity policies;
宿主機準備目錄,即配置本地硬盤。如實驗環境okd-c01與okd-c02主機均配置了/mnt/test本地存儲,而對于OKD集群需設置SeLinux權限:
chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 /mnt/test手動創建兩PV:example-local-pv-1、example-local-pv-2分別綁定兩主機存儲,如綁定okd-c01.zyl.io主機的本地卷如下:
% kubectl create -f - <創建PVC:
% kubectl create -f - <注意:此時PVC不會立馬綁定到PV,其等待Pod被調度時才會綁定到PV上,當前PVC狀態為Pending:
% oc describe pvc example-local-claim ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal WaitForFirstConsumer 5s (x2 over 10s) persistentvolume-controller waiting for first consumer to be created before binding配置應用使用存儲:
% kubectl create -f - <<"EOF" apiVersion: extensions/v1beta1 kind: Deployment metadata: labels: app: local-volume-test name: local-volume-test spec: replicas: 1 selector: matchLabels: app: local-volume-test template: metadata: labels: app: local-volume-test spec: containers: - image: busybox name: local-volume-test imagePullPolicy: IfNotPresent command: [ "/bin/sh", "-c", "while true; do sleep 2; echo $(date) $(hostname)>> /mnt/test/test.log; done" ] volumeMounts: - name: local-data mountPath: /mnt/test volumes: - name: local-data persistentVolumeClaim: claimName: example-local-claim EOFPod調度后會發現PVC被綁定:
% oc get pvc example-local-claim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE example-local-claim Bound example-local-pv-2 1Gi RWO local-storage 7m注意:
此時刪除Pod,可發現其仍然被調度到本地存儲example-local-pv-2所在的主機,即okd-c02.zyl.io;
刪除deployment后,PVC不會與PV解綁,即第一次Pod調度后,PVC就與PV關聯了;
刪除PVC后,發現PV一直處于Released狀態,導致PV無法被重用,需管理員手動刪除PV并重建PV以便被重用:
When local volumes are manually created like this, the only supported persistentVolumeReclaimPolicy is “Retain”. When the PersistentVolume is released from the PersistentVolumeClaim, an administrator must manually clean up and set up the local volume again for reuse.自動配置本地卷手動配置本地券中描述的PV需手動創建,而PVC刪除后PV沒法重用,即需重建PV才行,當系統使用大量Local Volume時會加重管理負擔,鑒于此,可通過external static provisioner協助簡化local volume配置。
當前版本(<=K8S 1.12及OKD 1.11)管理員需手動在主機上將volume掛載到特定目錄上,而后external static provisioner會掃描此目錄,其將自動創建PV,而當PVC被釋放后又會清理目錄內容并重建PV,其是半自動化的,但并非動態提供,后續版本會提供動態提供支持,如管理員僅需提供LVM VG,此provisioner將自動完成格式化、掛載等步驟:
Dynamic provisioning of local volumes using LVM is under design and an alpha implementation will follow in a future release. This will eliminate the current need for an administrator to pre-partition, format and mount local volumes, as long as the workload’s performance requirements can tolerate sharing disks.參考:
Local Persistent Volumes for Kubernetes Goes Beta;
[kubernetes-sigs/sig-storage-local-static-provisioner:K8S官方提供的external static provisioner;
Configuring Local Volumes:OKD如何配置local provisioner;
以下描述如何使用OKD提供的local provisioner。
主機掛載本地卷如本例在okd-c0[1-3]主機配置本地卷,需將目錄手動掛載到/mnt/local-storage/
/ 目錄,如:cat >> /etc/fstab <OKD/Openshift環境設置SeLinux權限:
chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 /mnt/local-storage/部署local provisioner可選。在多帶帶的項目下部署local provisioner,創建項目:
oc new-project local-storage創建一個ConfigMap,其被external provisioner使用,用于描述存儲類:
% kubectl create -f - <<"EOF" apiVersion: v1 kind: ConfigMap metadata: name: local-volume-config data: storageClassMap: | local-storage-1: hostDir: /mnt/local-storage/local-storage-1 mountDir: /mnt/local-storage/local-storage-1 local-storage-2: hostDir: /mnt/local-storage/local-storage-2 mountDir: /mnt/local-storage/local-storage-2 EOF注意:
local-storage-1:為StorageClass名稱,與/mnt/local-storage/
對應; hostDir:本機目錄;
moutDir:external provisioner將hostDir掛載到pod中的目錄,與hostDir保持一致即可。
provisioner以root權限運行,OKD集群需賦權:
oc create serviceaccount local-storage-admin oc adm policy add-scc-to-user privileged -z local-storage-adminOKD集群安裝模板:
oc create -f https://raw.githubusercontent.com/openshift/origin/release-3.11/examples/storage-examples/local-examples/local-storage-provisioner-template.yaml從以上模板安裝應用(PS:其以DS模式運行在所有計算節點上):
oc new-app -p CONFIGMAP=local-volume-config -p SERVICE_ACCOUNT=local-storage-admin -p NAMESPACE=local-storage -p PROVISIONER_IMAGE=quay.io/external_storage/local-volume-provisioner:latest local-storage-provisioner創建所需的StorageClass:
% kubectl create -f - <<"EOF" apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage-1 provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer EOF % kubectl create -f - <<"EOF" apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage-2 provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer EOF注意:StorageClass創建完成后,PV才會被自動創建。
接著,我們手動創建PVC或者在Statefulset中使用此存儲卷:
--- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: example-local-claim spec: accessModes: - ReadWriteOnce storageClassName: local-storage-1 resources: requests: storage: 5Gi --- kind: StatefulSet ... volumeClaimTemplates: - metadata: name: example-local-claim spec: accessModes: - ReadWriteOnce storageClassName: local-storage-1 resources: requests: storage: 5Gi
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33176.html
摘要:手動配置本地卷此節介紹在不使用情況下如何配置手動本地卷。主機掛載本地卷如本例在主機配置本地卷,需將目錄手動掛載到目錄,如環境設置權限部署可選。 本地卷描述 如Hadoop、ES等系統,其DataNode需大量存儲,且其本身提供了冗余功能,那么我們就沒必要讓其從存儲系統中分配卷,而是像裸機部署一樣讓其使用本地節點上的存儲,local volumes出現之前,我們可使用HostPath掛載...
摘要:本地數據卷管理。本地數據卷的管理是一個比較復雜的工程,需要支持文件系統和塊存儲。在中,本地數據卷管理暫時不會處理該問題會設計一個外部控制器來定期查詢該錯誤狀態,并根據一定的策略重新調度。本地數據卷的創建由新的組件處理,該組件將以的方式部署。 ?本期文章來自才云科技(Caicloud)CTO 鄧德源的技術原創。 1Overview Kubernetes 1.7 不會引入過多新功能,比較重...
摘要:核心概念是最小的調度單元,可以由一個或者多個容器組成。該模式會跟云服務商有關,比如可以通過等創建一個外部的負載均衡器,將請求轉發到對應的服務組。而可以提供外部服務可訪問的負載均衡器等。 概述 Kubernetes 有各類資源對象來描述整個集群的運行狀態。這些對象都需要通過調用 kubernetes api 來進行創建、修改、刪除,可以通過 kubectl 命令工具,也可以直接調用 k8...
摘要:的詳細內容如下當然,也可以不使用,而是手動創建。前是將作為記錄到中,起將其獨立為一個字段接下來可以創建各種,記得要在的模板中聲明。注意到這里是,即我們一開始創建的實例的名字。為表示中申明的未的,在集群內的中找不到可以匹配的。 什么是Local Persistent Volumes 在kubernetes 1.14版本中, Local Persistent Volumes(以下簡稱LPV...
閱讀 3960·2021-11-24 09:38
閱讀 1225·2021-10-19 11:42
閱讀 1829·2021-10-14 09:42
閱讀 2154·2019-08-30 15:44
閱讀 544·2019-08-30 14:04
閱讀 2889·2019-08-30 13:13
閱讀 1949·2019-08-30 12:51
閱讀 956·2019-08-30 11:22