Spring Boot部署到Kubernetes

保证Kubernetes 集群初始化已完成,要验证是否已完成初始化,返回到Dashboard页面查看集群的状态是否为Normal。

前提条件

Java 8+、Maven、Docker、Kubectl

验证

验证 kubectl能否连接到集群,运行以下命令:

kubectl get nodes

输出如下

NAME      STATUS  ROLES   AGE    VERSION
10.77.223.210  Ready   <none>  8h    v1.11.7+IKS

在正确配置了命令行后,可以开始部署并配置 Spring Boot 应用程序。

部署并运行之前在集群上创建的镜像:

kubectl run storm-tracker --image=us.icr.io/living-on-the-cloud/storm-tracker

此行告知 Kubernetes 运行 --image argument 所定义的名为 storm-tracker 的镜像。

为了能够从外部 IP 访问服务,需要公开该服务,如下所示:

kubectl expose deployment storm-tracker --port=8080 --target-port=8080 --name=storm-tracker-service --type=NodePort

选项说明:

expose 告知 Kubernetes 使资源公开可用。

deployment 是资源类型,在此例中是一个部署。

storm-tracker 是要公开的资源的名称。

--port=8080 是提供服务的端口。

--targetPort=8080 是服务将流量定向到的端口。

要查找已公开的端口,可以要求 Kubernetes 提供创建的 NodePort 的描述:

kubectl describe service storm-tracker-service

输出如下:

Name:           storm-tracker-service
Namespace:        default
Labels:          run=storm-tracker
Annotations:       <none>
Selector:         run=storm-tracker
Type:           NodePort
IP:            XXX.XXX.XXX.XXX
Port:           <unset> 8080/TCP
TargetPort:        8080/TCP
NodePort:         <unset> 30299/TCP
Endpoints:        XXX.XXX.XXX.XXX:8080
Session Affinity:     None
External Traffic Policy: Cluster
Events:          <none>

示例输出中,公开的端口为 30299。

还需要获取 Kubernetes 集群的公共 IP:

ID                         Public IP     Private IP    Machine Type  State  Status  Zone  Version
kube-hou02-paeb33817993d9417f9ad8cfad7fcf270e-w1  184.172.XXX.XXX  XXX.XXX.XXX.XXX  free      normal  Ready  hou02  1.11.7_1544

使用这些输出的公共 IP 和端口,在

 <public IP>:<exposed port>/api/v1/storms 

中调用 Spring Boot 应用程序。

项目参考地址:

https://github.com/wkorando/living-on-the-cloud/tree/1-deploying-spring-boot