Java最全spring-cloud-kubernetes官方demo运行实战,来来来

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

环境信息

本次实战的环境和版本信息如下:

  1. 操作系统:CentOS Linux release 7.6.1810

  2. minikube:1.1.1

  3. Java:1.8.0_191

  4. Maven:3.6.0

  5. fabric8-maven-plugin插件:3.5.37

  6. spring-cloud-kubernetes:1.0.1.RELEASE

上面提到的linux、minikube、java、maven,请确保已全部准备好,关于linux环境下minikube的安装和启动请参考《Linux安装minikube指南 》

下载源码

官方demo包含在整个spring-cloud-kubernetes开源项目中,因此要下载整个开源项目,由于主干的提交一直很活跃,因此最好下载个release版本,我这里下载的是v1.0.1.RELEASE,如下图红框所示,地址是:https://github.com/spring-cloud/spring-cloud-kubernetes/releases

在这里插入图片描述

修改maven设置

需要事先修改maven的设置,否则编译构建的时候会报错:

  1. 打开maven的配置文件settings.xml,完整路径是apache-maven-3.6.0/conf/settings.xm;

  2. 在settings.xml文件内,找到pluginGroups节点,在里面增加两行,修改完成后效果如下:

io.fabric8

org.springframework.boot

  1. 修改完毕保存退出,maven设置完成;

如果您想了解该错误的细节,请参考文章《使用fabric8-maven-plugin插件的错误处理(No plugin found for prefix ‘fabric8’)》

编译项目源码

  1. 将上图中的源码下载解压,得到一个新的文件夹spring-cloud-kubernetes-1.0.1.RELEASE;

  2. 进入文件夹spring-cloud-kubernetes-1.0.1.RELEASE,执行命令mvn clean compile -U,完全编译整个工程,由于要下载大量依赖库所以较为耗时,我这里是二十分钟以上(这一步不是必须的,看个人爱好吧),构建通过后如下所示:

[INFO] Reactor Summary for Spring Cloud Kubernetes 1.0.1.RELEASE:

[INFO]

[INFO] Spring Cloud Kubernetes :: Dependencies … SUCCESS [ 0.077 s]

[INFO] Spring Cloud Kubernetes … SUCCESS [ 2.575 s]

[INFO] Spring Cloud Kubernetes :: Core … SUCCESS [01:51 min]

[INFO] Spring Cloud Kubernetes :: Config … SUCCESS [ 21.357 s]

[INFO] Spring Cloud Kubernetes :: Discovery … SUCCESS [ 6.473 s]

[INFO] Spring Cloud Kubernetes :: Ribbon … SUCCESS [ 31.616 s]

[INFO] Spring Cloud Kubernetes :: Starter … SUCCESS [ 0.558 s]

[INFO] Spring Cloud Kubernetes :: Starter :: Config … SUCCESS [ 0.569 s]

[INFO] Spring Cloud Kubernetes :: Starter :: Ribbon … SUCCESS [ 0.595 s]

[INFO] Spring Cloud Kubernetes :: Starter :: All … SUCCESS [ 0.571 s]

[INFO] Spring Cloud Kubernetes :: Examples … SUCCESS [ 0.558 s]

[INFO] Spring Cloud Kubernetes :: Examples :: Reload ConfigMap SUCCESS [ 9.077 s]

[INFO] Spring Cloud Kubernetes :: Examples :: Hello World . SUCCESS [ 1.323 s]

[INFO] Spring Cloud Kubernetes :: Leader … SUCCESS [ 7.395 s]

[INFO] Spring Cloud Kubernetes :: Examples :: Leader Election SUCCESS [ 0.594 s]

[INFO] Spring Cloud Kubernetes :: Istio … SUCCESS [ 12.788 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests … SUCCESS [ 0.574 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Simple Core SUCCESS [02:14 min]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Simple Configmap SUCCESS [ 0.646 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Istio SUCCESS [ 0.623 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Discovery Parent SUCCESS [ 0.564 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Discovery Service A SUCCESS [ 0.605 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Discovery Service B SUCCESS [ 0.625 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Discovery Client SUCCESS [ 0.608 s]

[INFO] Spring Cloud Kubernetes :: Integration Tests :: Discovery Tests SUCCESS [ 1.440 s]

[INFO] Spring Cloud Kubernetes Docs … SUCCESS [ 0.583 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 05:53 min

[INFO] Finished at: 2019-06-08T19:32:19+08:00

[INFO] ------------------------------------------------------------------------

  1. 进入目录spring-cloud-kubernetes-1.0.1.RELEASE/spring-cloud-kubernetes-examples/kubernetes-hello-world-example,这里面就是官方的入门demo,执行以下命令开始构建并且会部署到minikube:

mvn clean package fabric8:deploy -Pkubernetes

构建和部署完成后,控制台输出以下信息:

[INFO] Installing /usr/local/work/demo/spring-cloud-kubernetes-1.0.1.RELEASE/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/target/kubernetes-hello-world-1.0.1.RELEASE-sources.jar to /root/.m2/repository/org/springframework/cloud/kubernetes-hello-world/1.0.1.RELEASE/kubernetes-hello-world-1.0.1.RELEASE-sources.jar

[INFO]

[INFO] <<< fabric8-maven-plugin:3.5.37:deploy (default-cli) < install @ kubernetes-hello-world <<<

[INFO]

[INFO]

[INFO] — fabric8-maven-plugin:3.5.37:deploy (default-cli) @ kubernetes-hello-world —

[INFO] F8: Using Kubernetes at https://192.168.121.133:8443/ in namespace default with manifest /usr/local/work/demo/spring-cloud-kubernetes-1.0.1.RELEASE/spring-cloud-kubernetes-examples/kubernetes-hello-world-example/target/classes/META-INF/fabric8/kubernetes.yml

[INFO] Using namespace: default

[INFO] Creating a Service from kubernetes.yml namespace default name kubernetes-hello-world

[INFO] Created Service: spring-cloud-kubernetes-examples/kubernetes-hello-world-example/target/fabric8/applyJson/default/service-kubernetes-hello-world.json

[INFO] Using namespace: default

[INFO] Creating a Deployment from kubernetes.yml namespace default name kubernetes-hello-world

[INFO] Created Deployment: spring-cloud-kubernetes-examples/kubernetes-hello-world-example/target/fabric8/applyJson/default/deployment-kubernetes-hello-world.json

[INFO] F8: HINT: Use the command kubectl get pods -w to watch your pods start up

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 16.047 s

[INFO] Finished at: 2019-06-08T19:50:50+08:00

[INFO] ------------------------------------------------------------------------

  1. 查看服务,已经创建了,类型是NodePort ,并且将8080端口映射到宿主机的30700端口,说明可以用http://宿主机IP:30700来访问此服务:

[root@minikube kubernetes-hello-world-example]# kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.96.0.1 443/TCP 10h

kubernetes-hello-world NodePort 10.108.214.207 8080:30700/TCP 4m

  1. 查看部署,发现始终未能进入READY状态:

[root@minikube kubernetes-hello-world-example]# kubectl get deployments

NAME READY UP-TO-DATE AVAILABLE AGE

kubernetes-hello-world 0/1 1 0 4m46s

  1. 查看pod,发现新建的pod始终未能进入READY状态:

[root@minikube kubernetes-hello-world-example]# kubectl get pods

NAME READY STATUS RESTARTS AGE

kubernetes-hello-world-7578f45c5d-hr4r7 0/1 Running 1 6m

  1. 从上面的信息可以看出,部署虽然已经完成,但是pod是不可用的,访问网页试试,如下图,果然无法访问:

在这里插入图片描述

检查问题

  1. 执行命令kubectl describe pod kubernetes-hello-world-7578f45c5d-hr4r7检查pod的具体情况,如下图红框所示,两个探针检查都失败了:

在这里插入图片描述

  1. 再看看控制台输出的pod基本情况,里面有探针的信息,如下图所示,两个探针的地址都是/health:

在这里插入图片描述

  1. 打开demo的源码,如下所示,根本就没有路径为/health的服务:

@RestController

public class HelloController {

private static final Log log = LogFactory.getLog(HelloController.class);

@Autowired

private DiscoveryClient discoveryClient;

@RequestMapping(“/”)

public String hello() {

return “Hello World”;

}

@RequestMapping(“/services”)

public List services() {

return this.discoveryClient.getServices();

}

}

现在真相大白了:部署到minikube上的pod,配置了探针地址是/health,但是服务中并没有此路径,因此探针检查一直无法通过;

解决问题

搞清楚问题之后就可以动手解决问题了,这里有两种解决方式:

第一种,修改HelloController.java,增加一个方法,对应的地址是/health的服务;

第二种,修改deployment的配置,将探针地址改为现有的服务,例如"/",这是个可用的服务;

第一种方法很简单,留给读者您来完成吧,我们来试试第二种:

  1. 执行以下命令,开始编辑deployment:

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

ent:

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

[外链图片转存中…(img-L3fDjz2e-1715325250418)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值