首先介绍一下kubesphere是什么,是从官网上摘抄的。
KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。
作为全栈的多租户容器平台,KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。KubeSphere 为用户提供构建企业级 Kubernetes 环境所需的多项功能,例如多云与多集群管理、Kubernetes 资源管理、DevOps、应用生命周期管理、微服务治理(服务网格)、日志查询与收集、服务与网络、多租户管理、监控告警、事件与审计查询、存储管理、访问权限控制、GPU 支持、网络策略、镜像仓库管理以及安全管理等。
KubeSphere 支持独立部署与 Linux 主机中, 也支持直接部署于 Kubernetes 集群中。
我主要介绍的是基于kubernetes集群来部署kubesphere。官方文档有提供详细的部署文档,大家可以参考官网文档来进行部署,我这儿主要也是参考官方文档来进行部署的,但是在部署过程中遇到了一些问题,所以主要是记录一下部署过程中遇到问题的解决方法,让大家可以少走一些弯路,把时间节省下来。
使用最小化安装kubesphere,集群可用的资源符合 CPU > 1 Core,可用内存 > 2 G 。如果使用完整版本安装,集群可用的资源符合 CPU ≥ 8 Core,可用内存 ≥ 16 G。完整的版本, 开启了所有的 KubeSphere组件。
在部署kubesphere之前,k8s集群必须要有默认的存储类型(storageclass)。可以安装nfs,gfs,cephfs, openobs 等。如果没有安装默认的storageclass会导致服务部署不成功。会报这个错误:
Default StorageClass was not found !
缺少storageclass,下面我们执行下面的命令部署一下storageclass。
cat >> default-storage-class.yaml <<-EOF kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: local annotations: cas.openebs.io/config: | - name: StorageType value: "hostpath" - name: BasePath value: "/var/openebs/local/" kubectl.kubernetes.io/last-applied-configuration: > {"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"cas.openebs.io/config":"-\n value: \"hostpath\"\n- name: BasePath\n value: \"/var/openebs/local/\"\n" name: StorageType,"openebs.io/cas-type":"local","storageclass.beta.kubernetes.io/is-default-class":"true","storageclass.kubesphere.io/supported-access-modes":"[\"ReadWriteOnce\"]"},"name":"local"},"provisioner":"openebs.io/local","reclaimPolicy":"Delete","volumeBindingMode":"WaitForFirstConsumer"} openebs.io/cas-type: local storageclass.beta.kubernetes.io/is-default-class: 'true' storageclass.kubesphere.io/supported-access-modes: '["ReadWriteOnce"]' provisioner: openebs.io/local reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer EOF
kubectl apply -f default-storage-class.yaml
1、准备工作做完之后,执行下面两条命令开始安装kubesphere。我这边采用的是在kuberentes集群上最小化安装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
2、检查安装日志:
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
3、使用kubectl get pod --all-namespaces 查看所有 Pod 是否在 KubeSphere 的相关命名空间中正常运行。如果是,请通过以下命令检查控制台的端口(默认为30880)
4、确保在安全组中打开了端口30880,并通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。
安装的步骤虽然很简单,但是在执行完安装命令以后总是有服务没办法那么丝滑的立马运行起来。
由于我的storageclass使用的provisioner是openebs.io/local,但是我的服务器上并没有配置openebs存储,导致执行完部署脚本以后,redis一直起不来。redis的pvc一直报这个错误:
waiting for a volume to be created, either by external provisioner "openebs.io
需要在服务器安装openobs,安装的步骤如下所示:
使用Operator运行OpenEBS服务
wget https://raw.githubusercontent.com/openebs/openebs/master/k8s/openebs-operator.yaml kubectl apply -f openebs-operator.yaml
使用默认或自定义的storageclass:
wget https://raw.githubusercontent.com/openebs/openebs/master/k8s/openebs-storageclasses.yaml kubectl apply -f openebs-storageclasses.yaml
执行安装命令以后会运行openobs所需要有所有服务:
openobs部署好以后,redis就可以运行起来了。
在执行部署脚本之后,ks-apiserver无法正常运行,报这个错误:
mountvolume.setup failed for volume "kubesphere-config" : configmap "kubesphere-config" not found
查询报错信息,显示没有kubesphere-config这个configmap。应该去创建kubesphere-config这个configmap。但是在kubesphere的文档上看到有人调整了ks-apiserver的limit memory就好了,我查看ks-apiserver默认的limit memorr设置的是1G,我调整成4G,没想到ks-apiserver服务还真运行起来了。我也很纳闷,configmap跟内存有啥关系,先不管了。继续处理问题。
经过我多次部署kubesphere又卸载kubesphere,导致后面继续部署kubesphere服务的时候,只运行了ks-installer和redis服务,其他服务无法运行了。查看日志报这个错误:
service"ks-controller-manager" not found"
在多次安装卸载之后可能没有卸载干净,需要执行一下脚本进行重新安装。
https://raw.githubusercontent.com/kubesphere/ks-installer/release-3.1/scripts/kubesphere-delete.sh
然后会脚本会执行一段时间,会将之前安装的内容清理干净,该解决的问题都解决了。这时在重新部署服务就可以很丝滑的正常运行起来了。
访问kubesphere
默认账号密码 用户名: admin 密码: P@88w0rd