Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/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/5/google-sheets/3.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
如何在Kubernetes中更新服务?_Kubernetes_Google Kubernetes Engine - Fatal编程技术网

如何在Kubernetes中更新服务?

如何在Kubernetes中更新服务?,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,背景: 假设我有一个带有一些pod的复制控制器。当这些吊舱首次部署时,它们被配置为公开端口8080。还创建了一个服务(LoadBalancer类型)以公开端口8080。稍后,我们决定从POD中导出一个额外的端口(端口8081)。我们改变了pod的定义,并在没有停机的情况下进行滚动更新,太棒了!但我们希望这个端口也可以公开访问 问题: 有没有一种好方法可以在不停机的情况下更新服务(例如,通过添加一个额外的端口来公开)?如果我这样做: kubectl replace -f my-service-wi

背景:

假设我有一个带有一些pod的复制控制器。当这些吊舱首次部署时,它们被配置为公开端口8080。还创建了一个服务(LoadBalancer类型)以公开端口8080。稍后,我们决定从POD中导出一个额外的端口(端口8081)。我们改变了pod的定义,并在没有停机的情况下进行滚动更新,太棒了!但我们希望这个端口也可以公开访问

问题:

有没有一种好方法可以在不停机的情况下更新服务(例如,通过添加一个额外的端口来公开)?如果我这样做:

kubectl replace -f my-service-with-an-additional-port.json
我收到以下错误消息:

Replace failedspec.clusterIP: invalid value '': field is immutable

在这种情况下,您可以创建第二个服务来公开第二个端口,它不会与另一个端口冲突,并且不会停机

在这种情况下,您可以创建第二个服务来公开第二个端口,它不会与另一个端口冲突,您也不会停机

如果命名POD中的端口,则可以在服务中按名称而不是按编号指定目标端口,然后同一服务可以使用不同的端口号将目标定向到POD


或者,正如Yu-Ju所建议的,您可以对服务的实时状态执行读-修改-写操作,例如通过kubectl编辑。错误消息是由于未指定已设置的clusterIP造成的。

如果在POD中命名端口,则可以在服务中按名称而不是按编号指定目标端口,然后同一服务可以使用不同的端口号将目标定向到POD


或者,正如Yu-Ju所建议的,您可以对服务的实时状态执行读-修改-写操作,例如通过kubectl编辑。错误消息是由于未指定已设置的clusterIP。

如果同一服务运行多个pod,则可以在Google云控制台中使用Kubernetes引擎,如下所示:

在“工作负载”下,选择您的复制控制器。在该屏幕中,单击“编辑”,然后更新并保存您的复制控制器详细信息

在“发现和负载平衡”下,选择您的服务。在该屏幕中,单击“编辑”,然后更新并保存您的服务详细信息。如果您更改了端口,则在编辑完详细信息后,应该可以在“端点”列下看到这些端口

假设一台机器上至少有两个POD运行(且重启策略为“始终”),如果要使用新配置或容器映像更新POD:


在“工作负载”下,选择您的复制控制器。在该屏幕中,向下滚动至“托管吊舱”。选择一个pod,然后在该屏幕中单击“KUBECTL”->“删除”。注意,您可以使用命令行执行相同的操作:
kubectl delete pod
。这将删除并使用新下载的配置和容器映像重新启动它。每次删除一个pod,确保在删除下一个pod之前,等待pod完全重新启动并工作(即检查日志、调试)等

如果同一服务运行多个pod,您可以在Google云控制台中使用Kubernetes引擎,如下所示:

在“工作负载”下,选择您的复制控制器。在该屏幕中,单击“编辑”,然后更新并保存您的复制控制器详细信息

在“发现和负载平衡”下,选择您的服务。在该屏幕中,单击“编辑”,然后更新并保存您的服务详细信息。如果您更改了端口,则在编辑完详细信息后,应该可以在“端点”列下看到这些端口

假设一台机器上至少有两个POD运行(且重启策略为“始终”),如果要使用新配置或容器映像更新POD:


在“工作负载”下,选择您的复制控制器。在该屏幕中,向下滚动至“托管吊舱”。选择一个pod,然后在该屏幕中单击“KUBECTL”->“删除”。注意,您可以使用命令行执行相同的操作:
kubectl delete pod
。这将删除并使用新下载的配置和容器映像重新启动它。每次删除一个pod,确保在删除下一个pod之前,等待pod完全重新启动并工作(即检查日志、调试)等

如果使用v1.2.0-alpha.3或更高版本,可以尝试使用该命令编辑服务对象。否则,您可能需要从json文件中删除不可变字段。如果使用v1.2.0-alpha.3或更高版本,您可以尝试使用该命令编辑服务对象。否则,您可能需要从json文件中删除不可变字段。