Kubernetes:创建服务vs公开部署

时间:2019-12-18 17:45:52

标签: kubernetes google-cloud-platform google-kubernetes-engine

我是kubernetes的新手。我正在阅读一些与kubernetes部署相关的教程。我看到了两个看起来更苗条的命令。

  1. 以下命令来自Google代码实验室(URL:https://codelabs.developers.google.com/codelabs/cloud-springboot-kubernetes/index.html?index=..%2F..index#7

    $ kubectl create service loadbalancer hello-java --tcp=8080:8080

  2. 与Kubernetes站点(https://kubernetes.io/docs/tutorials/stateless-application/expose-external-ip-address/)一起在另一个地方出现了另一个命令

    $ kubectl expose deployment hello-world --type=LoadBalancer --name=my-service


现在,按照我的理解,这两个命令都是通过使用loadbalancer的部署创建服务并将其暴露给外部环境。

我认为同一任务不会有两个单独的命令。应该有一些我无法理解的差异。

任何人都可以向我澄清一下。

3 个答案:

答案 0 :(得分:1)

我希望这会有所帮助:关键是要了解服务和部署之间的区别。通过此链接[1],您会注意到部署会自动处理Pods的死亡率。但是,如果Pod已终止,然后又旋转了另一个Pod, 当IP地址更改时,Pod继续通信吗?他们使用服务:“服务是一种抽象,定义了Pod的逻辑集合和访问它们的策略”。另外,查看此链接[2]可能会很有用,因为它描述了kubectl暴露命令创建了一个服务,该服务又创建了一个外部IP和一个负载均衡器。作为初学者,复习Kubernetes所使用的命令语言可能会有所帮助,此链接[3]描述(如另一个答案中所述)kubectl create命令用于更具体地说明其创建的对象。以及使用create命令,您可以创建更多种类的对象。

[1]:服务:https://kubernetes.io/docs/concepts/services-networking/service/ [2]:部署容器化的Web应用程序:https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app#step_6_expose_your_application_to_the_internet [3]:如何创建对象:https://kubernetes.io/docs/tasks/manage-kubernetes-objects/imperative-command/#how-to-create-objects

答案 1 :(得分:0)

据我了解,方法1(使用创建服务)仅创建服务对象,并且由于未指定标签选择器,因此它没有任何底层目标容器。但是在方法2(使用公开部署)中,由于服务会自动附加有必需的标签,因此服务会平衡使用部署创建的所有Pod。

答案 2 :(得分:-1)

主要区别可以从文档中看出。

1.- kubectl create 命令

  

从文件或标准输入创建资源。

     

可接受JSON和YAML格式。

2.- kubectl公开命令

  

将资源公开为新的Kubernetes服务。

     

查找部署,服务,副本集,复制控制器或   按名称pod并使用该资源的选择器作为选择器   用于指定端口上的新服务。 [...]


尽管两者在您提供的示例中都实现了相同的目的,但是create命令是一种更具全局性的命令,使用它您可以使用命令行或yaml / json文件创建所有资源。但是,暴露命令只会创建服务资源,主要用于公开其他已经存在的资源。

来源:K8s Docs