KubeSphere实战
一、KubeSphere平台安装
1、Kubernetes上安装KubeSphere
1.1 安装docker
1 | # centos7.9,建议机器4核8G |
1.2 安装Kubernetes
首先基本环境的安装,每个机器使用内网ip互通,每个机器配置自己的hostname,不能用localhost
1 | #设置每个机器自己的hostname,k8s-master/node1/node2 |
然后安装kubelet、kubeadm、kubectl
1 | #配置k8s的yum源地址 |
初始化master节点
1 | # 注意ip和主机名的修改 |
1.3 前置环境之nfs存储
安装nfs-server
1 | # 在每个机器 |
配置默认存储,在master执行,vim sc.yaml
,注意nfs地址改成自己的
1 | ## 创建了一个存储类 |
确认配置是否生效,kubectl get sc
,这样配置完成之后就拥有动态创建pv的能力,例如如下可以自行测试
1 | apiVersion: v1 |
1.4 前置环境之metrics-server
metrics-server是集群指标监控组件(这里用了别人的镜像库),vim metrics.yaml
1 | apiVersion: v1 |
测试
1 | kubectl top nodes |
1.5 安装KubeSphere
安装文档参考:https://kubesphere.com.cn/docs/v3.3/quick-start/minimal-kubesphere-on-k8s/
1 | # 这里安装需要国外源网络 |
2、Linux单节点部署KubeSphere
官网参考:https://kubesphere.com.cn/docs/v3.3/quick-start/all-in-one-on-linux/
1 | # 首先指定一下hostname |
仅适用于默认的最小化安装。若要在 KubeSphere 中启用其他组件,请参见启用可插拔组件
进入可视化后也可以启用需要的组件,以 admin
用户登录控制台,点击左上角的平台管理,选择集群管理,点击定制资源定义,在搜索栏中输入 clusterconfiguration
,点击选择需要打开的插件即可
3、Linux多节点部署KubeSphere(推荐)
官网:https://kubesphere.com.cn/docs/v3.3/installing-on-linux/introduction/multioverview/
1 | # 最小安装最低要求2c4g(如果性能好,推荐master4c8g/node8c16g) |
二、KubeSphere实战
1、多租户实战
参考文档:https://kubesphere.com.cn/docs/v3.3/quick-start/create-workspace-and-project/
首先平台管理员admin创建不同用户,包括企业空间管理员bigboss-li和普通成员若干,然后进入企业空间管理员bigboss-li账户,创建不同的企业空间(例如杭州),他可以管理所有企业空间,每一个企业空间里邀请指定一个人为该空间管理员,例如hangzhou-boss,然后该角色可以邀请其他人为普通人员;
然后hangzhou-boss邀请pm-wang为项目总监负责人,wang可以创建多个项目,可以邀请该企业空间的人到不同的项目,并分配不同的角色,例如这个项目的管理员,而项目管理员又可以邀请这个企业空间的人到此项目中,并分配不同的权限,例如开发者/观察者等
2、中间件部署实战
官网快速入门例子:https://kubesphere.com.cn/docs/v3.3/quick-start/wordpress-deployment/
dockerhub:https://hub.docker.com/
2.1 MySql部署
1 | # 正常docker部署 |
kubesphere首先进去项目(例如我这里项目是mail),然后创建配置(在配置→配置字典里,名字随便取,里面设置key为xx.cnf,值为上面的配置内容);然后创建存储(持久卷声明,这里暂时是local类型进行测试);最后创建有状态副本集,选择镜像,选择容器(使用容器默认配置,然后注意勾选环境变量和时间同步,把MYSQL_ROOT_PASSWORD=root写入,也可以限制一下资源),最后挂载卷和配置文件,成功创建(如果创建失败需要更改一下docker源)
注意集群内部可以直接通过应用的 【服务名.项目名】 直接访问 (默认),可以尝试ping
如果要修改内部访问域名,可以在服务里删除默认的,自行创建内部集群和外部访问两个service(注意是选择指定工作负载),也可以直接从服务里进行部署
2.2 redis部署
1 | # ================这是之前的部署方式============================= |
kubesphere方式部署和mysql类似,不过注意有状态副本集建议在内部直接创建存储,这样每增加一个副本就会新增一个pvc,否则会共用一个
2.3 部署ElasticSearch
1 | # 创建数据目录 |
因为考虑到/usr/share/elasticsearch/config
文件夹下有很多默认配置文件,所以不能直接使用配置文件挂载,否则会直接被覆盖,注意这里创建副本时要选择子路径,选择到具体文件覆盖
2.4 应用商店部署
参考:https://kubesphere.com.cn/docs/v3.3/pluggable-components/app-store/
2.5 应用仓库部署(推荐)
官网参考:https://helm.sh/zh/
包搜索中心:https://artifacthub.io/
应用商店应用少,更多建议直接使用helm应用仓库进行安装部署,类似于dockerhub。首先去企业空间→应用管理→应用仓库添加bitnami仓库(需要对应权限角色,仓库地址https://charts.bitnami.com/bitnami
),同步完成后进入项目→应用负载→应用→从项目模板导入,选择导入的bitnami仓库即可选择对应的镜像了
3、RuoYi-Cloud部署实战
官网:https://gitee.com/y_project/RuoYi-Cloud
架构图:https://gitee.com/zhangmrit/ruoyi-cloud/blob/nacos/doc/ruoyi-cloud.png
3.1 本地部署
首先需要在本地进行跑起来,才能成功上云,首先clone若依项目,然后在本地创建数据库,根据项目数据库文件,注意这里需要自行创建ry-cloud数据库,然后再将quartz和ry表导入,其他两个会自行创建数据库,然后下载Nacos配置中心,进入conf/application.properties
,可以直接在文件末尾直接添加
1 | spring.datasource.platform=mysql |
然后进入bin目录startup.cmd -m standalone
启动,进入后在配置列表修改所有数据库的账号密码(根据自己账号密码来修改),最后启动redis即可,然后启动前后端
3.2 k8s中间件部署
首先创建一个新项目his,然后点击应用负载→服务→创建有状态服务(这样就可以直接自定义DNS域名了),根据上面情况部署mysql和redis,然后将数据库文件导入(注意这里需要自行创建ry-cloud数据库,然后再将quartz和ry表导入,其他两个会自行创建数据库);
其次部署nacos集群,这里有个问题,nacos集群要设置每个naocs的IP地址,这里就需要进行有状态部署,这样就可以使用固定域名进行配置。然后我们需要获取一下固定域名,首先创建多个nacos有状态副本,然后进入nacos服务,获取总的nacos域名,打开随机一个nacos容器进行ping his-nacos.his
,这样就可以获取每个nacos的域名规律,比如我的his-nacos-v1-0.his-nacos.his.svc.cluster.local
(pod名+服务名+固定)就代表是nacos1
然后正式创建nacos集群,首先需要抽取两个配置文件application.properties
(上面粘贴,但是数据库ip换成mysql服务器域名,比如我的his-mysql.his
)和cluster.conf
(然后选择服务→有状态部署,取名his-nacos,版本v1)
1 | his-nacos-v1-0.his-nacos.his.svc.cluster.local:8848 |
然后重新创建nacos,挂载映射路径为/home/nacos/conf/xxx
(需要挂载到子路径,否则其他就被覆盖了),启动三个nacos,然后查看日志,成功暴露一下外部service,最后登录尝试http://192.168.249.146:32735/nacos/
,然后修改里面mysql和redis的连接ip,换成DNS域名,同时账号密码设置一下。这里集群模式的话需要版本v2.1.0,也可以直接单节点模式启动(单节点增加环境变量MODE=standalone
,如果集群的话需要增加环境变量PREFER_HOST_MODE=hostname
,具体可以参考nacos dockerhub)
3.3 微服务层部署
下面的Dockerfile文件需要放置在每一个项目根目录,方便打包,官方可以参考:https://gitee.com/y_project/RuoYi-Cloud/tree/v3.6.1/docker
1 | # 规则: |
打包好docker镜像后可以推送到仓库,也可以搭建自己私有仓库Harbor
1 | docker login --username=forsum**** registry.cn-hangzhou.aliyuncs.com |
然后开始正式部署微服务层,
- 应用一启动会获取到 “应用名-激活的环境标识.yml”
- 每次部署应用的时候,需要提前修改nacos线上配置,确认好每个中间件的连接地址是否正确
4、云原生DevOps实战
4.1 环境和中间件准备
项目地址:
https://gitee.com/leifengyang/yygh-parent
https://gitee.com/leifengyang/yygh-admin
https://gitee.com/leifengyang/yygh-site
首先在kubesphere打开devops开关,在原来his的项目中添加其他中间件,sentienl可以选择leifengyang/sentinel:1.8.2,mongodb/RabbitMQ可以从模板创建,ElasticSearch创建与之前方法类似吗
中间件 | 集群内地址 | 外部访问地址 |
---|---|---|
Nacos | his-nacos.his:8848 | http://192.168.249.146:30397/nacos |
MySQL | his-mysql.his:3306 | 192.168.249.146:31840 |
Redis | his-redis.his:6379 | 192.168.249.146:31968 |
Sentinel | his-sentinel.his:8080 | http://192.168.249.146:31229 |
MongoDB | mongodb.his:27017 | 192.168.249.146:30640 |
RabbitMQ | rabbitm-rabbitmq.his:5672 | 192.168.249.146:31018 |
ElasticSearch | his-es.his:9200 | 192.168.249.146:31300 |
然后抽取项目配置,把生产环境分开,项目默认规则
- 每个微服务项目,在生产环境时,会自动获取 微服务名-prod.yml 作为自己的核心配置文件
- 每个微服务项目,在生产环境时,默认都是使用 8080 端口
4.2 Jenkins构建
Jenkins官网
构建和部署 Maven 项目参考:https://kubesphere.io/zh/docs/v3.3/devops-user-guide/examples/a-maven-project/
首先在企业空间创建DevOps项目(如果一直处于等待状态,可以尝试重启一下docker或者换个密码),点击进入后创建流水线,编辑流水线,可以先选择一个CI/CD模板,这样就可以看见可视化界面了,然后编辑可视化流水线,最后可以导出Jenkinsfile。这里kubesphere有内置容器和代理,可以参考Jenkins代理文档,然后一步步进行编辑即可。
第一步拉取代码,配置好地址和凭证,可以打印一下输出
第二步项目编译,maven项目打包,mvn clean package -Dmaven.test.skip=true
(如果有弹框要输入,先随便输入),这里我们可以配置maven加速(已经下载过的jar包,下一次流水线的启动,不会重复下载)
- 使用admin登陆ks
- 进入集群管理
- 进入配置中心
- 找到配置ks-devops-agent
- 修改这个配置,加入maven阿里云镜像加速地址
第三步打包Docker镜像,将每个jar包打包成镜像
第四步推送最新镜像到镜像仓库,注意改成自己镜像仓库,这里jenkinsfile可以设置环境变量,然后再推送那里进行变量替换
第五步进行镜像部署,注意这一步要创建好kubectl集群凭证和阿里云凭证,然后在每一个项目放置好deploy.yml文件,变量都需要在jenkinsfile里定义好(发布到生产环境可以卡点)
1 | apiVersion: apps/v1 |
jenkinsfile举例,其中几步可以并发构建,自行填写相应信息
1 | pipeline { |
最后一步可以添加邮件功能,kubesphere全局设置在平台设置里配置不同服务(会发生报警监控等),而流水线的邮件服务可以参考:为 KubeSphere 流水线设置电子邮件服务器
其他模块同理
4.3 webhook
- 每个项目,都有流水线文件(比如创建好连接远程仓库的流水线项目)
- 点击流水线,里面谁有webhook地址,可以挂载在远程仓库的webhook
- 写代码并提交------> gitee ---------> 给指定的地方发请求(webhook)------> kubesphere平台感知到 -----> 自动启动流水线继续运行
参考