KubeSphere简介
KubeSphere 愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。
简单来说,KubeSphere(下文简称ks)就是一个容器管理平台,可以图形化管理多个K8S集群。
相关链接:
安装准备
参考在 Kubernetes 上安装 KubeSphere - 准备工作,确认环境满足ks安装需求。
k8s版本
计划安装kubesphere-v3.3.0版本,需要确认 Kubernetes 版本必须为:v1.19.x,v1.20.x,v1.21.x,v1.22.x 或 v1.23.x(实验性支持)。
资源
可用 CPU > 1 核;内存 > 2 G。CPU 必须为 x86_64,暂时不支持 Arm 架构的 CPU。
StorageClass
Kubernetes 集群已配置默认 StorageClass(请使用 kubectl get sc
进行确认)。
这一条是最重要的,因为k8s集群默认并不会配置storageclass,需要我们自己单独配置。
storage安装配置方法参考《K8S中安装配置StorageClass》
安装ks
参考在 Kubernetes 上安装 KubeSphere - 概述,安装kubesphere-v3.3.0版本
1、下载yaml
1 | wget https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/kubesphere-installer.yaml |
2、修改yaml
按需修改cluster-configuration.yaml。
ks-apiserver和ks-controller-manager的资源调整示例如下:
1 | spec: |
因为ks-apiserver和ks-controller-manager容易OOM,所以内存上限设置高。
3、提交yaml到k8s集群
1 | kubectl apply -f kubesphere-installer.yaml |
4、查看安装过程
1 | k describe pod/ks-installer-xxx-xxx -n kubesphere-system |
5、查看ks状态
1 | kubectl get all -n kubesphere-system |
storageclass问题排查
redis没有ready,一直处于pending状态,查看详情
1 | kubectl describe pod/redis-d744b7468-45sh4 -n kubesphere-system |
报错:0/x nodes are available: x pod has unbound immediate PersistentVolumeClaims.
查看nfs-client-provisioner日志
1 | kubectl logs --tail=100 nfs-client-provisioner-7975f9b954-7fw5l |
报错:
provision “kubesphere-system/redis-pvc” class “nfs-storage”: unexpected error getting claim reference: selfLink was empty, can’t make reference
这是因为,1.20.x之后的k8s版本,selflink已经弃用了。而nfs-client-provisioner的实现基于selflink,因此报错。
解决办法:apiserver启动时添加参数--feature-gates=RemoveSelfLink=false
1、编辑kube-apiserver.yaml
1 | sudo vim /etc/kubernetes/manifests/kube-apiserver.yaml |
如下修改:
1 | spec: |
2、重建apiserver pod
因为apiserver是static pod,所以在修改完kube-apiserver.yaml后会自动重建。
参考文档:
- unexpected error getting claim reference: selfLink was empty, can’t make reference
- kubernetes1.20版本 nfs-provisioner报错问题:”selfLink was empty”
验证ks
KS默认对外开放 30880 端口,通过 NodePort (IP:30880) 使用默认帐户和密码 (admin/P@88w0rd) 访问 Web 控制台。
http://192.168.56.101:30880/login
第一次登录时,会提示修改密码。
修改ks配置
如果ks已经安装完成,想要修改ks集群配置的话,可以通过修改clusterconfiguration配置来实现。
1 | kubectl get cm kubesphere-config -n kubesphere-system -oyaml |
修改ks-installer配置后,相关pod会自动重启(请耐心等待,大概5分钟内会自动重启)。
重置ks密码
如果忘记了ks的密码,可以通过kubectl命令进行重置。参考文档Reset the Account Password
1 | kubectl patch users <USERNAME> -p '{"spec":{"password":"<YOURPASSWORD>"}}' --type='merge' && kubectl annotate users <USERNAME> iam.kubesphere.io/password-encrypted- |
nginx配置
配置好nginx,通过域名访问ks正常,但是在ks页面上访问容器终端时可能报错:
1 | Could not connect to the container. Do you have sufficient privileges? |
这是因为页面访问终端需要websocket支持,所以nginx配置中需要添加websocket支持,配置方法参考《Nginx入门篇》。
添加项目到企业空间
Kubernetes命名空间就是KubeSphere项目,这些项目可以在 平台管理->集群管理->具体集群->项目 中查看到。
添加现有KubeSphere项目到企业空间:
1、以管理员身份登录KubeSphere控制台,转到集群管理页面。点击项目,可以查看在当前集群中运行的所有项目。
2、通过 kubectl 创建的命名空间不属于任何企业空间。请点击右侧的三个点,选择分配企业空间。
3、在弹出的对话框中,为该项目选择一个企业空间和项目管理员,然后点击确定。
4、转到企业空间,可以在项目页面看到该项目已显示。
参考文档:
批量添加项目到企业空间
1 | kubectl get ns |grep voidking | awk '{print $1}' | xargs kubectl patch ns -p 'metadata: {labels: {kubesphere.io/workspace: "voidking"}, annotations: {kubesphere.io/creator: "haojin"}}' |
ks多集群
参考文档:
多租户管理
基本概念
- 集群:k8s集群。
- 企业空间:业务管理基本单元。
- 公司部门:公司内部的部门和ks部门没有必然联系。
- ks部门:企业空间中权限划分的单位,每个企业空间包含多个ks部门,每个ks部门包含多个用户,方便批量授权。
- ks用户:每个公司成员,对应一个ks用户,一个ks用户可以属于多个ks部门。
- 项目:项目对应k8s中的namespace,一个项目可以同时分配给不同的ks部门。
集群和企业空间,是多对多的关系。一个企业空间可以包含多个集群,一个集群可以被多个企业空间包含。
ks中每个项目只能添加到一个企业空间,因此企业空间按照业务来划分,作为业务管理的基本单位。
企业空间作为操作kubesphere的唯一入口,在企业空间授权一个项目的管理权限后,如果用户通过集群管理找到一个项目,是没有权限的。
每个企业空间,建议设置1-3个管理员。管理员负责本企业空间的具体权限管理,例如添加管理员、新建部门、给新成员授权等
ks部门划分的目的,是为了项目的权限管理,因此需要先对集群和项目权限进行规划。
通过ks部门,授权可以精确到每个项目和每个人。
参考文档:
多租户管理操作流程
1、创建企业空间,并关联集群
2、添加现有项目到企业空间
3、创建部门,针对部门精细化授权
4、添加用户到部门
5、通知ks入口都使用企业空间,不要使用集群管理