docker - 在openshift中同步服务的所有Pod

标签 docker spring-boot kubernetes openshift

我在openshift 3中创建了一个服务(后端),并且旋转了3个pod。因此,共有三个Pod,分别是backend-1-abc,backend-1-xyz和backend-1-efg。我也为此https://backend.abc.com添加了路由器。

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

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

请告诉我,有没有办法同时刷新所有Pod的缓存。

最佳答案

我认为您可以尝试直接访问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

-我根据Graham的解决方案进行了更新。

如果确保刷新缓存,则可以请求所有Pod。
  • oc get endpoints <Your backend service name> -o yaml | grep ip可以列出您所有的pod IP。
  • 您可以基于上述IP创建并运行批处理脚本。
  • 关于docker - 在openshift中同步服务的所有Pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51612529/

    相关文章:

    spring-boot - 如何使用管理客户端访问keycloak?

    java - 根据 Activity 配置文件从自定义文件加载属性

    java - 可插入类型检查器和检查器框架,真的需要所有这些设置吗?

    kubernetes - 向现有 Helm chart 添加额外注释

    node.js - 任何适用于 Nodejs Express 源代码的混淆器

    docker - 用于子 docker 图像的 ONBUILD 部分的占位符字段

    docker - LINKERD:无法从linkerd构建docker镜像

    java - 如何从单个 Docker 容器中捕获多个日志流?

    kubernetes - GKE上的petset:找不到请求的资源

    macos - Mac中的Kubernetes连接错误