StorageClass應用:NFS

更新於 發佈於 閱讀時間約 10 分鐘

在建置完Kubernetes cluster之後,通常我會做的前幾件事之一就是建立一個StorageClass給應用服務使用,而NFS我認為是相對容易實現的做法。

透過網路取得共享的資料

接下來將分成幾個部分跟大家說明:

(1) StroageClass是什麼?

(2) 為什麼需要它?

(3) 運行的流程

(4) 部署NFS StorageClass

那就開始吧!!


1. StorageClass是什麼?

官方定義如下:
StorageClass提供了一種供管理員描述其提供的存儲類別的方式。不同的類別可能映射到服務品質水平、
備份策略,或由叢集管理員決定的任意策略。Kubernetes 本身對類別代表的內容保持中立。在儲存系統中
,一般可以被稱為"Profile"


StorageClass物件內將定義:

  • PV的屬性,包含儲存的類型,Volume Size…
  • 這個PV要用到那種Plugin

當描述了以上資訊後,Kubernetes就可以透過PVC找到對應的StorageClass,再由Kubernetes直接調用StorageClass內定義的plugin,再建立出相對應的PV資源。

2. 為什麼要使用StorageClass?

不想因為手動建立PV的失誤反而造成我的PVC無法綁定PV而造成應用服務失敗。只要我寫好PVC,直接讓Kubernetes來管理我的PV資源就好。

如果在大規模的Cluster環境之下,如果不使用StorageClass,就代表有1000個PVC,就要手動建立1000個PV,在管理上就會是一場容易知道儲存的需求。

儲存需求依照不同特性進行分類

3. 運行的流程

From: https://forum.huawei.com/enterprise/en/dynamic-provisioning-with-kubernetes-storage-classes-huawei-evs/thread/694728783145353216-667213860102352896

From: https://forum.huawei.com/enterprise/en/dynamic-provisioning-with-kubernetes-storage-classes-huawei-evs/thread/694728783145353216-667213860102352896

本文針對NFS provisioner還可以再簡化成下圖:

raw-image

建立NFS provisioner之後,當PVC進行宣告後,就會連接到storageclass自動產生以NFS協定為基礎的PV資源來提供儲存。

4. 部署StorageClass

(1) 建立nfs server

# cat >> /etc/fstab << EOF
/dev/vg00/nfs /var/nfsshare xfs defaults 0 0
EOF
// 安裝nfs-server

# yum install -y nfs-utils policycoreutils-python-utils policycoreutils-python
# mkdir /var/nfsshare
# chmod 777 /var/nfsshare
# cat > /etc/exports << EOF
/var/nfsshare *(rw,sync,no_wdelay,no_root_squash,insecure)
EOF

# systemctl start rpcbind nfs-server nfs-lock nfs-idmap
# systemctl enable rpcbind nfs-server nfs-lock nfs-idmap
# systemctl start rpcbind nfs-server nfs-lock nfs-idmap
//設定Firewalld放行規則

# export FIREWALLD_DEFAULT_ZONE=`firewall-cmd --get-default-zone`
# echo ${FIREWALLD_DEFAULT_ZONE}
public

# firewall-cmd --permanent --zone=${FIREWALLD_DEFAULT_ZONE} --add-service=rpc-bind
# firewall-cmd --permanent --zone=${FIREWALLD_DEFAULT_ZONE} --add-service=nfs
# firewall-cmd --permanent --zone=${FIREWALLD_DEFAULT_ZONE} --add-service=mountd
# firewall-cmd --reload ; firewall-cmd --list-all
//設定SELINUX

# setsebool -P nfs_export_all_rw 1
# setsebool -P nfs_export_all_ro 1
# semanage fcontext -a -t public_content_rw_t "/var/nfsshare(/.*)?"
# restorecon -R /var/nfsshare
//測試

# mount -t nfs nfs-server:/var/nfsshare /mnt
# touch /mnt/1 && rm -f /mnt/1

(2) 建立NFS provisioner in Kubernetes

//取得資源

# git clone https://github.com/kubernetes-incubator/external-storage.git kubernetes-incubator
// 建立namespace

# kubectl create namespace k8s-nfs-storage
// 更新 deployment與RBAC

# cd kubernetes-incubator/nfs-client/
# sed -i'' "s/namespace:.*/namespace: k8s-nfs-storage/g" ./deploy/rbac.yaml
# sed -i'' "s/namespace:.*/namespace: k8s-nfs-storage/g" ./deploy/deployment.yaml
# kubectl create -f rbac.yaml
// 更新權限

# kubectl adm policy add-scc-to-user hostmount-anyuid system:serviceaccount:k8s-nfs-storage:nfs-client-provisioner
// 修改deployment.yaml

containers:
- name: nfs-client-provisioner
image: groundhog2k/nfs-subdir-external-provisioner:v3.2.0
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: storage.io/nfs
- name: NFS_SERVER
value: 192.168.1.10
- name: NFS_PATH
value: /var/nfsshare
volumes:
- name: nfs-client-root
nfs:
server: 192.168.1.10
path: /var/nfsshare
// 更新class.yaml

# vim deploy/class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: storage.io/nfs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
archiveOnDelete: "false"
// 部署

# kubectl create -f deploy/class.yaml
# kubectl create -f deploy/deployment.yaml
# kubectl get all -n k8s-nfs-storage
raw-image

後續使用資料夾內的test-pvc.yaml測試是否可以正確的自動產生對應的PV並且PVC有取得資源。

如果要修改預設的storageClass,可以使用以下方式實現:

# kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
storageclass.storage.k8s.io/managed-nfs-storage patched

以上就是基本的NFS storageclass的部署與StorageClass的說明,還有一些storageclass的操作後續文章再跟大家分享。


References:

留言
avatar-img
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
這篇文章教你如何搭建Kubernetes Cluster,包括節點安裝前設定、軟體套件安裝、Control-Plane部署和加入運算節點等步驟。在建置之後,作者會分享一些基礎服務的安裝。希望這篇文章對你有所幫助。
Thumbnail
這篇文章教你如何搭建Kubernetes Cluster,包括節點安裝前設定、軟體套件安裝、Control-Plane部署和加入運算節點等步驟。在建置之後,作者會分享一些基礎服務的安裝。希望這篇文章對你有所幫助。
Thumbnail
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
Thumbnail
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
Thumbnail
本篇將補完上一篇所提到關於StatefulSet的實作部份。
Thumbnail
本篇將補完上一篇所提到關於StatefulSet的實作部份。
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
本文將說明關於Local volume 與hostPath二種類型的差異與一些注意事項。
Thumbnail
今天分別針對3個基本中的基本資源物件類型來說明
Thumbnail
今天分別針對3個基本中的基本資源物件類型來說明
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News