我已经研究过k8s,但是找不到我没有完成的简单设置的答案。
我有2个应用程序(2个容器),它们可以一起工作但不相关。
app1
接收并过滤数据,然后发送到app2
。
deployment
; POD
中),因为它们不应该共享任何内容-通信在标准网络上进行。-> 第一季度这种方法正确吗?
因此,我有2个对应于这2个应用程序的部署。在deployment1.yaml
和deployment2.yaml
中定义。
每个人都可以使用kubectl scale
独立扩展。
我的两个部署应该一起工作,因此如果要扩展,我想:
deployment1
和deployment2
-> 第二季度是否可以使用k8s
执行多部署规模?
deployment1
的新创建实例做一些事情,以便它知道存在deployment2
的新实例(IP地址等)。即我想通过deployment2
ip向其发送一些请求。 -> 第三季度是否可以通过某种方式钩住after-successful-scale
来运行某些代码?例如bash脚本?如果有-谁经营?主节点?一些初始化容器?
无论3.
为何,我都希望deployment1
在启动时从某个地方提取其配置。或者,在启动时以某种方式将文件附加到该文件。
-> 第四季度,有没有办法动态地做到这一点? deployment1
的第一个实例可能与第二个实例具有不同的配置。我知道我可以使用StatefulSets而不是Deployments来识别唯一实例。
我想到了使用一些共享的卷/ ConfigMap,以便所有实例都将读取自己的唯一配置及其实例编号。但是我也认为有一种更标准的方法来做到这一点,所以我问。
我认为在琐碎的Web应用程序设置中满足这些要求的方法是什么,并认为:
deployments
都需要根据某些触发条件自动缩放。 deployments
都导出一个LoadBalancer,因此app1
总是与app2
的LoadBalancer进行对话-这样deployment1
实际上是独立于deployment2
的; scale和LoadBalancer均可处理负载。 -> 第5季度,这种想法对微不足道的情况是否正确?
答案 0 :(得分:2)
对于q5:仅创建一个服务,让应用程序在kubernetes集群内部进行对话,该服务将处理负载平衡(按请求)。您不需要LoadBalancer
类型的服务,而使应用程序使用外部IP。
q1-q4:您可以使用kubernetes API(可能还有客户端库)编写自己的运算符。有一个watch API,因此您可以自动通知与操作员相关的更改,因此不必轮询。
答案 1 :(得分:1)
对于1和2:可以使用两个部署A和B,以及两个服务svcA和svcB来显示Pod。这样,A可以简单地使用名称“ svcB”来引用B。
您真的需要知道是否创建了pod的新实例吗?因为如果pod B有多个实例正在运行,则服务svcB
将充当负载均衡器,并在B的实例之间分配负载。
要存储配置,请使用ConfigMap,并在部署中为A和B安装到configmap。但是,这将为您提供所有Pod实例的相同配置。
如果您确实需要知道您使用的是哪个特定容器,则可以使用有状态集而不是部署。主机名将包含Pod ID,以便您可以区分不同的实例。
答案 2 :(得分:0)