邢舟 /IBM 開源與開放標準工程院軟件工程師node
背景回顧:8 月 2 日 20:00,K8sMeetup 中國社區全新改版線上課堂,邀請邢舟老師以直播的方式進行了一場以《Kubernetes 存儲概覽 & Volume Provisioner》爲題的線上講解,反響熱烈。爲更好地爲學員整合問答,K8sMeetup 中國社區特別整理了本期 Q & A 模塊,感謝邢舟老師百忙之中進行校對。nginx
Kubernetes 存儲的主要應用場景 git
@青春$:本地掛載卷,好比一個 node上啓動倆個 nginx 怎麼作?github
A:兩個 nginx 實例麼?若是是的話,貌似須要配置 scheduler 讓其分配到同一個節點上,好比設置 node affinity 等選項。docker
Kubernetes 存儲模塊 數據庫
( ̄^ ̄)ゞ: 建立 pod 的 yaml 文件有沒有統一管理的工具?vim
A:若是您是指編輯 yaml 的話,目前我都是 vim 編輯的,其餘同事有好的編輯工具歡迎共享出來。若是是指保存的話,能夠在數據庫或者對象存儲裏統一保管,Kubernetes 有必定的版本保存功能(如deployment 等的 rolling update),但徹底的版本管理須要本身設置版本管理環境單獨保存。api
華: 存儲容量的配額管理怎麼作?安全
A:目前 Kubernetes 的配額管理統一經過 resourceQuota 對象完成,不過存儲容量的配額管理,尤爲是本地存儲配額的管理,目前 Kubernetes 還未實現。網絡
Sa.#:本地只能實現臨時存儲嗎?
A:不是的,在 Kubernetes 1.7 後出現了 LocalStorage 這種類型,能夠做爲 PV source 出現,相關文檔在:
https://kubernetes.io/docs/co...
歡型悠悠too:
A:只要後臺存儲支持掛載到多個節點,那麼在 pod spec 中引用相應的存儲對象就能夠實現將一個塊設備給多個 pod 使用。
Leon Shi: 存儲是怎樣實現多租戶隔離?
A:這個問題社區如今正在討論,對 LocalStorage 可能有一些 proposal, 不過目前基本沒什麼實現,你們能夠關注一下社區的進展。
逗號:pod scaling 的時候用的是同一個 volume 嗎?
A:若是是遠程網絡 volume 支持 RWX 的,是可使用同一個 volume 的,若是是本地臨時存儲或者不支持多掛載的,是不支持的。
Michael: 我如今有個需求就是,同類型的共享一個目錄?這個有什麼好的辦法嗎?
A:對映射目錄的問題,能夠查看官方文檔,目前僅 project volume 類型支持必定程度的同一目錄映射,文檔:https://kubernetes.io/docs/co...
JackShan:
A:Kubernetes 的塊設備是以插件形式提供的,目前已經提供了幾十種主流存儲平臺的插件。Kubernetes 官方插件列表請參考我上週分享中的PPT,裏面有一頁專門介紹。
想要看具體的信息,您也能夠參考文檔:https://kubernetes.io/docs/co...
在 Docker 安全這邊主要是權限方面的管理,能夠參考如下社區 ticket:
https://github.com/kubernetes...
尼克: pod 的存儲會不會跟隨 pod 在 nodes 上的分佈同樣分佈到不一樣的 node?
A:是的,須要掛載到 pod 所在的節點(針對遠程網絡存儲,本地存儲無所謂)
Michael: 如今社區有什麼好的辦法針對存儲這塊嗎?有什麼比較成熟的?
A:您能夠看一下社區的存儲插件列表,選擇一個存儲解決方案。但 Kubernetes 目前在存儲這一塊只實現了最基礎的功能。
馬詩潔:咱們的 resize 的話,這個會影響到現有的邏輯卷不,是備份原有數據而後從新劃份內存,而後數據恢復嗎?仍是說直接添加內存?
A:resize 問題請參考上面相似的問題,目前社區只有一個 proposal 計劃支持增長磁盤尺寸的。目前選擇的作法是直接動態擴大原來快設備的存儲,而後再改文件系統。
風雲:attach detach manager 和 volume manager 怎麼一塊兒工做,都會掛載 volume 嗎,仍是有分工?講師好像說過有個參數能夠去分工?
A:是的,但 volume manager 也能夠作 attach/detach 的工做。經過 kubelet 的參數 「--enable-controller-attach-detach=true」 區分。
H~Z~G:怎麼改變 Kubernetes 默認存儲路徑?
A:存儲路徑是在Container Spec中指定的,而後 Kubernetes 會經過Volume Manager和Volume Plugin實現attach和mount。
Yongkui:volume plugin 是各個廠商本身寫的?
A:官方提供了一組插件列表,請參見 PPT 中的總結。也可本身擴展,主要經過兩個接口:
1.external-storage-provisioner(https://github.com/kubernetes...
2.FlexVolume(https://kubernetes.io/docs/co...
牛海朋: 應用的配置文件是存在 volume 仍是 configmap 合適,有啥不同嗎?
A:通常推薦是使用 configmap, secret 或者 downward API 來完成 app 配置,這個過程能夠有 Kubernetes 將配置文件注入到 pod 的文件系統設置是環境變量裏面。若是走 volume,應該須要您將配置信息提早準備好放在 PV 上。
阿星:
A:我沒看到過 using 這個狀態,PV 的狀態基本就是 pending, available, bound,released 以及failed。能夠從 node 對象查看每一個 node 有哪些 volume attach,從 pod 對象能夠查看到須要使用的 pv 信息,反向的應該沒有(或者哪位同事熟悉這塊代碼能夠指正一下,謝謝)
Kubernetes 存儲目前存在的一些問題
官官久久: Accessmodes 的 RWO RWX 模式和 pod 的調度有關嗎?
A:目前沒有,但若是要作 RWO 和 RWX 的檢查的話,須要從 scheduler 開始作。
keon: Accessmode 不是有單節點讀寫,多節點只讀,多節點讀寫嗎?
A:目前的 AccessMode 包括:ReadOnlyMany(ROX), ReadWriteMany(RWX)和RWO(ReadWriteOnly)。詳細的AccessMode 介紹,推薦您去參照連接中的文檔:https://kubernetes.io/docs/co...
阿星:AccessMode 是否是隻用在 PV 和 PVC 的 bind 過程當中,跟底層的存儲特性沒有關聯?
A:是的,目前 Kubernetes 沒有在實際 attach 和 mount 過程當中執行 AccessMode檢查。
Infei:
A:多 pod 之間的數據一致性主要經過同一磁盤掛載到多個不一樣 pod 以及依賴存儲平臺的解決方案實現,目前這部份內容實現的比較弱,但能夠保證 pod 故障時數據不受影響,在 pod 重啓後,volume 會從新掛載到 pod。
PV、PVC & StorageClass
H~Z~G:PV、PVC 是什麼?
A:PV 和 PVC 是 Kubernetes 中的兩種資源,PV(Persistent Volume)表明一塊實際的後臺塊存儲設備;PVC(Persistent Volume Claim)表明的是 Pod 用戶對塊存儲的實際需求,PV 和 PVC 的綁定完成了實際塊存儲設備和存儲需求的綁定。
董明心: PV 和 PVC 必定是成對出現的麼?
A:不必定,但綁定時是 1-1 綁定的。能夠經過kubectl 命令單首創建 PV 和 PVC。
小清、劉衝:PVC 和 PV 是一對一仍是一對多?
A:PV 和 PVC 是一對一的關係,可是 PV 和 PVC 均可以經過 Kubectl create 來單首創建,未綁定的 PV 和 PVC 通常處於 available 和 Pending 狀態。
lota: 先建立 PVC?
A:沒有順序要求,均可以經過 kubectl create 命令分別建立。
Chao: PVC 找 PV 是隨機找的,仍是有相應匹配規則?可讓 PVC 綁定到指定 PV 嗎?
A:PVC 能夠指定須要綁定的 volume, 經過在 PVC 的 Spec 裏面定義實現。可是有一種狀況是預約的 PV 可能會被其餘 PVC 綁定。匹配規則主要是在 findBestMatch 方法中進行的,主要依據是兩方面: AccessMode 和磁盤容量,並知足最小匹配原則。
it2911: PVC 和 PV 的 resize 問題上,就 StroageClass 的擴容請問是否目前也是無解?
A:對,這個問題目前確實無解。通常兩種方案,一種是建立大的 volume,而後 data migration, 另外一種就是如今社區想採用的,直接 resize,而後更新 fs, 但第二種我以爲侷限性有點大,不少插件都不支持。
阿僕來耶:爲何 PV 建立的 yaml 中須要指定 StroageClass?
A:我理解是 PVC 須要指定 StroageClass? PVC 並不必定須要指定 StroageClass。StroageClass 個人理解主要爲了存儲的分類(如根據 io 等指標)以及 dynamic provisioning。PVC 能夠直接指定 PV 的名稱,也能夠經過三種其餘方式使用 StroageClass:
(1). 不指定,使用默認 StroageClass;
(2).指定空的 StroageClass, 讓 Kubernetes 自動匹配合適的 PV;
(3).指定一個 StroageClass, 使用 in-tree 或者 out-of-tree provisioner 建立塊設備。
☀歐帝☀:請問老師 readwriteonce 和 readwritemany 的區別是什麼?什麼場景能用many?
A:就是同一塊塊設備是否可以同時掛載到多個節點上,主要是爲了應用程序之間共享數據或者協同編輯數據用的。
柯蓬:
A:就是須要多個 pod 同時讀寫一個磁盤的場合,通常用於應用程序間的數據共享和協同操做。AccessMode 是須要後面存儲平臺支持的,即只有存儲平臺中的 volume 支持被掛載到多個節點時才支持,如 IBM SL Block, 目前就只能支持一個設備掛載到一個節點上。
Out of Tree Provisioner 的基本實現
張曉宇@serendipity: Cephfs 更改掛載方式 fuse 能夠用 out of tree 方式嗎?
A:Cephfs 應該有個 out-of-tree provisioner, 連接在: https://github.com/kubernetes... 有用過的同事能夠分享一下,謝謝。
Green: Kubernetes 與 Mesos 究竟是不是一個最佳實踐呢?
A:目前 IBM 的實踐來看,Mesos on Kubernetes 或者 Kubernetes on mesos 都並非好的選擇。 Kubernetes 社區也正在逐漸淡化二者之間的集成關係,主要緣由在於帶來的複雜性太高,用戶須要同時把握 Kubernetes、Mesos 以及二者之間的集成關係,一旦出現問題,很難診斷和解決。
Zing:如今 Kubernetes 在生產環境的實踐狀況怎麼樣?
A:由於我沒有參與過 Kubernetes 的實際生產部署,因此目前不瞭解實際的生產實踐。但我能夠邀請 IBM 或者其餘有生產實踐的企業嘉賓給你們作實際部署的分享,在實際部署方面,相信 Kubernetes 的坑仍是比較多的。若是你們感興趣,請把感興趣的話題發到羣裏以便咱們安排下一步的課程。