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

安装方式

官方文档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服务公开。

  1. 使用以下命令将 Pod 公开到公共互联网kubectl expose

    kubectl expose deployment hello-node --type=LoadBalancer --port=8080

    --type=LoadBalancer标志表示您希望在集群外部公开您的服务。

    测试映像内的应用程序代码仅侦听 TCP 端口 8080。如果您曾经 kubectl expose公开不同的端口,则客户端无法连接到该其他端口。

  2. 查看您创建的服务:

    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 命令访问。

  3. 运行以下命令:

    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