【问题标题】:Synchronising all the pods of a service in openshift在 openshift 中同步服务的所有 Pod
【发布时间】:2019-01-07 19:11:46
【问题描述】:

我在 openshift 3 中创建了一个服务(后端),并且我已经启动了 3 个 pod。所以有 3 个 pod backend-1-abc、backend-1-xyz 和 backend-1-efg。我还为此https://backend.abc.com 添加了路由器。

每个 pod 都有一个内置缓存,它从 DB 中读取数据并将其存储到其内部缓存中。还有一个端点“/refresh”。仅当我们明确点击端点“/refresh”时,才会刷新 pod 中的缓存。

但我的问题是每当我点击“https://backend.abc.com/refresh”时,由于 Kubernetes 负载平衡,只会调用一个 pod 的 /refresh 端点并且它的缓存会被刷新。但其他两个 pod 的缓存保持不变。

请告诉我,有什么方法可以同时刷新所有 pod 的缓存。

【问题讨论】:

    标签: docker spring-boot kubernetes openshift


    【解决方案1】:

    我觉得你可以尝试直接访问Service,因为Service处理请求是基于round-robin算法的。

    例如>

    # oc get svc
    NAME      CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    backend   172.30.6.68     <none>        8080/TCP   1m 
    
    --- Repeat the curl cmd 3times, if you have 3 pods.
    # curl http://172.30.6.68:8080/refresh
    # curl http://172.30.6.68:8080/refresh
    # curl http://172.30.6.68:8080/refresh
    

    -- 我根据格雷厄姆的解决方案进行了更新。

    如果确保刷新缓存,则可以向所有 pod 请求。

    • oc get endpoints &lt;Your backend service name&gt; -o yaml | grep ip 可以列出你所有的 Pod IP。
    • 您可以根据以上 IP 创建并运行批处理脚本。

    【讨论】:

    • 您无法保证在通过服务访问时它们会被传送到不同的 pod。您需要通过 IP 访问各个 Pod。
    • 实际上,您也不应该使用 pod IP。应该使用 pod 名称作为主机名。如果您需要对 pod 名称的可预测性,请使用 StatefulSet。
    猜你喜欢
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多