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