摘要:本文主要介紹如何用掛載目錄。如何創建參照上目錄下的范例,我們可以創建一個掛載存儲的容器。到這里,就可以確定容器已經正常啟動并掛載了一個的存儲塊。除非強制指定另塊被掛載后,寫入數據是可以很快同步的具體多久需要調查,而讀取數據只能在后同步。
本文主要介紹如何用kubernentes掛載rbd目錄。以及其中遇到的問題。有關ceph和rbd相關請自行百度。
如何創建參照github上kubernetes/examples/rbd/ 目錄下的范例,我們可以創建一個掛載rbd存儲的容器。前提是:
當前網絡中有一個ceph服務器
slaver節點上要安裝ceph client。
從ceph服務器上獲取client,monitor等關鍵信息。
具體步驟如下:
參照github上的案例,先創建一個secret
secret中存儲的是ceph client與server之間通信需要的keyring。我們可以在ceph server 機器上的/etc/ceph/目錄中找到許多keyring,這里選用 /etc/ceph/ceph.client.admin.keyring,其內容一般是:
key: AQADW11WlqGlMBAAYnKIIExLAlde8rG1SGAYQQ==
復制并替換ceph-secret,yaml中的相應字段(data字段下的‘key’)并保存。然后執行
kubectl create -f ceph-secret.yaml
并檢查secret是否創建成功。
創建容器,掛載rbd volume
創建容器時,通過json文件我們可以很清楚的看到,我們引用了一個secret(secretRef)。直接執行
kubectl create -f *.json
即可。
創建后我們通過kubectl get pods 就能看到容器是否創建,執行kubectl exec -it {podname} /bin/bash 進入容器,可以找到相應的掛在目錄。到這里,就可以確定容器已經正常啟動并掛載了一個rbd的存儲塊。
讀寫問題我們注意到創建容器的json文件中指定了"readOnly" :false,這意味著我們在容器里面可以隨意的在掛載目錄中創建/刪除文件。
那么,多個節點,多個容器是否可以共享一個存儲呢?
假設第一步我們創建的容器ca是在節點a上運行的,并且k8s集群中只有三臺slaver:a,b,c。
我們再創建一個實例數為5的replication controller,他也會掛載這個rbd塊,并且也是讀寫模式,創建后執行kubectl get pods 和 kubectl describe pod {podname},那么因為節點a上掛載了該rbd塊,k8s會youxian將新的rc中的容器逐一調度到其他機器上(b和c)。被調度到新機器上的容器,會在啟動過程中提示:
FailedSync Error syncing pod, skipping: rbd: image testdevice is locked by other nodes
意思是這個rbd塊已經被別的節點鎖定了(就是說節點a已經鎖定了該rbd塊,其他節點不能再掛載它)。而rc中剩余的pod,會直接無法調度,并提示:
pod (rbdrc-cokvq) failed to fit in any node
fit failure on node (10.126.72.31): NoDiskConflict
fit failure on node (10.126.72.32): NoDiskConflict
fit failure on node (10.126.72.33): NoDiskConflict
意思是k8s找不到‘還沒有分配這個rbd塊’的節點。
如果我們強制將該rc指定部署到之前的a節點上呢?通過"nodeName":{nodeIP}可以指定將rc中的pod優先部署到指定的節點上,嘗試之后,發現容器可以正常運行。
結論1:rbd掛載以節點為粒度,如果某節點上的某容器以讀寫模式掛載了rbd塊,那么該rbd塊就會被該節點鎖定。
如果我們新建的rc不是可讀寫的,而是只讀的呢?
rbdrc-nu32o 1/1 Running 0 5m
rbdrc-olv14 0/1 Pending 0 5m
rbdrc-qyw2u 0/1 Pending 0 5m
rbdrc-rxmdr 1/1 Running 0 5m
rbdrc-snd3x 0/1 Pending 0 5m
我們可以看到只有兩個pod正常運行。我們用kubectl describe pod {podname}檢查這幾個pod,發現running狀態的兩個pod分別被調度到了b,c節點都處于NoDiskConflict狀態。
結論2:如果某節點上的某容器以讀寫模式掛載了rbd塊,那么其他節點依然可以對這個塊進行只讀模式的掛載。
結論3:k8s會對掛載rbd的pod進行唯一調度,就是說若某個節點掛載了rbd塊A1,k8s會將后續掛載A1的pod調度到別的節點部署。(除非強制指定)
另:ceph rbd塊被掛載后,寫入數據是可以很快同步的(具體多久需要調查),而讀取數據只能在map后同步。這就是說,如果同時又一個讀寫的容器a和一個只讀容器b在運行,在容器a中新寫入的數據,只用把容器銷毀并重啟,才能同步并讀到新的數據。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26571.html
摘要:邢舟開源與開放標準工程院軟件工程師背景回顧月日,中國社區全新改版線上課堂,邀請邢舟老師以直播的方式進行了一場以存儲概覽為題的線上講解,反響熱烈。為更好地為學員整合問答,中國社區特別整理了本期模塊,感謝邢舟老師百忙之中進行校對。 邢舟 /IBM 開源與開放標準工程院軟件工程師 背景回顧:8 月 2 日 20:00,K8sMeetup 中國社區全新改版線上課堂,邀請邢舟老師以直播的方式進行...
摘要:本文主要介紹如何用掛載目錄。如何創建參照上目錄下的范例,我們可以創建一個掛載存儲的容器。到這里,就可以確定容器已經正常啟動并掛載了一個的存儲塊。除非強制指定另塊被掛載后,寫入數據是可以很快同步的具體多久需要調查,而讀取數據只能在后同步。 本文主要介紹如何用kubernentes掛載rbd目錄。以及其中遇到的問題。有關ceph和rbd相關請自行百度。 如何創建 參照github上kube...
摘要:距離上一次版本發布三個月之隔,是今年的第三個主要版本。證書輪換證書輪換功能現已進入狀態。這一功能可以在當前證書到期時自動續訂密鑰和服務器的證書。更多包含許多修復和內部組件的改進,此次的更新明顯側重于穩定核心以及使現有的功能成熟。 Kubernetes1.12已于今日全新發布!Kubelet證書輪換、資源配額優先級、掛載命名空間、對Azure的增強支持等10大亮點功能,本文為你一一解讀!...
摘要:功能強大擴展性高,在許多人看來,它正在成為云計算的終極解決方案。我已經多次給具有豐富存儲和云計算經驗的人解釋過這些問題,他們幾乎都是抓耳撓腮,不明白這是怎么回事。和可能因為和使用起來太麻煩了,在年月,隨著版本的發布,引入了動態納管和的概念。 Kubernetes存儲全解!你知道PV和PVC的區別嗎?storage class和provisioner是什么關系?VolumeClaimTe...
摘要:存儲方面,容器目前支持了兩種類型的存儲可以多點讀寫的網絡文件系統和僅單點讀寫的云硬盤。通過添加對協議的支持,輕量級虛擬機可以直接對接到服務,從而實現了對高性能的型云硬盤掛載和使用。Cube誕生背景 隨著云原生技術的推廣及落地,容器技術在企業生產環境中的使用比重越來越大。Kubernetes作為容器編排的事實標準,在企業服務中被大量采用。UCloud容器團隊在2018年推出了Kubern...
閱讀 3278·2023-04-26 00:57
閱讀 600·2021-10-08 10:05
閱讀 1345·2021-09-08 09:36
閱讀 4147·2021-08-12 13:31
閱讀 2542·2019-08-30 15:55
閱讀 2237·2019-08-30 15:55
閱讀 1013·2019-08-30 15:55
閱讀 2684·2019-08-29 13:17