KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。KubeSphere 为用户提供构建企业级 Kubernetes 环境所需的多项功能,例如多云与多集群管理、Kubernetes 资源管理、DevOps、应用生命周期管理、微服务治理(服务网格)、日志查询与收集、服务与网络、多租户管理、监控告警、事件与审计查询、存储管理、访问权限控制、GPU 支持、网络策略、镜像仓库管理以及安全管理等
kubesphere官方文档
这里是在以有的k8s集群上安装kubesphere,在以有的k8s集群上安装kubesphere,需要满足两个前置条件
详见:前置条件链接
我这里安装的是kubesphere的v3.4,它要求k8s的版本v1.20.x~v1.26.x之间
#查看k8s版本
kubectl version
输出
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.0", GitCommit:"b46a3f887ca979b1a5d14fd39cb1af43e7e5d12d", GitTreeState:"clean", BuildDate:"2022-12-08T19:58:30Z", GoVersion:"go1.19.4", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.9", GitCommit:"d1483fdf7a0578c83523bc1e2212a606a44fd71d", GitTreeState:"clean", BuildDate:"2023-09-13T11:25:26Z", GoVersion:"go1.20.8", Compiler:"gc", Platform:"linux/amd64"}
所以这里版本是满足的
集群中创建StorageClass和将其设置为默认 StorageClass可参考:
创建StorageClass
设置默认 StorageClass
查看集群中以有的StorageClass
kubectl get sc
输出
No resources found
显然我这里没有 StorageClass的资源,下面就创建一个StorageClass,并把这个创建的StorageClass设为默认的StorageClass
vim local-storage-class.yaml
#创建存储类,先创建一个local-storage-class.yaml,然后写入一下内容
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
#创建StorageClass资源
kubectl apply -f local-storage-class.yaml
#查看StorageClass
kubectl get sc
输出
StorageClass已经有了,接下来就将刚才创建的StorageClass设置为默认存储类
#将某个存储类设置为存储类
#kubectl patch storageclass StorageClass的NAME -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
PS:上面创建的storageclass 确实可以成功安装kubesphere,但是local-storage配合pvc无法动态创建pv。因此,创建storageclass 也可以使用nfs-storageclass ,详见创建nfs存储类
至此,kubesphere的安装前置条件已经满足,下面就是安装kubesphere了
安装参考链接
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.0/cluster-configuration.yaml
运行下面两条命令,只要没报错,使用下面命令查看安装进度,中间可能要等待一段时间(差不多8分钟左右),只要日志没报错,问题就不大
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
最后输出结果如下
开放服务器30880端口,浏览器访问ip:30880,默认用户名和密码为admin/P@88w0rd
至此kubesphere就安装完成了
PS:如果你要在主节点上安装kubesphere的话,还需要去除主节点上设置的taint(可以简单理解为允许pod在主节点调度)
#允许控制节点被调度
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
需要创建pvc,创建pvc时就会通过StorageClass自动创建pv,并完成pv与pvc的绑定,无需管理员提前创建好pv
点击下一步,创建
查看部署详情
其实使用上面ui界面创建Deployment,也是创建yaml文件,下面是kubesphere未本次部署创建的yaml文件
这时Deployment已经部署完成了,下面就是创建service,提供访问
service创建成功
访问测试,浏览器访问服务器外网ip+31556测试(前提是将服务器的端口防火墙放行)
访问成功,但是403,因为上面将ngxin容器的/usr/share/nginx/html目录挂载出来了,所以现在该目录下没有index.html。现在去该容器的目录下创建index.html或者到nfs的共享目录下找到nginx的挂载目录也可
再次浏览器访问测试
进入ngixn-dep部署的详情页可以查看容器日志,进入容器,调整副本数等等
为了测试kubesphere中ConfigMap的创建和使用,这里将redis.conf配置为ConfigMap挂载到redis容器下
下面还要设置容器的启动命令,因为会使用自定义的redis.conf
将容器里/data目录挂载出来,将redis-cfg configmap里的redis.conf键以文件的形式挂载到/usr/local/etc/redis目录下
部署成功
访问测试
PS:服务器防火墙30109要打开
上面redis只是单机部署,所以用StatefulSet 部署与Deployment 感觉没什么差别,有时间了整一个集群部署看看。这里仅展示了我对kubusphere的简单使用,kubesphere还很多强大且便利的功能,像检测告警,DevOps流水线支持等等
官方链接
写这些,仅记录自己学习使用k8s的过程。如果有什么错误的地方,还请大家批评指正。最后,希望小伙伴们都能有所收获。