使用DHorse发布SpringBoot项目到K8S

前言

在介绍DHorse的操作之前,先来介绍一下使用k8s发布应用的步骤,以SpringBoot应用为例进行说明。

1.首先从代码仓库下载代码,比如GitLab;

2.接着进行构建,比如使用Maven;

3.如果要使用k8s作为编排,还需要把步骤2产生的包制作成镜像,比如使用Docker;

4.上传步骤3的镜像到远程仓库,比如Harhor;

5.最后,下载镜像并编写Deployment文件部署到云集群,比如k8s;

DHorse简化了以上步骤的流程,使用它部署应用变得更简单,下面详细介绍。

DHorse操作说明

配置代码仓库

如图1所示:

图1

配置镜像仓库

如图2所示:

图2

配置集群

进入"集群管理"菜单,可以进行添加集群操作,假如已经部署好k8s集群,则可以添加到DHorse,如图4所示:

图4

可以通过如下方式生成k8s的认证令牌:

  1. 小于1.24版本
shell 复制代码
kubectl create serviceaccount dhorse-admin -n kube-system
kubectl create clusterrolebinding dhorse-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dhorse-admin
secret=$(kubectl get -n kube-system serviceaccounts dhorse-admin -o jsonpath='{.secrets[0].name}')
kubectl get -n kube-system secrets $secret -o jsonpath='{.data.token}' | base64 -d
  1. 大于等于1.24版本
shell 复制代码
kubectl create serviceaccount dhorse-admin -n kube-system
kubectl create clusterrolebinding dhorse-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dhorse-admin
kubectl create token dhorse-admin -n kube-system --duration 867240h

创建应用

在"应用管理"菜单下,以添加SpringBoot应用为例(https://jihulab.com/tiandizhiguai/hello-springboot),如图6、图7所示:

图6

图7

其中,图6中的"代码仓库地址"是对应代码仓库定义的项目路径或项目编号,比如GitLab的项目ID如图8所示:

图8

添加应用完成以后,就可以在"发布管理"菜单下看到分支信息,如图9所示:

图9

可以看出,在分支列表里可以分别对每个分支进行"构建版本"操作,以master分支构建为例,如图10所示:

图10

然后进入"版本列表"菜单,可以看到产生了一条版本记录,状态是构建中,同时也可以查看该版本的构建日志,如图11所示:

图11

特别注意,第一次构建版本时由于Maven需要下载依赖的包,速度会比较慢,需要耐心等待。接下来,就可以创建一个环境,然后使用刚才构建的版本发布该环境。

发布服务

进入"环境管理"菜单,然后进行添加环境操作,如图12所示:

图12

其中,"环境模板"选项的值可以在"系统配置-环境模板"菜单下进行配置。

保存之后,"环境管理"列表里会出现一条环境记录,如果13所示:

图13

接着,可以在"操作"列点击"部署"按钮,如图14所示:

图14

选择刚才的版本,并点击"确认部署"。然后,进入到"部署历史"菜单下,可以看到产生了一条部署记录,同样可以查看该记录的日志,如图15所示:

图15

等待部署完成以后,进入"副本管理"菜单,可以看到副本(Pod)的相关信息,如果16所示:

图16

至此,一个完整的发布流程完成了。最后,再来看看如何访问hello应用的服务。

访问服务

集群内访问

假如hello应用里有一个/hello的api。

  1. 访问单个副本的服务

可以通过"副本IP:端口"进行访问,该方式在副本或Node节点都可以访问通,如图16所示的IP,访问示例:http://10.32.1.153:8080/hello

  1. 通过负载均衡

DHorse在部署应用以后,会为每个应用启动一个ClusterIP的service服务,那么就可以在副本里通过"应用名称-环境标识.命名空间:服务端口"的形式来访问其他应用的服务,访问示例如:http://hello-qa.default:8080/hello ,集群内服务之间的调用,推荐该方式。

集群外访问

两种方式:

  1. 通过创建NodePort或LoadBalancer,目前DHorse不支持,如果需要可以手动在集群内创建;

  2. 打通集群内外的网络,该方式需要运维的支持,如:通过静态路由转发等。集群内外网络互通以后,在集群外部就可以直接访问副本的IP了。

相关推荐
橙子家11 小时前
关于 K8s 的一些基础概念整理-补充【k8s系列之五】
k8s
于顾而言2 天前
【Enjoy Kubernetes】1. 基础入门
开发语言·云原生·k8s
roshy2 天前
POD 存储、PV、PVC
docker·k8s·pod
qq_338032923 天前
k8s总结
云原生·容器·kubernetes·k8s
KubeSphere 云原生3 天前
云原生周刊:Kubernetes v1.32 正式发布
云计算·k8s·容器平台·kubesphere
TiDB_PingCAP3 天前
知乎 PB 级别 TiDB 数据库集群管控实践
k8s·tidb·tidb operator
KubeSphere 云原生4 天前
拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
云计算·k8s·容器平台·kubesphere
年薪丰厚4 天前
如何查看K8S集群中service和pod定义的网段范围
docker·云原生·容器·kubernetes·k8s
麻辣翅尖8 天前
【解决】k8s使用flannel网络插件的问题整理
kubernetes·k8s·报错
kainx9 天前
AWS EKS 相关错误修复 - remote error: tls: internal error - CSR pending
kubernetes·云计算·k8s·aws·eks·csr