k8s-集群管理系统-KubeSphere2.1.0搭建与测试
1. KubeSphere简介KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。帮助企业轻松应对敏捷开发、自动化运维、.
1. KubeSphere简介
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器管理平台,支持部署和运行在任何基础设施之上,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度,旨在解决 Kubernetes 本身存在的存储、网络、安全和易用性等痛点。帮助企业轻松应对敏捷开发、自动化运维、应用快速交付、微服务治理、多租户管理、监控日志告警、服务与网络管理、镜像仓库等业务场景。
我们刚开始学习使用k8s,一般使用的是docker+kubeadm部署k8s集群,然后再部署周边的各组件,例如harbor,gitlab,jenkins,监控与告警(grafana,prometheus),日志(elk,efk),ingress,helm、主机资源管理等各种组件,并让这些组件进行协同工作。而通过Kubesphere,我们可以简化这些流程,Kubesphere把上述的大部分组件进行了整合,安装了Kubesphere就是安装并整合了这些组件。
简单来说,就是我们可以使用Kubesphere来管理k8s及其相关的组件,降低部署、学习成本,提供了一个完整的k8s集群方案。
下面介绍具体的安装流程,主要参考:https://kubesphere.io/docs/v2.1/zh-CN/release/release-v210/
2. 环境准备
主机环境
主机 | IP | 配置 | 角色 |
---|---|---|---|
master | 192.168.66.121 | 4核12G 60G+100G(/data) | master, etcd |
node1 | 192.168.66.122 | 4核12G 60G | worker |
node2 | 192.168.66.123 | 4核12G 60G | worker |
安装方式:
Kubesphere有两种安装方式
-
在已经安装好的k8s集群环境中安装,安装文档
这种方式安装Kubesphere,相当于把它当成了一个管理服务,侵入性低。k8s集群的管理,还可以按照以前的方式,对于已经成型的k8s集群来说,这种方式,是很好的选择。安装复杂度较高。
生产中推荐这种方式。
-
在没有配置docker、k8s的主机集群中安装。安装文档
这种方式只适合还没有配置过任何环境的裸机集群,使用ansible安装,非常方便,省略了各种操作步骤。后期,增加节点比较方便。安装复杂度较低。
如果是对k8s集群,没有太多定制化需求,生产环境也可以使用,维护成本低。
为了测试方便,我们选择第二种
安装方式。
注意:如果机器硬件资源不足,里面的一些组件,可以先不安装,例如(devops
,harbor
,gitlab
这些组件都非常耗内存资源)
配置nfs
共享文件系统,为了测试方便,我们使用nfs
在192.168.66.121上配置nfs目录
yum -y install nfs-utils rpcbind
mkdir /data/nfs
vim /etc/exports
# 添加如下内容(一定要注意nfs的权限配置)
/data/nfs 192.168.66.0/24(rw,sync,no_root_squash,fsid=0)
systemctl restart nfs
showmount 192.168.66.121 # 查看并确认配置
3. 开始安装
安装过程使用root,或sudo用户,其它用户安装的,具体参考官方文档
3.1 下载安装包
使用网络安装方式,下载安装包至192.168.66.121
cd /data
curl -L https://kubesphere.io/download/stable/v2.1.0 > installer.tar.gz \
&& tar -zxf installer.tar.gz && cd kubesphere-all-v2.1.0/conf
3.2 修改主机配置文件hosts.ini
安装流程使用ansible
进行文件传输与配置修改
cd /data/kubesphere-all-v2.1.0/conf
# 示例:
[all]
master ansible_connection=local ip=192.168.0.1
node1 ansible_host=192.168.0.2 ip=192.168.0.2 ansible_ssh_pass=PASSWORD
node2 ansible_host=192.168.0.3 ip=192.168.0.3 ansible_ssh_pass=PASSWORD
[kube-master]
master
[kube-node]
node1
node2
[etcd]
master
[k8s-cluster:children]
kube-node
kube-master
3.3 修改组件配置文件common.yaml
需要注意的配置如下
1. docker镜像站
# 下面是默认配置
## Add other registry.
docker_registry_mirrors:
- https://docker.mirrors.ustc.edu.cn
- https://registry.docker-cn.com
- https://mirror.aliyuncs.com
# 建议配置:
docker_registry_mirrors:
- https://docker.mirrors.ustc.edu.cn
- https://mirror.aliyuncs.com # 最好是自己申请一个阿里云的docker镜像地址
https://registry.docker-cn.com这个地址很不稳定
2. pod与service网络
这两个网络一定不要跟你现有的,正在使用的网络网段有冲突
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/18
3. 存储配置
本地存储关闭:
local_volume_enabled: false
使用nfs存储
nfs_client_enabled: true
nfs_client_is_default_class: true
# Hostname of the NFS server(ip or hostname)
nfs_server: 192.168.66.121
# Basepath of the mount point
nfs_path: /data/nfs
nfs_vers3_enabled: false
nfs_archiveOnDelete: false
4. 其他组件
其他组件,只开启部分
grafana_enabled: true
kibana_enabled: true
devops_enabled: false # devops先不启用
openpitrix_enabled: true # 应用商店开启
metrics_server_enabled: true
servicemesh_enabled: true
notification_enabled: true
alerting_enabled: true
# harbor和gitlab资源占用过多,暂不开启,可以在安装完成之后再开启
harbor_enabled: false
gitlab_enabled: false
3.4 开始安装
配置文件和各种环境准备妥当后,就可以开始安装了。
安装开始前,确认selinux和firewalld已经关闭了,可以在安装完成后再调整网络安全策略。
安装流程直接参考官方文档即可。
1. 执行安装脚本
进入安装目录,建议使用 root 用户执行 install.sh安装脚本:
cd /data/kubesphere-all-v2.1.0/scripts
./install.sh
2. Multi-node 模式开始部署
输入数字 2选择第二种 Multi-node 模式开始部署,安装程序会提示您的环境是否前提条件,若满足请输入 “yes” 开始安装。
################################################
KubeSphere Installer Menu
################################################
* 1) All-in-one
* 2) Multi-node
* 3) Quit
################################################
https://kubesphere.io/ 2018-10-14
################################################
Please input an option: 2
3. 验证 KubeSphere 集群部署是否成功
(1) 待安装脚本执行完后,当看到如下 "Successful"界面,则说明 KubeSphere 安装成功。
successsful!
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.66.121:30880
Account: admin
Password: P@88w0rd
NOTE:Please modify the default password after login.
#####################################################
提示:如需要再次查看以上的界面信息,可在安装包目录下执行 cat kubesphere/kubesphere_running命令查看。
注意:登陆 Console 后请在 "集群状态" 查看服务组件的监控状态,待所有组件启动完成后即可开始使用,通常所有服务组件都将在 15 分钟内启动完成。
安装部署需要注意的问题:
- 在192.168.66.121,这台master主机上,查看pod,deployment的状态,如果所有状态都正常,才说明可以登录浏览器了。否则,即使显示部署成功,还是无法正常访问。
- nfs目录的配置一定要保证读写权限,否则有些有状态服务的pod,会一直卡死,无法进行下去。这个一定要注意。我刚开始部署的时候,没有注意到这个问题,卡了很长时间。各种报错信息,还是没查到根上。
- 注意查看pod的景象拉取情况,这里就有一点要说明的,最好是在阿里云上有自己的镜像加速地址(如何申请请自行百度),https://registry.docker-cn.com这个地址非常不稳定,有拉取失败和超时的情况。
- 如果部署失败,根据提示信息百度一下,可能是主机缺少某些安装包。或者是直接去项目地址,提issue,问开发。
安装部署完成后,浏览器输入地址是这样的:
3.5 部署完成后
部署完成后,就可以按照官方文档进行测试了。下面这些示例,跑一遍,基本就能熟悉Kubesphere的操作流程了。确实是易上手,功能很多。
4. 使用中的一些思考
4.1 docker配置需要注意的一些问题
1. 镜像源
镜像源配置,最好使用大厂的镜像源
2. 存储问题
在生产环境中,如果项目非常多,最好使用统一的基础镜像包,统一的开发环境包(java,php,go这些),避免docker images越来越多,越来越大。建议使用debian的基础镜像包+各种开发环境配置,来构建基础包。也可以用centos的。
docker存储路径尽量不使用默认路径,存储目录所在的磁盘,不要低于100g以下,避免程序越来越多,空间爆满。可以用docker system prune
定期清理不用的镜像。
3. harbor
生产环境使用harbor来管理镜像仓库,记得定期清理。
harbor如果使用的ip地址或http地址,docker上要注意配置Insecure Registries参数,信任你的harbor地址。
4.2 k8s配置,使用,需要注意的一些问题
1. 每台主机可以调度的pod数
这个在Kubesphere的配置文件common.yaml中
kubelet_max_pods: 110
这个是可配置的,一般根据主机情况进行配置。
2. 资源预留
k8s的默认资源调度算法是有一定问题的,默认情况下 pod 能够使用节点全部可用容量。
这是个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护进程(system daemons)。除非为这些系统守护进程留出资源,否则它们将与 pod 争夺资源并导致节点资源短缺问题
。
kubelet 公开了一个名为 Node Allocatable 的特性,有助于为系统守护进程预留计算资源。Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 Node Allocatable。
我在刚开始部署的时候,配置了日志,devops等组件,后面想添加gitlab,harbor,调度了快半个小时,还没结束,而且node2主机基本卡死,导致节点NotReady。
后面查了一下问题:
在部署前,node1的pod数是大于node2的,所以当有新的资源调度请求时,会把所有新的pod全部调度到node2。(注意:gitlab、harbor调度时是所有pod在一台主机上)
但是node2上面pod数虽然不多,内存资源已经不足了。这个时候,pod还是往node2上调度,就会导致node2主机资源耗尽,全部卡死
。
在生产环境中,这个会是一个非常严重的bug。想象一下,一台主机出现了NotReady,pod资源调度会到其他主机,这台主机上的pod也会迁移到其它主机,其他主机也出现了NotReady,不断重复这个过程,很可能会出现连锁反应,集群内的Nodes逐个的Not Ready了,导致集群雪崩
。虽然概率很小,但是一定要进行预防。
配置参考:
https://cloud.tencent.com/developer/article/1097002
https://www.bladewan.com/2018/01/26/k8s_resource_resver/
http://docs.kubernetes.org.cn/723.html
https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/11605966.html
3. 证书与升级问题
证书的有效期是一年,一年之后需要更换证书,更新有效时间。解决方式简单粗暴一些吧,每年,或者每半年升级一次k8s和docker版本就可以必满。这种方式可以很好的解决版本漏洞问题。
4.3 KubeSphere使用中需要注意的一些问题
1. 节点资源预留
k8s节点的资源预留,KubeSphere默认是没有配置的,需要手动修改k8s的配置
2. 持久化存储问题
KubeSphere安装配置前需要制定一种共享存储,可以使用nfs,Ceph,GlusterFS,QingCloud 云平台块存储,QingStor NeonSAN,根据实际情况进行配置即可。
如果后面需要添加存储,感觉添加配置的界面,对添加nfs不是太完善,可能是我有些小白了,感觉没那么方便。
如果pod不想用已经配置好的StorageClasses,想要使用其它共享存储,可以在配置服务的时候,最后用编辑模式,编辑你想要使用的共享存储配置。
3. 有状态服务
在KubeSphere组件中,有一部分是有状态服务,使用的存储是我们刚开始配置的StorageClasses(我们演示用的是共享存储nfs)。
生产环境如果要使用,初期建议,有状态服务(比如数据库,日志系统,消息队列),有计划的迁移到k8s,而不是直接all in k8s。前期,应用程序先上k8s,优势更明显一些。
4. 其它组件
KubeSphere有一些组件,我们不需要在安装前就配置。安装完成后,我们可以再启用。比如devops(基于jenkins),gitlab,harbor,这些组件,如果已经有现成的了,就不需要配置上了。如果有需要,修改配置即可开启
kubectl edit cm -n kubesphere-system ks-installer
应用商店功能在初期可上可不上
5. 添加worker节点
参考:https://kubesphere.io/docs/v2.1/zh-CN/installation/add-nodes/
6. master、etcd节点高可用问题
参考:https://kubesphere.io/docs/v2.0/zh-CN/installation/master-ha/
v2.1版本这个文档找不到了。
如果要配置多个master、etcd节点,修改安装配置文件hosts.ini,把你要添加的主机加到相关主机组下面
修改配置文件common.yaml,如下
记得把loadbalancer的配置段打开。
ip地址这个可以用KubeSphere官方推荐的配置方式。当然,测试环境,也可以随便配一个。
配置完成后重新执行安装程序
cd /data/kubesphere-all-v2.1.0/scripts
./install.sh
执行完之后,新的master、etcd节点就加进去了。
7. etcd数据备份问题
在etcd主机上,看一下crontab任务,你会发现,KubeSphere已经帮你考虑到这个问题了。
每30分钟备份一次。
写在最后
docker,k8s,Kubesphere,功能都很多,组件很多,你想要用它们实现什么功能呢?
这是一个需要在部署前,部署后都需要考虑的问题
我们需要通过k8s解决什么问题?
- 服务高可用
- 弹性伸缩
- 应用发布
- 环境一致性
- 权限、系统安全性,开发不再登录主机
上面的只是基础功能。。。。。。。。。。
更多推荐
所有评论(0)