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

时间:2016-01-25 14:02:44

标签: kubernetes

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

示例:

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

3 个答案:

答案 0 :(得分:4)

只需删除它们即可重启 pod:如果它们链接到复制控制器,RC将负责重启它们

kubectl delete pod <your-pod-name>

如果你有一对豆荚,很容易就能复制/粘贴豆荚名称,但是如果你有很多豆荚,它会变得很麻烦。

另外一种删除pod并重新启动它们的方法是将RC缩小到0个实例并备份到你需要的数字。

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

顺便说一下,您可能还希望以更加生产友好的方式查看“rolling-updates”,但这意味着更新RC配置。

答案 1 :(得分:1)

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

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

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

这里有关于标签的更多信息:http://kubernetes.io/v1.1/docs/user-guide/labels.html

希望它有所帮助!

答案 2 :(得分:1)

如果您希望同一个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来更新服务&#39;没有删除pod的端点。同样的想法也可以应用于kubernetes中的其他pod以自动化服务更新。基本上它会监视特定的服务,当它的IP因任何原因发生变化时,它会更新所有的pod而不删除它们。这确实使用与kubectl exec相同的代码,但它是自动化的,清理输入并确保在所有pod上执行export