![](/img/trans.png)
[英]In Kubernetes, how can i have an access mode to allow one pod at a time to write and many pods to read only?
[英]Kubernetes - my 2 Apps Deployments are different only in one "args" - can I have the Service which will reference both of them?
我想我有有趣的用例,所以我想听听有更多知识的人的建议。 我的应用程序(“广告”)在 Kubernetes 中运行没有任何问题。 它在端口 9000 上运行。它的 args 具有其实例名称 ( serverName
),并且在服务器列表中它还引用了所有其他服务器 ( servers
),以便以性能原因所需的所谓companion mode
运行这些服务器. 请记住,这不是 WEB SERVER ,简单的副本将无法满足我们的需要,即让多个 ADS 服务器在所谓的协同模式下工作,在这种模式下,主服务器将缓存的数据发送到另一台服务器,因此该服务器还具有最近的数据,并且可以在发生故障时接管。
从第一个 ADS YAML 文件中解脱出来:
-in serverName
我们指定服务器实例的名称 -in servers
arg 我们指定常规 ADS 服务器地址及其端口。
args:
....
"-serverName", "ads"
"-servers", "{ { ads , ads-test:9000 }, { ads2 , ads-test2:9000}"]
ports:
- containerPort: 9000
..................
kind: Service
metadata:
name: ads-test
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 9000
selector:
app: ads-test
因此,在 arguments 的列表中,我们指定了我们应该使用带有ads-test:90000的 TCP 连接(不是 HTTP 连接)访问该 ADS 实例的服务。 由于这是容器化的应用程序,我不知道除了“ServiceName:port”之外我还能指定什么作为服务器地址,因为这个应用程序的开发并没有假设容器化的应用程序。
所以第二个 YAML 应该只与serverName
信息不同。 我添加了额外的服务ads-test2
args:
....
"-serverName", "ads2"
"-servers", "{ { ads , ads-test:9000 }, { ads2 , ads-test2:9000}"]
ports:
- containerPort: 9000
..................
kind: Service
metadata:
name: ads-test2
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 9000
selector:
app: ads-test2
由于这实际上是同一个应用程序,但只有一个参数在其配置( serverName
)中有所不同,我想知道是否有某种方法可以简化这一点并使用单个服务来访问两个 ADS 服务器,但要在其中进行此配置server
参数实际上激活了这种companion
模式,出于性能原因需要使用不同的服务器,但在两台服务器上都有最新的信息。
谢谢
不,您不能为两个逻辑上不同的 pod 提供单一服务。 服务通常在副本 pod 之间进行负载平衡。 因此,您的 pod 上的用户请求将自动由服务自动路由到任何 pod。因此,在您的情况下,您不希望这种情况发生。 广告请求可以欺骗 ads2 服务器 pod。 推荐的方法是为您的 pod 提供两种不同的服务,或者您可以在单个 pod 中拥有多个容器并在这种情况下拥有单一服务。 服务器名称的参数可以从环境中获取。 环境:键:值:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.