我在本地计算机上创建了一个pod。我在本地计算机上也有一个脚本文件。我想从容器中运行该脚本文件(我将在容器中并运行本地主机上存在的脚本)。
该脚本将更新另一个窗格的/etc/hosts
。有没有一种方法可以从另一个吊舱更新一个吊舱的/etc/hosts
?这些Pod是从两个不同的部署中创建的。
答案 0 :(得分:2)
我想从容器中运行该脚本文件(我将在容器中并运行本地主机上存在的脚本)。
您不能那样做。在普通的Docker上下文中,Docker的主要优势之一是文件系统隔离,因此,除非将容器的一部分明确地发布到容器中,否则容器根本看不到主机的文件系统。在Kubernetes中,不仅存在此限制,而且您对运行在哪个节点上的控制也受到限制,并且如果一个节点具有给定脚本而另一个节点没有给定脚本,则可能会出现问题。
有没有一种方法可以从另一个吊舱更新一个吊舱的
/etc/hosts
?
通常,您应避免将/etc/hosts
用于任何内容。设置DNS服务可以使事情保持一致,并避免在多个地方手动编辑文件。
Kubernetes为您提供DNS服务。特别是,如果您define a Service,则the name of that Service will be visible as a DNS name(在群集内);一个吊舱可以通过first-service-name.default.svc.cluster.local
到达另一个吊舱。这可能就是您真正要寻找的答案。
(如果您确实只有一个单节点环境,那么Kubernetes会增加很多复杂性并且没有太大好处;请考虑使用普通的Docker和Docker Compose。)
答案 1 :(得分:0)
除了David的答案外,您还可以使用cp将脚本从主机复制到Pod:
kubectl cp [file-path] [pod-name]:/[path]
在评论中关于您的问题。您可以通过公开部署来做到这一点:
kubectl expose deployment/name
这将导致创建服务,您可以在此section中找到更多实用的示例和方法。 因此,在特定Pod终止后,您仍然可以通过相同的端口和服务到达新Pod。您可以找到更多详细信息here。
在文档中的示例中,您可以看到已使用容器端口80创建了nginx Pod,暴露命令将具有以下效果:
此规范将创建一个针对TCP端口80的服务 运行以下命令的任何Pod:my-nginx标签,并将其公开显示 服务端口(targetPort:是容器接受流量的端口 on,port:是抽象的Service端口,可以是其他任何端口 吊舱用于访问服务)。查看服务API对象以查看 服务定义中支持的字段列表
除此之外,David似乎在这里提供了很好的解释,这将发现有关FQDN和DNS的更多信息-它也与服务连接。