有没有办法重新加载pods
创建的当前正在运行的replicationcontroller
以重新应用新创建的services
?
示例:
我有一个由ReplicationController
配置文件创建的正在运行的pod。我删除了一个名为mongo-svc
的服务,并使用不同的端口重新创建它。是否有办法使用新mongo-svc
的新IP和端口更新pod的env文件?
答案 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
。