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配置角色
master192.168.66.1214核12G 60G+100G(/data)master, etcd
node1192.168.66.1224核12G 60Gworker
node2192.168.66.1234核12G 60Gworker

安装方式:
Kubesphere有两种安装方式

  1. 在已经安装好的k8s集群环境中安装,安装文档
    这种方式安装Kubesphere,相当于把它当成了一个管理服务,侵入性低。k8s集群的管理,还可以按照以前的方式,对于已经成型的k8s集群来说,这种方式,是很好的选择。安装复杂度较高。
    生产中推荐这种方式。

  2. 在没有配置docker、k8s的主机集群中安装。安装文档
    这种方式只适合还没有配置过任何环境的裸机集群,使用ansible安装,非常方便,省略了各种操作步骤。后期,增加节点比较方便。安装复杂度较低。
    如果是对k8s集群,没有太多定制化需求,生产环境也可以使用,维护成本低。

为了测试方便,我们选择第二种安装方式。

注意:如果机器硬件资源不足,里面的一些组件,可以先不安装,例如(devopsharborgitlab这些组件都非常耗内存资源)


配置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 分钟内启动完成。

安装部署需要注意的问题:

  1. 在192.168.66.121,这台master主机上,查看pod,deployment的状态,如果所有状态都正常,才说明可以登录浏览器了。否则,即使显示部署成功,还是无法正常访问。
  2. nfs目录的配置一定要保证读写权限,否则有些有状态服务的pod,会一直卡死,无法进行下去。这个一定要注意。我刚开始部署的时候,没有注意到这个问题,卡了很长时间。各种报错信息,还是没查到根上。
  3. 注意查看pod的景象拉取情况,这里就有一点要说明的,最好是在阿里云上有自己的镜像加速地址(如何申请请自行百度),https://registry.docker-cn.com这个地址非常不稳定,有拉取失败和超时的情况。
  4. 如果部署失败,根据提示信息百度一下,可能是主机缺少某些安装包。或者是直接去项目地址,提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解决什么问题?

  1. 服务高可用
  2. 弹性伸缩
  3. 应用发布
  4. 环境一致性
  5. 权限、系统安全性,开发不再登录主机

上面的只是基础功能。。。。。。。。。。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐