
Java最全spring-cloud-kubernetes官方demo运行实战,来来来
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
环境信息
本次实战的环境和版本信息如下:
-
操作系统:CentOS Linux release 7.6.1810
-
minikube:1.1.1
-
Java:1.8.0_191
-
Maven:3.6.0
-
fabric8-maven-plugin插件:3.5.37
-
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的设置,否则编译构建的时候会报错:
-
打开maven的配置文件settings.xml,完整路径是apache-maven-3.6.0/conf/settings.xm;
-
在settings.xml文件内,找到pluginGroups节点,在里面增加两行,修改完成后效果如下:
io.fabric8
org.springframework.boot
- 修改完毕保存退出,maven设置完成;
如果您想了解该错误的细节,请参考文章《使用fabric8-maven-plugin插件的错误处理(No plugin found for prefix ‘fabric8’)》;
编译项目源码
-
将上图中的源码下载解压,得到一个新的文件夹spring-cloud-kubernetes-1.0.1.RELEASE;
-
进入文件夹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] ------------------------------------------------------------------------
- 进入目录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] ------------------------------------------------------------------------
- 查看服务,已经创建了,类型是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
- 查看部署,发现始终未能进入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
- 查看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
- 从上面的信息可以看出,部署虽然已经完成,但是pod是不可用的,访问网页试试,如下图,果然无法访问:
检查问题
- 执行命令kubectl describe pod kubernetes-hello-world-7578f45c5d-hr4r7检查pod的具体情况,如下图红框所示,两个探针检查都失败了:
- 再看看控制台输出的pod基本情况,里面有探针的信息,如下图所示,两个探针的地址都是/health:
- 打开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的配置,将探针地址改为现有的服务,例如"/",这是个可用的服务;
第一种方法很简单,留给读者您来完成吧,我们来试试第二种:
- 执行以下命令,开始编辑deployment:
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
ent:
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
[外链图片转存中…(img-L3fDjz2e-1715325250418)]
更多推荐
所有评论(0)