KubeSphere簡介
KubeSphere 是一款功能強大的容器管理平臺,以下是其簡介:
1)基本信息
- 開源項目:基于 Apache-2.0 授權協議開源,由 Google Go、Groovy、HTML/CSS 和 Shell 等多種編程語言開發。
- 基礎架構:以 Kubernetes 為內核,架構具有即插即用特性,可運行在私有云、公有云、混合云等多種環境,支持多云與多集群的統一管理。
2)功能特性
- 全棧 IT 自動化:提供從 Kubernetes 集群搭建到運維的全棧 IT 自動化能力,支持在線和離線安裝、升級與擴容。
- 可視化資源管理:提供可視化的 Kubernetes 資源管理界面,用戶可通過向導式界面輕松創建和管理各種 K8s 資源。
- 強大的 DevOps 功能:內置基于 Jenkins 的 DevOps 系統,支持圖形化和腳本兩種方式的 CI/CD 流水線構建,還提供 S2I 和 B2I 等 CD 工具。
- 微服務治理出色:基于 Istio 提供可視化無代碼侵入的灰度發布、熔斷、流量治理等功能,同時支持分布式 Tracing。
- 多租戶管理:提供基于角色的細粒度統一認證,支持對接企業 LDAP/AD,實現多層級的權限管理。
- 可觀察性強:提供集群、工作負載、Pod、容器等多維度的監控,支持基于多租戶的日志查詢與日志收集,提供節點與應用層級的告警與通知功能。
- 基礎設施管理全面:支持 Kubernetes 節點管理、節點擴容與集群升級,支持對接多種存儲系統,提供可視化運維管理 PVC、StorageClass 的功能,并支持 CSI 插件對接云平臺存儲。
- 網絡管理靈活:提供租戶網絡隔離與 K8s NetworkPolicy 管理功能,支持 Calico、Flannel 等多種網絡插件,并提供 Porter LB 用于暴露物理環境 K8s 集群的 LoadBalancer 服務。
- 支持 GPU 資源管理:可運行 TensorFlow 等 ML 框架,為 AI 和大數據應用提供支持。
- 技術架構:采用前后端分離設計,后端各個功能組件可通過 REST API 對接外部系統,這種設計讓其能靈活運行在各種 Kubernetes、私有云、公有云、VM 或物理環境之上。
3)應用場景
- 助力業務數字化轉型:幫助企業一步升級容器架構,適應數字化轉型需求。
- 降低運維復雜度:通過多維管控 Kubernetes,讓運維工作更加輕松。
- 推動企業 DevOps 落地:實現敏捷開發與自動化運維,提升開發和運維效率。
- 升級云原生架構:提供靈活的微服務解決方案,助力企業構建云原生架構。
- 釋放硬件最大效能:基于物理環境構建全棧容器架構,充分利用硬件資源。
在本次部署中選擇用NFS作為存儲
1、為什么需要用到NFS?
- 提供持久化存儲:在 KubeSphere 中,應用產生的數據需要持久化保存,如數據庫的存儲、應用的配置文件等。NFS 能將服務器上的目錄共享給 Kubernetes 集群中的多個節點,使容器在重啟或在不同節點間遷移時,仍可訪問到相同的數據,保證應用的正常運行和數據的一致性。
- 實現數據共享:KubeSphere 中的多個容器或應用可能需要共享數據,NFS 允許不同節點上的容器掛載同一個 NFS 共享目錄,實現數據的共享和交換,便于應用之間協作。比如,多個 Web 應用容器可能需要共享靜態資源文件,通過 NFS 就可以方便地實現。
- 簡化存儲管理:NFS 的配置和管理相對簡單。管理員只需在 NFS 服務器上配置共享目錄和訪問權限,KubeSphere 集群中的節點即可通過網絡掛載 NFS 目錄,無需在每個節點上單獨配置復雜的存儲設備和管理策略,降低了存儲管理的難度和成本。
- 支持動態卷供應:結合 Kubernetes 的 NFS Subdir External Provisioner 插件,NFS 能為 KubeSphere 提供動態卷供應能力。當有新的 PersistentVolumeClaim(PVC)創建時,系統可自動根據 StorageClass 的配置,在 NFS 服務器上創建對應的存儲卷并掛載到需要的容器中,提高了存儲資源的分配效率和靈活性。
- 兼容性和通用性:NFS 是一種廣泛支持的網絡存儲協議,與 KubeSphere 及 Kubernetes 生態系統中的許多組件和應用都有良好的兼容性。大多數容器化應用都能輕松地使用 NFS 作為存儲后端,無需進行大量的適配工作,方便用戶在 KubeSphere 平臺上部署各種類型的應用。
2、?在KubeSphere部署中,NFS和其他存儲方案對比有什么優缺點?
在 KubeSphere 部署中,NFS 和其他常見存儲方案(如本地磁盤、Ceph、Longhorn)對比如下:
2.1、NFS存儲方案
優點
- 簡單易維護:設置和維護相對容易,管理人員只需在 NFS 服務器上配置共享目錄和訪問權限,即可實現存儲共享,對技術要求相對較低。
- 共享能力強:允許多個節點和 Pod 同時訪問相同的文件系統,能很好地滿足多個應用或容器之間共享數據的需求。
- 成本低廉:通常運行在標準的硬件和網絡基礎設施上,無需特殊的存儲硬件設備,可顯著降低存儲成本。
- 動態供給:通過使用 NFS 客戶端動態配置器,如 nfs-client-provisioner,Kubernetes 可以動態創建和管理持久化卷,提高存儲資源的分配效率。
- 兼容性廣泛:作為得到廣泛支持的文件共享協議,與許多云服務提供商和存儲解決方案都兼容,大多數容器化應用都能輕松使用。
缺點
- 存在單點故障:NFS 服務器一旦出現問題,所有依賴它的服務都可能受到影響,導致業務中斷。
- 性能瓶頸:在高負載和大量并發訪問的場景下,性能可能不如專為容器化環境設計的存儲解決方案。
- 網絡依賴嚴重:性能和穩定性高度依賴網絡質量,網絡問題可能導致連接異常或中斷,影響應用的正常運行。
- 容量管理困難:難以限制實際使用容量,可能導致存儲空間的過度使用,造成存儲資源的浪費。
- 數據安全風險:本身不提供數據冗余或備份功能,需要額外配置以確保數據安全,在處理敏感數據時安全性相對較弱。
2.2、本地磁盤存儲方案
優點
- 性能卓越:磁盤和應用系統中間的 IO 路徑最短,可以提供最佳的性能,能滿足 IO 密集型應用對磁盤讀寫速度的要求。
- 數據可靠:通過 RAID 技術可以避免因單個磁盤故障而導致的數據丟失,提供了一定程度的可靠性保證。
- 部署簡單:在服務器的硬盤槽上插上硬盤,利用 HBA 卡或軟件的方式制作 RAID,劃分邏輯卷,格式化成某種文件系統后,掛載到容器中即可。
缺點
- 數據不可遷移:由于容器的動態性,Pod 漂移至其他節點時,無法使用之前節點磁盤上的數據,限制了 Pod 的調度靈活性。
- 缺乏節點級高可用:當物理節點發生故障時,數據都存儲在故障節點上,應用無法在其他節點恢復運行。
- 擴展困難:業務使用的存儲空間受限于本地磁盤的大小,達到磁盤空間上限后難以擴容,且部署 RAID 耗時較長,難以快速部署大量應用系統。
2.3、Ceph 存儲方案
優點
- 高擴展性:能夠輕松應對大規模數據存儲需求,可通過添加節點實現性能和容量的線性擴展。
- 高可靠性:采用分布式架構,數據分布在多個節點上,通過數據冗余和副本機制確保數據的高可用性和可靠性。
- 支持多種存儲類型:支持塊存儲、對象存儲和文件存儲等多種存儲類型,能滿足不同應用場景的需求。
缺點
- 部署和管理復雜:需要專業的知識和技能進行部署、配置和維護,對運維人員要求較高。
- 性能優化難度大:由于涉及多個組件和復雜的網絡拓撲,性能優化需要深入了解其架構和原理,難度較大。
- 資源消耗較高:為了保證性能和可靠性,Ceph 需要較多的計算和存儲資源,成本相對較高。
2.4、Longhorn 存儲方案
優點
- 輕量級高可用:特別適用于 Kubernetes 環境,提供易于使用的圖形界面,方便用戶進行管理和操作。
- 自動快照和備份:具備自動快照、備份和恢復等功能,可有效保護數據,降低數據丟失風險。
- 動態擴展:支持動態擴展,能夠根據業務需求靈活調整存儲容量。
缺點
- 功能相對有限:與一些功能強大的企業級存儲系統相比,功能可能不夠豐富,對于一些復雜的存儲需求可能無法滿足。
- 性能表現因環境而異:在不同的硬件和網絡環境下,性能表現可能存在較大差異,需要進行充分的測試和優化。
一、配置NFS
1、所有服務器節點安裝NFS服務
前面實驗已經安裝過參考博客:k8s基礎(6)—Kubernetes-存儲_kubectl delete pvc-CSDN博客
2、配置KubeSphere共享的目錄
#步驟一:創建共享目錄
mkdir -p /opt/nfs/data/kubesphere#步驟二:在/etc/exports文件中加入下面的行
/opt/nfs/data/kubesphere *(insecure,rw,sync,no_root_squash)#步驟三:重啟NFS服務
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs#步驟四:查看配置是否生效
exportfs -r
exportfs#步驟五:其他集群節點上查看配置是否生效
showmount -e 192.168.72.130
?
3、部署NFS Subdir External Provisioner 插件
作用:因為NFS沒有可以提供動態卷供應的能力,安裝NFS Subdir External Provisioner 插件,NFS 能為 KubeSphere 提供動態卷供應能力。當有新的 PersistentVolumeClaim(PVC)創建時,系統可自動根據 StorageClass 的配置,在 NFS 服務器上創建對應的存儲卷并掛載到需要的容器中,提高了存儲資源的分配效率和靈活性。
3.1、安裝步驟
#步驟一:創建安裝目錄
mkdir -p /opt/k8s/kubesphere && cd /opt/k8s/kubesphere#步驟二:下載壓縮包
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/archive/refs/tags/nfs-subdir-external-provisioner-4.0.18.zip#步驟三:下載后解壓
unzip nfs-subdir-external-provisioner-4.0.18.zip#步驟四:進入文件目錄
cd nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18#步驟五:創建命名空間(Namespace)方便管理
kubectl create ns nfs-system#步驟六:替換部署文件中的命名空間名稱
sed -i'' "s/namespace:.*/namespace: nfs-system/g" ./deploy/rbac.yaml ./deploy/deployment.yaml#步驟七:替換部署文件中的命名空間為nfs-system
cd /opt/k8s/kubesphere/nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18sed -i'' "s/namespace:.*/namespace: nfs-system/g" ./deploy/rbac.yaml ./deploy/deployment.yamlgrep "namespace:" ./deploy/* #驗證是否替換成功#步驟八:創建RBAC資源
cd /opt/k8s/kubesphere/nfs-subdir-external-provisioner-nfs-subdir-external-provisioner-4.0.18/deploy
kubectl apply -f rbac.yaml#步驟九:檢查NFS客戶端Provisioner部署是否成功#檢查 ServiceAccount輸出中是否包含 nfs-client-provisioner,確認 ServiceAccount 已經正確創建
kubectl get serviceaccount -n nfs-system|grep nfs-client-provisioner#檢查RBAC配置,確認ClusterRole和ClusterRoleBinding 是否已創建:
kubectl get clusterrole | grep nfs-client-provisioner-runner
kubectl get clusterrolebinding | grep run-nfs-client-provisioner#步驟十:
#1)配置deployment.yaml將nfs-subdir-external-provisioner:v4.0.2的鏡像地址改為自己的私有鏡像地址(注:nfs-subdir-external-provisioner:v4.0.2鏡像GitHub上獲取網絡受阻,可以先找到資源上傳到自己的私有倉庫中,可參考的源有:registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2)
#2)修改NFS_SERVER和NFS_PATH為NFS主機對應的IP和共享的目錄
#3)修改volumes中的server和path為NFS主機的IP和NFS共享的目錄
#如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: nfs-system
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: registry.cn-hangzhou.aliyuncs.com/yangbin-docker/nfs-subdir-external-provisioner:v4.0.2imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner- name: NFS_SERVERvalue: 192.168.72.130- name: NFS_PATHvalue: /opt/nfs/data/kubespherevolumes:- name: nfs-client-rootnfs:server: 192.168.72.130path: /opt/nfs/data/kubesphere#步驟十一:執行/nfs-subdir-external-provisioner部署命令
kubectl apply -f deployment.yaml#步驟十二:驗證插件是否部署成功
kubectl get deployment,pods -n nfs-system#步驟十三:部署StorageClass
kubectl apply -f class.yaml#檢查StorageClass是否部署成功
kubectl get sc
3.2、檢查Provisioner、ClusterRole、ClusterRoleBinding是否部署成功
3.3、檢查nfs-client-provisioner是否部署成功
?
3.4、檢查StorageClass是否部署成功
?
?二、部署KubeSphere
1.安裝核心組件 KubeSphere Core
1.1、安裝helm
#步驟一:下載helm安裝包
wget https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz#步驟二:解壓
tar -zxvf helm-v3.10.0-linux-amd64.tar.gz#步驟三:將helm配置成系統命令
mv linux-amd64/helm /usr/local/bin/helm
1.2、通過helm安裝KubeSphere的核心組件KubeSphere Core
helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.com.cn/main/ks-core-1.1.3.tgz --debug --wait \
--set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks \
--set extension.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks \
--set hostClusterName=k8s-paco
1.3、查看部署是否成功?
2、瀏覽器上輸入地址進行登錄驗證
2.1、在瀏覽器上輸入上述的地址?
2.2、修改密碼
三、KubeSphere模塊介紹
1、工作臺功能介紹
1.1、查看之前安裝的集群
?
1.2、集群節點(Nodes)
1.3、項目(NameSpace)?
1.4、工作負載
-
Deployment (自定義服務)
-
StatefulSet(有狀態副本集)
-
DaemonSet(守護進程集)
1.5、容器組(Pods)?
1.6、服務(Service)
?
1.7、配置
保密字典(Secret)
配置字典(ConfigMap)
1.8、配置
持久卷(pv)
持久卷聲明(pvc)
存儲類(StorageClass)
1.9、集群設置
2、擴展市場
在此可以安裝自己業務需要的組件
?
3、應用商店
?
參考文檔:KubeSphere部署安裝,接入KubeKey安裝的k8s集群_kubesphere 安裝部署-CSDN博客