重新加载 Kubernetes ReplicationController 以获取新创建的服务



有没有办法重新加载当前正在运行的podsreplicationcontroller创建以重新应用新创建的services

例:

我有一个由ReplicationController配置文件创建的正在运行的 pod。我删除了一个名为mongo-svc的服务,并使用不同的端口再次重新创建它。有没有办法使用新mongo-svc的新 IP 和端口更新 pod 的环境文件?

您可以通过简单地删除它们来重新启动它们:如果它们链接到复制控制器,RC 将负责重新启动它们

kubectl delete pod <your-pod-name>

如果你有几个 pod,复制

/粘贴 pod 名称很容易,但如果你有很多 pod,它可能会变得很麻烦。

因此,删除 Pod 并重新启动它们的另一种方法是将 RC 缩减到 0 个实例并备份到您需要的数量。

kubectl scale --replicas=0 rc <your-rc>
kubectl scale --replicas=<n> rc <your-rc>

顺便说一下,您可能还想查看"滚动更新"以更有利于生产的方式执行此操作,但这意味着更新 RC 配置。

如果您希望同一个 pod 具有新服务,则答案是否定的。 您可以(我强烈建议不要这样做)运行kubectl exec <pod-name> -c <containers> -- export <service env var name>=<service env var value>. 但最好的办法是运行kubectl delete <pod-name>并让复制控制器处理工作。

对于在 kubernetes 之外运行的服务,例如数据库,我遇到了类似的问题,为了解决这个问题,我一直在创建这个 https://github.com/cpg1111/kubongo,它可以在不删除 pod 的情况下更新服务的端点。 同样的想法也可以应用于 kubernetes 中的其他 pod,以自动化服务更新。 基本上,它会监视特定的服务,当IP因任何原因更改时,它会更新所有Pod而不删除它们。 这确实使用与kubectl exec相同的代码,但它是自动化的,清理输入并确保在所有 Pod 上执行export

"重新申请"是什么意思?

服务指向的容器通常根据标签进行选择。换句话说,您可以在 Pod 中添加/删除标签,以在服务中包含/排除它们。

有关定义服务的更多信息,请阅读此处:http://kubernetes.io/v1.1/docs/user-guide/services.html#defining-a-service

有关标签的更多信息,请点击此处:http://kubernetes.io/v1.1/docs/user-guide/labels.html

希望对您有所帮助!

最新更新