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.18
sed -i'' "s/namespace:.*/namespace: nfs-system/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
grep "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-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: nfs-system
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/yangbin-docker/nfs-subdir-external-provisioner:v4.0.2
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: 192.168.72.130
- name: NFS_PATH
value: /opt/nfs/data/kubesphere
volumes:
- name: nfs-client-root
nfs:
server: 192.168.72.130
path: /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博客