溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Kubernetes的持久化存儲(chǔ)解決方法

發(fā)布時(shí)間:2021-07-02 16:35:39 來(lái)源:億速云 閱讀:233 作者:chen 欄目:web開(kāi)發(fā)

本篇內(nèi)容介紹了“Kubernetes的持久化存儲(chǔ)解決方法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

概述

Kubernetes(下稱(chēng)k8s)作為目前行業(yè)內(nèi)使用最廣泛的容器編排工具,已經(jīng)深入到各個(gè)技術(shù)領(lǐng)域,正在徹底改變應(yīng)用程序的開(kāi)發(fā)和部署方式;但從另一個(gè)方面講,k8s的架構(gòu)是不斷變化的。容器的創(chuàng)建和銷(xiāo)毀,從本質(zhì)上講,它們的生命周期是短暫的。因而,K8s的發(fā)展歷程勢(shì)必?zé)o法繞開(kāi)持久化的問(wèn)題,本文就將從這一點(diǎn)出發(fā),為大家講解k8s在持久化存儲(chǔ)方面所提供的解決方案,幫助大家更好的理解k8s的整體技術(shù)生態(tài)。

本文的章節(jié)內(nèi)容分配如下:

  • 概述

  • K8s有哪些持久化方案

  • Docker存儲(chǔ)

  • K8s原生存儲(chǔ)

  • 開(kāi)源存儲(chǔ)項(xiàng)目Ceph&Rook

  • 總結(jié)

K8s有哪些持久化方案

外部存儲(chǔ)方案:

先拋一張CNCF(云原生計(jì)算基金會(huì))公布的云原生存儲(chǔ)解決方案一覽圖,這里只截取了存儲(chǔ)的部分。

Kubernetes的持久化存儲(chǔ)解決方法

圖中列舉的存儲(chǔ)方案,目前都可以集成到Kubernetes平臺(tái),

Docker存儲(chǔ)卷

當(dāng)使用Docker作為K8s的容器方案時(shí),Docker自身所支持的存儲(chǔ)卷也就成為了可選方案之一。Docker存儲(chǔ)卷是容器服務(wù)在單節(jié)點(diǎn)的存儲(chǔ)組織形式,作為解決數(shù)據(jù)存儲(chǔ)、容器運(yùn)行時(shí)的技術(shù)方案;

K8s存儲(chǔ)卷

K8s自己的持久化存儲(chǔ)方案更關(guān)注于應(yīng)用和集群層面,主要用于容器集群的存儲(chǔ)編排,從應(yīng)用使用存儲(chǔ)的角度提供存儲(chǔ)服務(wù)。另一方面,K8s的持久化存儲(chǔ)方案能夠完全兼容自身的對(duì)象,如Pod對(duì)象等,即插即用,無(wú)需二次開(kāi)發(fā)。

下面,我們就對(duì)這幾種存儲(chǔ)方案一一進(jìn)行解釋。

Docker存儲(chǔ)

容器的讀寫(xiě)層

為了提高節(jié)點(diǎn)存儲(chǔ)的使用效率,容器不光在不同運(yùn)行的容器之間共享鏡像資源,而且還實(shí)現(xiàn)了在不同鏡像之間共享數(shù)據(jù)。共享鏡像數(shù)據(jù)的實(shí)現(xiàn)原理:鏡像是分層組合而成的,即一個(gè)完整的鏡像會(huì)包含多個(gè)數(shù)據(jù)層,每層數(shù)據(jù)相互疊加、覆蓋組成了最終的完整鏡像。

Kubernetes的持久化存儲(chǔ)解決方法

為了實(shí)現(xiàn)多個(gè)容器間共享鏡像數(shù)據(jù),容器鏡像每一層都是只讀的。而容器使用鏡像時(shí),在多個(gè)鏡像分層的最上面還添加了一個(gè)讀寫(xiě)層。每一個(gè)容器在運(yùn)行時(shí),都會(huì)基于當(dāng)前鏡像在其最上層掛載一個(gè)讀寫(xiě)層,用戶(hù)針對(duì)容器的所有操作都在讀寫(xiě)層中完成。一旦容器銷(xiāo)毀,這個(gè)讀寫(xiě)層也隨之銷(xiāo)毀。

容器的數(shù)據(jù)卷

容器中的應(yīng)用讀寫(xiě)數(shù)據(jù)都是發(fā)生在容器的讀寫(xiě)層,鏡像層+讀寫(xiě)層映射為容器內(nèi)部文件系統(tǒng)、負(fù)責(zé)容器內(nèi)部存儲(chǔ)的底層架構(gòu)。當(dāng)我們需要容器內(nèi)部應(yīng)用和外部存儲(chǔ)進(jìn)行交互時(shí),還需要一個(gè)外置存儲(chǔ),容器數(shù)據(jù)卷即提供了這樣的功能。

另一方面,容器本身的存儲(chǔ)數(shù)據(jù)都是臨時(shí)存儲(chǔ),在容器銷(xiāo)毀的時(shí)候數(shù)據(jù)會(huì)一起刪除。而通過(guò)數(shù)據(jù)卷將外部存儲(chǔ)掛載到容器文件系統(tǒng),應(yīng)用可以引用外部數(shù)據(jù),也可以將自己產(chǎn)出的數(shù)據(jù)持久化到數(shù)據(jù)卷中,因此容器數(shù)據(jù)卷是容器實(shí)現(xiàn)數(shù)據(jù)持久化的主要實(shí)現(xiàn)方式。

容器存儲(chǔ)組成:只讀層(容器鏡像) + 讀寫(xiě)層 + 外置存儲(chǔ)(數(shù)據(jù)卷)

容器數(shù)據(jù)卷從作用范圍可以分為:?jiǎn)螜C(jī)數(shù)據(jù)卷 和 集群數(shù)據(jù)卷。其中單機(jī)數(shù)據(jù)卷即為容器服務(wù)在一個(gè)節(jié)點(diǎn)上的數(shù)據(jù)卷掛載能力,docker volume 是單機(jī)數(shù)據(jù)卷的代表實(shí)現(xiàn);

Docker Volume 是一個(gè)可供多個(gè)容器使用的目錄,它繞過(guò) UFS,包含以下特性:

  • 數(shù)據(jù)卷可以在容器之間共享和重用;

  • 相比通過(guò)存儲(chǔ)驅(qū)動(dòng)實(shí)現(xiàn)的可寫(xiě)層,數(shù)據(jù)卷讀寫(xiě)是直接對(duì)外置存儲(chǔ)進(jìn)行讀寫(xiě),效率更高;

  • 對(duì)數(shù)據(jù)卷的更新是對(duì)外置存儲(chǔ)讀寫(xiě),不會(huì)影響鏡像和容器讀寫(xiě)層;

  • 數(shù)據(jù)卷可以一直存在,直到?jīng)]有容器使用。

1)Docker 數(shù)據(jù)卷類(lèi)型

Bind:將主機(jī)目錄/文件直接掛載到容器內(nèi)部。

需要使用主機(jī)的上的絕對(duì)路徑,且可以自動(dòng)創(chuàng)建主機(jī)目錄;

容器可以修改掛載目錄下的任何文件,是應(yīng)用更具有便捷性,但也帶來(lái)了安全隱患。

Volume:使用第三方數(shù)據(jù)卷的時(shí)候使用這種方式。

Volume命令行指令:docker volume (create/rm);

是Docker提供的功能,所以在非 docker 環(huán)境下無(wú)法使用;

分為命名數(shù)據(jù)卷和匿名數(shù)據(jù)卷,其實(shí)現(xiàn)是一致的,區(qū)別是匿名數(shù)據(jù)卷的名字為隨機(jī)碼;

支持?jǐn)?shù)據(jù)卷驅(qū)動(dòng)擴(kuò)展,實(shí)現(xiàn)更多外部存儲(chǔ)類(lèi)型的接入。

Tmpfs:非持久化的卷類(lèi)型,存儲(chǔ)在內(nèi)存中。

數(shù)據(jù)易丟失。

2)數(shù)據(jù)卷使用語(yǔ)法

Bind掛載語(yǔ)法

-v: src:dst:opts 只支持單機(jī)版。

Src:表示卷映射源,主機(jī)目錄或文件,需要是絕對(duì)地址;

Dst:容器內(nèi)目標(biāo)掛載地址;

Opts:可選,掛載屬性:ro, consistent, delegated, cached, z, Z;

Consistent, delegated, cached:為mac系統(tǒng)配置共享傳播屬性;

Z、z:配置主機(jī)目錄的selinux label。

示例:

$ docker run -d --name devtest -v /home:/data:ro,rslave nginx  $ docker run -d --name devtest --mount type=bind,source=/home,target=/data,readonly,bind-propagation=rslave nginx  $ docker run -d --name devtest -v /home:/data:z nginx

Volume 掛載方式語(yǔ)法

-v: src:dst:opts 只支持單機(jī)版。

Src:表示卷映射源,數(shù)據(jù)卷名、空;

Dst:容器內(nèi)目標(biāo)目錄;

Opts:可選,掛載屬性:ro(只讀)。

示例:

$ docker run -d --name devtest -v myvol:/app:ro nginx  $ docker run -d --name devtest --mount source=myvol2,target=/app,readonly nginx

3)Docker數(shù)據(jù)卷插件

Docker 數(shù)據(jù)卷實(shí)現(xiàn)了將容器外部存儲(chǔ)掛載到容器文件系統(tǒng)的方式。為了擴(kuò)展容器對(duì)外部存儲(chǔ)類(lèi)型的需求,docker 提出了通過(guò)存儲(chǔ)插件的方式掛載不同類(lèi)型的存儲(chǔ)服務(wù)。擴(kuò)展插件統(tǒng)稱(chēng)為 Volume Driver,可以為每種存儲(chǔ)類(lèi)型開(kāi)發(fā)一種存儲(chǔ)插件。

可以查看官方文檔鏈接:

https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins

其特性簡(jiǎn)單來(lái)說(shuō)可以總結(jié)為2點(diǎn):

單個(gè)節(jié)點(diǎn)上可以部署多個(gè)存儲(chǔ)插件;

一個(gè)存儲(chǔ)插件負(fù)責(zé)一種存儲(chǔ)類(lèi)型的掛載服務(wù)。

Kubernetes的持久化存儲(chǔ)解決方法

關(guān)于Volume plugin的代碼實(shí)現(xiàn),可以參考這篇小文章:Docker 17.03-CE create plugin源碼解析

Docker Plugin 是以Web Service的服務(wù)運(yùn)行在每一臺(tái)Docker Host上的,通過(guò)HTTP協(xié)議傳輸RPC風(fēng)格的JSON數(shù)據(jù)完成通信。Plugin的啟動(dòng)和停止,并不歸Docker管理,Docker Daemon依靠在缺省路徑下查找Unix Socket文件,自動(dòng)發(fā)現(xiàn)可用的插件。

當(dāng)客戶(hù)端與Daemon交互,使用插件創(chuàng)建數(shù)據(jù)卷時(shí),Daemon會(huì)在后端找到插件對(duì)應(yīng)的 socket 文件,建立連接并發(fā)起相應(yīng)的API請(qǐng)求,最終結(jié)合Daemon自身的處理完成客戶(hù)端的請(qǐng)求。

Docker Daemon 與 Volume driver 通信方式有:

  • Sock文件:linux 下放在/run/docker/plugins 目錄下

  • Spec文件:/etc/docker/plugins/convoy.spec 定義

  • Json文件:/usr/lib/docker/plugins/infinit.json 定義

實(shí)現(xiàn)接口:

Create, Remove, Mount, Path, Umount, Get, List, Capabilities;

使用示例:

$ docker volume create --driver nas -o diskid="" -o host="10.46.225.247" -o path=”/nas1" -o mode="" --name nas1

Docker Volume Driver 適用在單機(jī)容器環(huán)境或者 swarm 平臺(tái)進(jìn)行數(shù)據(jù)卷管理,隨著 K8s 的流行其使用場(chǎng)景已經(jīng)越來(lái)越少,這里不做贅述。

K8s原生存儲(chǔ)

如果說(shuō)Docker注重的是單節(jié)點(diǎn)的存儲(chǔ)能力,那K8s 數(shù)據(jù)卷關(guān)注的則是集群級(jí)別的數(shù)據(jù)卷編排能力。

Kubernetes 提供是卷存儲(chǔ)類(lèi)型,從存在的生命周期可分為臨時(shí)和持久卷。 從卷的類(lèi)型分,又可以分為本地存儲(chǔ)、網(wǎng)絡(luò)存儲(chǔ)、Secret/ConfigMap、CSI/Flexvolume、PVC;有興趣的小伙伴可以參考一下官方文檔:

【Kubernetes文檔-卷】

https://kubernetes.io/zh/docs/concepts/storage/volumes/

這里就以一幅圖來(lái)展示各個(gè)存儲(chǔ)的存在形式。

Kubernetes的持久化存儲(chǔ)解決方法

如上圖所示:

  • 最上層的pod和PVC由用戶(hù)管理,pod創(chuàng)建volume卷,并指定存儲(chǔ)方式。

  • 中間部分由集群管理者創(chuàng)建StorageClass對(duì)象,StorageClass只需確定PV屬性(存儲(chǔ)類(lèi)型,大小等)及創(chuàng)建PV所需要用的的存儲(chǔ)插件;K8s會(huì)自動(dòng)根據(jù)用戶(hù)提交的PVC來(lái)找到對(duì)應(yīng)的StorageClass,之后根據(jù)其定義的存儲(chǔ)插件,創(chuàng)建出PV。

  • 最下層指代各個(gè)實(shí)際的存儲(chǔ)資源。

PV和PVC

這里單獨(dú)來(lái)聊聊PV和PVC,也是實(shí)際應(yīng)用場(chǎng)景中最常用的一組概念,其中:

PV 是 PersistentVolume 的縮寫(xiě),譯為持久化存儲(chǔ)卷;PV 在 K8s 中代表一個(gè)具體存儲(chǔ)類(lèi)型的卷,其對(duì)象中定義了具體存儲(chǔ)類(lèi)型和卷參數(shù)。即目標(biāo)存儲(chǔ)服務(wù)所有相關(guān)的信息都保存在 PV 中,K8s 引用 PV 中的存儲(chǔ)信息執(zhí)行掛載操作。

PVC的存在,是從應(yīng)用角度對(duì)存儲(chǔ)卷進(jìn)行二次抽象;由于 PV 描述的是對(duì)具體存儲(chǔ)類(lèi)型,需要定義詳細(xì)的存儲(chǔ)信息,而應(yīng)用層用戶(hù)在消費(fèi)存儲(chǔ)服務(wù)的時(shí)候往往不希望對(duì)底層細(xì)節(jié)知道的太多,讓?xiě)?yīng)用編排層面來(lái)定義具體的存儲(chǔ)服務(wù)不夠友好。這時(shí)對(duì)存儲(chǔ)服務(wù)再次進(jìn)行抽象,只把用戶(hù)關(guān)系的參數(shù)提煉出來(lái),用 PVC 來(lái)抽象更底層的 PV。所以 PVC、PV 關(guān)注的對(duì)象不一樣,PVC 關(guān)注用戶(hù)對(duì)存儲(chǔ)需求,給用戶(hù)提供統(tǒng)一的存儲(chǔ)定義方式;而 PV 關(guān)注的是存儲(chǔ)細(xì)節(jié),可以定義具體存儲(chǔ)類(lèi)型、存儲(chǔ)掛載使用的詳細(xì)參數(shù)等。其具體的對(duì)應(yīng)關(guān)系如下圖所示:

Kubernetes的持久化存儲(chǔ)解決方法

使用方法

PVC 只有綁定了 PV 之后才能被 Pod 使用,而 PVC 綁定 PV 的過(guò)程即是消費(fèi) PV 的過(guò)程,這個(gè)過(guò)程是有一定規(guī)則的,下面規(guī)則都滿(mǎn)足的 PV 才能被 PVC 綁定:

  • VolumeMode:被消費(fèi) PV 的 VolumeMode 需要和 PVC 一致;

  • AccessMode:被消費(fèi) PV 的 AccessMode 需要和 PVC 一致;

  • StorageClassName:如果 PVC 定義了此參數(shù),PV 必須有相關(guān)的參數(shù)定義才能進(jìn)行綁定;

  • LabelSelector:通過(guò) label 匹配的方式從 PV 列表中選擇合適的 PV 綁定;

  • storage:被消費(fèi) PV 的 capacity 必須大于或者等于 PVC 的存儲(chǔ)容量需求才能被綁定。

PVC模板:

apiVersion: v1  kind: PersistentVolumeClaim  metadata:    name: disk-1  spec:    accessModes:    - ReadWriteOnce    resources:      requests:        storage: 20Gi    storageClassName: test-disk    volumeMode: Filesystem

PV模板:

apiVersion: v1  kind: PersistentVolume  metadata:    labels:      failure-domain.beta.kubernetes.io/region: cn-zn      failure-domain.beta.kubernetes.io/zone: cn-zn    name: d-wz9g2j5qbo37r2lamkg4  spec:    accessModes:    - ReadWriteOnce    capacity:      storage: 30Gi    flexVolume:      driver: alicloud/disk      fsType: ext4      options:        VolumeId: d-wz9g2j5qbo37r2lamkg4    persistentVolumeReclaimPolicy: Delete    storageClassName: test-disk    volumeMode: Filesystem

開(kāi)源存儲(chǔ)項(xiàng)目Ceph&Rook

圍繞云原生技術(shù)的工具和項(xiàng)目正在大量涌現(xiàn)。作為生產(chǎn)中最突出的問(wèn)題之一,有相當(dāng)一部分開(kāi)源項(xiàng)目致力于解決“在云原生架構(gòu)上處理存儲(chǔ)”這個(gè)問(wèn)題。

目前最受歡迎的存儲(chǔ)項(xiàng)目是Ceph和Rook。

Ceph是一個(gè)動(dòng)態(tài)管理的、水平可伸縮的分布式存儲(chǔ)集群。Ceph提供了對(duì)存儲(chǔ)資源的邏輯抽象。它被設(shè)計(jì)成不存在單點(diǎn)故障、可自我管理和基于軟件的。Ceph同時(shí)為相同的存儲(chǔ)集群提供塊、對(duì)象或文件系統(tǒng)接口。它能夠提供非常穩(wěn)定的塊存儲(chǔ)系統(tǒng),并且K8S對(duì)Ceph放出了完整的生態(tài),幾乎可以說(shuō)是全面兼容。

Ceph的架構(gòu)非常復(fù)雜,有許多底層技術(shù),如RADOS、librados、RADOSGW、RDB,它的CRUSH 算法和監(jiān)視器、OSD和MDS等組件。這里不深入解讀其架構(gòu),關(guān)鍵在于,Ceph是一個(gè)分布式存儲(chǔ)集群,它可提供更高的可伸縮性,在不犧牲性能的情況下消除了單點(diǎn)故障,并提供了對(duì)對(duì)象、塊和文件的訪(fǎng)問(wèn)的統(tǒng)一存儲(chǔ)。

Kubernetes的持久化存儲(chǔ)解決方法

對(duì)于Rook,我們可以從以下幾點(diǎn)來(lái)了解這個(gè)有趣的項(xiàng)目。它旨在聚合Kubernetes和Ceph的工具——將計(jì)算和存儲(chǔ)放在一個(gè)集群中。

  • Rook 是一個(gè)開(kāi)源的cloud-native storage編排, 提供平臺(tái)和框架;為各種存儲(chǔ)解決方案提供平臺(tái)、框架和支持,以便與云原生環(huán)境本地集成。

  • Rook 將存儲(chǔ)軟件轉(zhuǎn)變?yōu)樽晕夜芾?、自我擴(kuò)展和自我修復(fù)的存儲(chǔ)服務(wù),它通過(guò)自動(dòng)化部署、引導(dǎo)、配置、置備、擴(kuò)展、升級(jí)、遷移、災(zāi)難恢復(fù)、監(jiān)控和資源管理來(lái)實(shí)現(xiàn)此目的。

  • Rook 使用底層云本機(jī)容器管理、調(diào)度和編排平臺(tái)提供的工具來(lái)實(shí)現(xiàn)它自身的功能。

  • Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。

  • Rook使用Kubernetes原語(yǔ)使Ceph存儲(chǔ)系統(tǒng)能夠在Kubernetes上運(yùn)行。

所以在ROOK的幫助之下我們甚至可以做到一鍵編排部署Ceph,同時(shí)部署結(jié)束之后的運(yùn)維工作ROOK也會(huì)介入自動(dòng)進(jìn)行實(shí)現(xiàn)對(duì)存儲(chǔ)拓展,即便是集群出現(xiàn)了問(wèn)題ROOK也能在一定程度上保證存儲(chǔ)的高可用性,絕大多數(shù)情況之下甚至不需要Ceph的運(yùn)維知識(shí)都可以正常使用。

安裝方法

1. 獲取rook倉(cāng)庫(kù):

https://github.com/rook/rook.git

2. 獲取部署yaml文件

rook倉(cāng)庫(kù)中,

cluster/examples/kubernetes/ceph/common.yaml 文件。

#運(yùn)行common.yaml文件   kubectl create -f common.yaml

3. 安裝operator

編排文件為

/cluster/examples/kubernetes/ceph/operator.yaml

#運(yùn)行operator.yaml文件  kubectl create -f operator.yaml

4. 安裝完成之后,需要等待所有操作器正常運(yùn)行之后才能繼續(xù)還是ceph分部署集群的安裝

  1. #獲取命名空間下運(yùn)行的pod,等待所以的pod都是running狀態(tài)之后繼續(xù)下一步  

  2. kubectl -n rook-ceph get pod  


5. 創(chuàng)建Ceph集群

編排文件為

/cluster/examples/kubernetes/ceph/cluster.yaml

這里也需要進(jìn)行一定的基礎(chǔ)配置與修改才能繼續(xù),cluster.yaml文件內(nèi)容如下:

apiVersion: ceph.rook.io/v1  kind: CephCluster  metadata:    name: rook-ceph    namespace: rook-ceph  spec:    cephVersion:      image: ceph/ceph:v14.2.6      allowUnsupported: false    dataDirHostPath: /var/lib/rook    skipUpgradeChecks: false    continueUpgradeAfterChecksEvenIfNotHealthy: false    mon:      #這里是最重要的,mon是存儲(chǔ)集群的監(jiān)控器,我們K8S里面有多少主機(jī)這里的就必須使用多少個(gè)mon      count: 3      allowMultiplePerNode: false    dashboard:     #這里是是否啟用監(jiān)控面板,基本上都會(huì)使用       enabled: true      #監(jiān)控面板是否使用SSL,如果是使用8443端口,不是則使用7000端口,由于這是運(yùn)維人員使用建議不啟用      ssl: true    monitoring:      enabled: false      rulesNamespace: rook-ceph    network:      hostNetwork: false    rbdMirroring:      workers: 0    crashCollector:      disable: false    annotations:    resources:    removeOSDsIfOutAndSafeToRemove: false    storage:      useAllNodes: true      useAllDevices: true      config:    disruptionManagement:      managePodBudgets: false      osdMaintenanceTimeout: 30      manageMachineDisruptionBudgets: false      machineDisruptionBudgetNamespace: openshift-machine-api
#運(yùn)行cluster.yaml文件  kubectl create -f cluster.yaml

6. 創(chuàng)建ceph控制面板

如果上面部署時(shí),啟用了SSL則需要使用

/cluster/examples/kubernetes/ceph/dashboard-external-https.yaml,否則使用同目錄下的dashboard-external-http.yaml文件:

#dashboard沒(méi)有啟用SSL  kubectl create -f dashboard-external-http.yaml  #dashboard啟用SSL  kubectl create -f dashboard-external-https.yaml

7. 創(chuàng)建Ceph工具

運(yùn)維人員可以直接通過(guò)對(duì)這個(gè)容器的shell進(jìn)行Ceph集群的控制(后面有實(shí)例),編排文件是toolbox.yaml

#安裝Ceph工具  kubectl create -f toolbox.yaml

8,創(chuàng)建存儲(chǔ)系統(tǒng)與存儲(chǔ)類(lèi)

集群搭建完畢之后便是存儲(chǔ)的創(chuàng)建,目前Ceph支持塊存儲(chǔ)、文件系統(tǒng)存儲(chǔ)、對(duì)象存儲(chǔ)三種方案,K8S官方對(duì)接的存儲(chǔ)方案是塊存儲(chǔ),他也是比較穩(wěn)定的方案,但是塊存儲(chǔ)目前不支持多主機(jī)讀寫(xiě);文件系統(tǒng)存儲(chǔ)是支持多主機(jī)存儲(chǔ)的性能也不錯(cuò);對(duì)象存儲(chǔ)系統(tǒng)IO性能太差不考慮,所以可以根據(jù)要求自行決定。

存儲(chǔ)系統(tǒng)創(chuàng)建完成之后對(duì)這個(gè)系統(tǒng)添加一個(gè)存儲(chǔ)類(lèi)之后整個(gè)集群才能通過(guò)K8S的存儲(chǔ)類(lèi)直接使用Ceph存儲(chǔ)。

  • 塊存儲(chǔ)系統(tǒng)+塊存儲(chǔ)類(lèi)yaml文件:

apiVersion: ceph.rook.io/v1  kind: CephBlockPool  metadata:    name: replicapool    namespace: rook-ceph  spec:    failureDomain: host    replicated:      size: 3 #這里的數(shù)字分部署數(shù)量,一樣有幾臺(tái)主機(jī)便寫(xiě)入對(duì)應(yīng)的值  ---  apiVersion: storage.k8s.io/v1  kind: StorageClass  metadata:     name: rook-ceph-block  provisioner: rook-ceph.rbd.csi.ceph.com  parameters:      clusterID: rook-ceph      pool: replicapool      imageFormat: "2"      imageFeatures: layering      csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner      csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph      csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node      csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph      csi.storage.k8s.io/fstype: xfs  reclaimPolicy: Delete
  • 文件系統(tǒng)存儲(chǔ)yaml文件:

apiVersion: ceph.rook.io/v1  kind: CephFilesystem  metadata:    name: myfs    namespace: rook-ceph  spec:    metadataPool:      replicated:        size: 3 #這里的數(shù)字分部署數(shù)量,一樣有幾臺(tái)主機(jī)便寫(xiě)入對(duì)應(yīng)的值    dataPools:      - replicated:           size: 3 #這里的數(shù)字分部署數(shù)量,一樣有幾臺(tái)主機(jī)便寫(xiě)入對(duì)應(yīng)的值    preservePoolsOnDelete: true    metadataServer:      activeCount: 1      activeStandby: true
  • 文件系統(tǒng)存儲(chǔ)類(lèi)yaml文件:

apiVersion: storage.k8s.io/v1  kind: StorageClass  metadata:    name: csi-cephfs  provisioner: rook-ceph.cephfs.csi.ceph.com  parameters:    clusterID: rook-ceph    fsName: myfs    pool: myfs-data0    csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner    csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph    csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node    csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph  reclaimPolicy: Delete

總結(jié)

本文通過(guò)介紹并圖解K8s中各個(gè)存儲(chǔ)方案實(shí)現(xiàn)方式以及可選擇的開(kāi)源項(xiàng)目,為讀者呈現(xiàn)更全面的K8s存儲(chǔ)方案選擇。在我們實(shí)際的使用場(chǎng)景中,亦需要根據(jù)特定的需求來(lái)制定符合項(xiàng)目要求的存儲(chǔ)方案,從而達(dá)到最好的實(shí)現(xiàn)效果。也希望有更多的朋友能夠加入到kubernetes的隊(duì)伍中來(lái),讓kubernetes真正深入到眾多的用戶(hù)和企業(yè)中去。

“Kubernetes的持久化存儲(chǔ)解決方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI