SpringCloud On Kubernets
原文地址 https://www.baeldung.com/spring-cloud-kubernetes
代码地址:https://github.com/eugenp/tutorials/tree/master/spring-cloud-modules/spring-cloud-kubernetes
一,概述
SpringCloud由于有自己的微服务管理方式,但是当前云原生流行Kubernetes,如果我们决定选择 Kubernetes 作为我们解决方案的主要容器管理器和部署平台,我们仍然可以主要通过 Spring Cloud Kubernetes项目来实现与Kubernetes 的轻松集成。
在本教程中,我们将:
- 在我们的本地机器上安装 Minikube
- 开发一个微服务架构示例,其中两个独立的 Spring Boot 应用程序通过 REST 进行通信
- 使用 Minikube 在单节点集群上设置应用程序
- 使用YAML配置文件部署应用程序
二、Minikube
安装方式
官方文档https://minikube.sigs.k8s.io/docs/start/
minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。只要我们本地环境中安装了Docker,那么只需一条命令即可使用 Kubernetes:
minikube start
MacOS安装方式:
brew install minikube
启动本地单节点 Kubernetes 集群:
minikube start --vm-driver=virtualbox
此命令创建一个使用 VirtualBox 驱动程序运行 Minikube 集群的虚拟机。kubectl中的默认上下文现在将是minikube。但是,为了能够在上下文之间切换,
kubectl config use-context minikube
Kubernetes仪表盘
minikube dashboard
停止集群
minikube stop
创建服务
默认情况下,Pod 只能通过其在 Kubernetes 集群内的内部 IP 地址进行访问。为了使hello-node
容器可以从 Kubernetes 虚拟网络外部访问,您必须将 Pod 作为 Kubernetes服务公开。
使用以下命令将 Pod 公开到公共互联网
kubectl expose
:kubectl expose deployment hello-node --type=LoadBalancer --port=8080
该
--type=LoadBalancer
标志表示您希望在集群外部公开您的服务。测试映像内的应用程序代码仅侦听 TCP 端口 8080。如果您曾经
kubectl expose
公开不同的端口,则客户端无法连接到该其他端口。查看您创建的服务:
kubectl get services
输出类似于:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
在支持负载均衡器的云提供商上,将配置外部 IP 地址来访问服务。在 minikube 上,该
LoadBalancer
类型使服务可以通过minikube service
命令访问。运行以下命令:
minikube service hello-node
这将打开一个浏览器窗口,为您的应用程序提供服务并显示应用程序的响应。
=
三、部署
示例代码: https://github.com/eugenp/tutorials/tree/master/spring-cloud-modules/spring-cloud-kubernetes
首先使用maven clean 和maven package做重新打包,可以使用IDEA的maven插件,先添加kubernets-guide项目,在该项目下做maven命令的运行,
此时运行: sh deployment-travel-client.sh
部署结束后使用会展示部署的pod
% kubectl get pod
NAME READY STATUS RESTARTS AGE
client-service-675b8645dc-b8qxg 1/1 Running 0 89s
travel-agency-service-8546b9968f-27skw 1/1 Running 0 90s
travel-agency-service-8546b9968f-qrgnn 1/1 Running 0 90s
查看部署服务的service
% kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
client-service NodePort 10.110.144.4 <none> 8080:30083/TCP 25m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h16m
mongodb-service NodePort 10.97.205.39 <none> 27017:31983/TCP 25m
travel-agency-service NodePort 10.105.219.194 <none> 8080:30081/TCP 25m
查看client-serivce在minikube上的service信息
% minikube service client-service
|-----------|----------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|---------------------------|
| default | client-service | 8080 | http://192.168.49.2:30083 |
|-----------|----------------|-------------|---------------------------|
🏃 Starting tunnel for service client-service.
|-----------|----------------|-------------|------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|------------------------|
| default | client-service | | http://127.0.0.1:60732 |
|-----------|----------------|-------------|------------------------|
🎉 正通过默认浏览器打开服务 default/client-service...
❗ 因为你正在使用 darwin 上的 Docker 驱动程序,所以需要打开终端才能运行它。
这时候通过访问http://127.0.0.1:60732/就可以访问到client-service