Longhorn項目是Rancher Labs推出的開源的基於雲和容器部署的分佈式塊存儲新方式。Longhorn遵循微服務的原則,利用容器將小型獨立組件構建爲分佈式塊存儲,並使用容器編排來協調這些組件,造成彈性分佈式系統。前端
自2017年4月Longhorn項目發佈以來,人們對在Kubernetes集羣上運行Longhorn存儲就產生了極大的興趣。近日,Longhorn v0.2版本發佈了,它可支持任何Kubernetes集羣的持久化存儲實現!node
現在,基於雲和容器的部署規模日益擴大,分佈式塊存儲系統也正變得愈來愈複雜,單個存儲控制器上的volume數量在不斷增長。2000年代初,存儲控制器上的volume數量只有幾十個,但現代雲環境卻須要數萬到數百萬的分佈式塊存儲卷。存儲控制器變成了高度複雜的分佈式系統。nginx
分佈式塊存儲自己比其餘形式的分佈式存儲(如文件系統)更簡單。不管系統中有多少volume,每一個volume只能由單個主機進行裝載。正因如此,咱們設想,是否能夠將大型塊存儲控制器分割成多個較小的存儲控制器?若想要如此分割,咱們須要保證這些volume仍然是從公共磁盤池構建的,而且咱們須要有辦法來編排這些存儲控制器,讓它們能夠協同工做。git
爲了將這一想法發揮到極限,咱們建立了Longhorn項目。這是一個咱們認爲值得探索的方向,每一個控制器上只有一個volume,這將大大簡化存儲控制器的設計。由於控制器軟件的故障域僅限於單個volume,因此控制器若崩潰,也只會影響一個volume。github
Longhorn充分利用了近年來關於如何編排大量的容器和虛擬機的核心技術。例如,Longhorn並無構建一個能夠擴展到100,000個volume的高度複雜的控制器,而是出於讓存儲控制器簡單輕便的考慮,建立了100,000個單獨的控制器。而後,咱們能夠利用像Swarm、Mesos和Kubernetes這樣的最早進的編排系統來調度這些獨立的控制器,共享一組磁盤中的資源,協同工做,造成一個彈性的分佈式塊存儲系統。api
Longhorn基於微服務的設計還有不少其餘優點。由於每一個volume都有本身的控制器,在升級每一個volume的控制器和replica容器時,是不會致使IO操做明顯的中斷的。 Longhorn能夠建立一個長期運行的工做來編排全部live volume的升級,同時確保不會中斷系統正在進行的操做。爲確保升級不會致使意外的問題,Longhorn能夠選擇升級一小部分volume,並在升級過程當中出現問題時回滾到舊版本。這些作法在現代微服務應用中已獲得普遍應用,但在存儲系統中並不常見。咱們但願Longhorn能夠助力於微服務在存儲領域的更多應用。服務器
共享資源池:將本地磁盤或安裝在計算或專用存儲主機中的網絡存儲造成共享資源池。微信
爲容器和虛擬機建立塊存儲卷:你能夠指定volume的大小,IOPS的需求,以及你想要的跨主機的同步replica的數量(這裏的主機是指那些爲volume提供存儲資源的主機)。replica是在底層磁盤或網絡存儲上精簡配置的。網絡
爲每一個volume建立一個專用的存儲控制器:這多是與大多數現有的分佈式存儲系統相比,Longhorn最具特點的功能。大多數現有的分佈式存儲系統一般採用複雜的控制器軟件來服務於從數百到數百萬不等的volume。但Longhorn不一樣,每一個控制器上只有一個volume,Longhorn將每一個volume都轉變成了微服務。分佈式
跨計算或存儲主機調度多個replica:Longhorn會監測每個replica的健康情況,對問題進行維修,並在必要時從新生成replica。
以Docker容器的形式操做存儲控制器和replica:例如,一個volume有三個replica,就意味着有四個容器。
爲每一個volume分配多個存儲「前端」:常見的前端包括Linux內核設備(映射到/ dev / longhorn)和iSCSI目標。 Linux內核設備適用於支持Docker volume,而iSCSI目標更適合支持QEMU / KVM和VMware volume。
建立volume快照和AWS EBS風格的備份:您能夠爲每一個volume建立多達254個快照,這些快照能夠逐個備份到NFS或S3兼容的輔助存儲中。只有更改的字節會在備份操做期間被複制和存儲。
指定按期快照和備份操做的計劃:您能夠指定這些操做的頻率(每小時,天天,每週,每個月和每一年)、執行這些操做的確切時間(例如,每一個星期日凌晨3:00),以及保留多少個循環快照和備份集。
Longhorn v0.2 支持任何Kubernetes集羣的持久性存儲。一旦被部署到Kubernetes集羣上,Longhorn會自動地將Kubernetes集羣中全部節點上所有可用的本地存儲聚爲集羣,產生複製的以及分佈式的塊存儲。你能夠在Longhorn volume上執行快照和備份操做,並將它們同步複製到多個節點上。
咱們已經移植了Longhorn Manager做爲Kubernetes Controller。全部Longhorn狀態都存儲爲Custom Resource Definitions(自定義資源定義,CRD)。Longhorn也不須要單獨的etcd服務器。另外,Longhorn Manager公開了執行Longhorn volume操做和快照 / 備份操做的API,這些API將在Longhorn UI和Kubernetes Flexvolume驅動程序執行操做的過程當中使用。
運行下面的這條指令,就能夠在你的Kubernetes集羣上部署整個Longhorn存儲系統:
kubectl create -f https://raw.githubusercontent.com/rancher/longhorn/v0.2/deploy/longhorn.yaml
若是你使用的是GKE,請參考這裏:https://github.com/rancher/longhorn/blob/master/README.md#google-kubernetes-engine
部署以後,你能夠在UI界面經過查看Kubernetes服務找到適合的IP:kubectl -n longhorn-system get svc
如今你可使用 100.200.200.123 或經過 <node_ip>:12345 訪問UI。
Longhorn提供了Kubernetes的徹底集成。
你能夠像下面這樣經過Longhorn用卷備份建立一個pod:
apiVersion: v1 kind: Pod metadata: name: volume-test namespace: default spec: containers: - name: volume-test image: nginx:stable-alpine imagePullPolicy: IfNotPresent volumeMounts: - name: voll mountPath: /data ports: - containerPort: 80 volumes: - name: voll flexVolume: driver: "rancher.io/longhorn" fsType: "ext4" options: size: "2Gi" numberOfReplicas: "3" staleReplicaTimeout: "20" fromBackup: ""
Longhorn還支持動態的provisioner。好比,你能夠在Kubernetes像這樣定義一個StorageClass:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn provisioner: rancher.io/longhorn parameters: numberOfReplicas: "3" staleReplicaTimeout: "30" fromBackup: ""
接着建立一個PVC(PersistentVolumeClaim)並在Pod中使用它:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: longhorn-volv-pvc spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 2Gi --- apiVersion: v1 kind: Pod metadata: name: volume-test namespace: default spec: containers: - name: volume-test image: nginx:stable-alpine imagePullPolicy: IfNotPresent volumeMounts: - name: volv mountPath: /data ports: - containerPort: 80 volumes: - name: volv persistentVolumeClaim: claimName: longhorn-volv-pvc
始終秉承開源理念的Rancher Labs,推出的Longhorn依然是100%的開源軟件。您能夠在GitHub上下載Longhorn: https://github.com/rancher/longhorn
直到今日,Longhorn依然在持續不斷的優化更新之中。歡迎在GitHub上或Rancher微信羣中爲Rancher團隊提供寶貴的意見與反饋❤️