Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在Kubernetes中创建一个简单的Hello World应用程序_Spring Boot_Docker_Kubernetes - Fatal编程技术网

Spring boot 在Kubernetes中创建一个简单的Hello World应用程序

Spring boot 在Kubernetes中创建一个简单的Hello World应用程序,spring-boot,docker,kubernetes,Spring Boot,Docker,Kubernetes,大多数软件技术人员都有一个“Hello World”类型的示例可以开始使用。对于库伯内特斯来说,这似乎是缺乏的 我的情况再简单不过了。我有一个简单的hello world应用程序,它是用Spring Boot制作的,带有一个Rest控制器,返回“hello hello!” 创建docker文件后,我构建了如下图像: docker build -t helloworld:1.0 . docker run -p 8080:8080 helloworld:1.0 然后我在一个容器中运行它,如下所示

大多数软件技术人员都有一个“Hello World”类型的示例可以开始使用。对于库伯内特斯来说,这似乎是缺乏的

我的情况再简单不过了。我有一个简单的hello world应用程序,它是用Spring Boot制作的,带有一个Rest控制器,返回“hello hello!”

创建docker文件后,我构建了如下图像:

docker build -t helloworld:1.0 .
docker run -p 8080:8080 helloworld:1.0
然后我在一个容器中运行它,如下所示:

docker build -t helloworld:1.0 .
docker run -p 8080:8080 helloworld:1.0
如果我现在打开浏览器,我可以在此处访问我的应用程序:

http://localhost:8080/hello/
它返回:

"Hello Hello!"
太好了!到目前为止还不错

接下来我标记它(我的docker中心名为ollyw123,我的图像ID为776…)

和推送:

docker push ollyw123/helloworld
如果我登录Docker Hub,我将看到

现在我想把这个连接到库伯内特斯。这就是我陷入困惑状态的地方

我的想法是,我需要创建一个集群。不知何故,我需要将这个集群连接到我的图像,据我所知,我只需要使用图像的URL来连接(即。 )

接下来,我必须创建一个服务。然后,该服务将能够通过某个端口公开我的“Hello World!”rest调用。这是我的逻辑思维,对我来说这似乎是一件非常简单的事情,但是关于库伯内特斯的教程和文档是一个混乱和死胡同的雷区

从spring boot kubernetes教程()开始,我必须创建一个部署对象,然后创建一个服务对象,然后我必须“应用”它:

嗯。现在我看到一个服务:

但是现在呢

如何将其推送到云端?(例如gcloud)我需要先创建一个集群吗,还是这已经是一个集群了


我的下一步应该是什么?

您拥有的服务类型为
clusterIP
,只能从kubernetes集群中访问。您需要使用或键入服务,或者在远程kubernetes群集(公共或私有云环境中部署kubernetes的一组VM或裸机服务器)或本地minikube/docker桌面之外公开应用程序。一旦您这样做了,您应该能够在Kubernetes的上下文中使用浏览器或curl访问它,
Cluster
是运行
PODS
服务的环境。把它想象成一个虚拟机环境,在这里您可以设置Web服务器等等。。(尽管我不喜欢自己的比喻)

如果你想在GCloud中运行同样的东西,那么你需要在那里创建一个Kubernetes集群,你需要做的就是通过Google Cloud提供的CLI在那里应用你的
YAML
文件,该文件包含
服务
部署


为了通过本地命令提示符与GCloud GKS集群交互,需要获取该集群的凭据。官方GCloud文档解释如何检索群集凭据。完成后,您可以使用命令提示符通过
kubectl
命令开始与运行在GCloud中的Kubernetes实例交互。

关于您的问题,我们需要了解几个概念

第一个是关于Kubernetes中的“Hello World”应用程序。即使如此(正如Limido在评论[]中提到的),该应用程序本身也不是Kubernetes应用程序,而是以您选择的语言创建的应用程序,该应用程序是容器化的,并部署在Kubernetes中

所以我把它称为(在你的例子中)一个停靠的SpringBoot HelloWorld应用程序

好的,现在我们有了一个容器,我们可以简单地在docker上部署它,但是如果您的容器死亡了,或者您需要上下扩展它,管理卷、网络流量和一系列其他事情,这就开始变得复杂了(想象一下现实生活中的场景,数百甚至数千个容器同时运行)。这正是容器编排开始的地方

Kubernetes帮助您在一个地方管理这种复杂性

我想谈的第三个概念是
create
apply
命令。您肯定可以在中找到更详细的解释,但这两种方法都可以用于在Kubernetes中创建资源

在您的情况下,
create
命令没有创建资源,因为您正在使用
--dry run
并将输出添加到部署文件中,稍后您将应用该文件,但以下命令也会创建资源:

kubectl create deployment hello-world-dep --image=ollyw123/helloworld

kubectl create service clusterip hello-world-dep --tcp=8080:8080
请注意,即使这样,如果您需要共享此部署或将其提交到存储库中,您也需要获得它:

kubectl get deployment hello-world-dep -o yaml > your-file.yaml
因此,拥有定义文件是非常有帮助的,也是推荐的

太好了。。。更进一步

当您进行部署时,您还将有许多预期要运行的复制副本(即使您没有定义它-默认值为1)。在您的情况下,您的部署正在管理一个

如果您运行:

kubectl get pods -o wide
您将获得您的pod hello world dep哈希和IP地址。这个IP是你容器的IP,你可以使用它访问你的应用程序,但是由于pod是短暂的,如果你的pod死亡,Kubernetes会用一个新的IP地址(自动)为你创建一个新的,因此如果你有一个后端,并且它的IP是不断变化的,每次有新的后端pod时,您都需要在前端管理此更改

为了解决这个问题,Kubernetes提供了一个新的方法,它将以持久的方式公开部署。因此,如果您的pod死亡,新pod返回,您的服务地址将保持不变,所有流量将自动路由到您的新pod

当您有多个部署副本时,该服务还会在所有可用的POD之间进行负载平衡

最后但并非最不重要的是,你的问题

你问过,现在怎么办

基本上,一旦你有了申请表