当前位置: 首页 > 知识库问答 >
问题:

是否有一种有效的方法来创建在kubernetes中自动更新osrm地图数据的机制?

邢飞昂
2023-03-14

我们创建了 .yaml 文件来在 Kubernetes 集群中部署 osrm/osrm-backend (https://hub.docker.com/r/osrm/osrm-backend/tags)。

我们首先在节点的卷中下载pbf文件,然后为服务创建必要的文件,最后服务启动。

您可以在下面找到yaml文件:

apiVersion: v1
kind: Service
metadata:
  name: osrm-albania
  labels:
    app: osrm-albania
spec:
  ports:
  - port: 5000
    targetPort: 5000
    name: http
  selector:
    app: osrm-albania
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: osrm-albania
spec:
  replicas: 1
  selector:
    matchLabels:
     app: osrm-albania
  template:
    metadata:
      labels:
        app: osrm-albania
    spec:
      containers:
      - name: osrm-albania
        image: osrm/osrm-backend:latest
        command: ["/bin/sh", "-c"]
        args: ["osrm-extract -p /opt/car.lua /data/albania-latest.osm.pbf && osrm-partition /data/albania-latest.osrm && osrm-customize /data/albania-latest.osrm && osrm-routed --algorithm mld /data/albania-latest.osrm"]
        ports:
        - containerPort: 5000
          name: osrm-port
        volumeMounts:
        - name: albania
          readOnly:  false
          mountPath: /data
      initContainers:
      - name: get-osrm-file
        image: busybox
        command: ['wget', 'http://download.geofabrik.de/europe/albania-latest.osm.pbf', '--directory-prefix=/data']
        volumeMounts:
        - name: albania
          readOnly: false
          mountPath: /data
      volumes:
      - name: albania
        emptyDir: {}

问题是我们需要定期更新osrm服务使用的地图数据。这意味着能够重新下载pbf文件并重新创建服务所需的文件。

这可以通过kubernetes cronjobs实现,后者可能需要使用持久卷(kubernetes中的Cron Jobs-连接到现有Pod,执行脚本)。

这是获得新地图数据和刷新osrm服务使用的数据的唯一方法吗?具体如何?有没有更好更简单的方法来实现这一点?

共有1个答案

太叔昆
2023-03-14

这是一个棘手的情况,我在我的集群中遇到了同样的问题,我修复了在更多pod中划分作业的问题:

  • 1卷装入(“卷a”)
  • 2在“卷A”中提取、分区、自定义
  • 3将“卷A”复制到卷装载B
  • 4运行osrm,路由为“卷B”

通过这种方式,将pod 1、2和3设置为cron作业,每个pod将执行所有操作而不会破坏服务。这个问题是由于前3次操作的大量时间(2到3小时)造成的。

 类似资料:
  • 一旦达到数据类型的限制,我想增加该数据类型的大小。例如,假设我有一门课: 一旦我更改了counter.x的值,我希望它将x提升为无符号int而不是无符号short。 我这样做的原因是为了在计数器类中存储尽可能少的内存。

  • 问题内容: 我经常发现自己需要过滤a 或使用谓词来检查给定字段是否具有给定值。 比如说我有这个POJO: 我想根据的值过滤对象的: 是否会有一种方便的方法来为该方法生成谓词?我注意到有,但不符合需要。 我可以很容易地这样写: 并将其用作: 但我希望尽可能重用JDK中的现有方法。 问题答案: 没有内置的工厂方法,您可以通过查看JFC中的所有用法并查找“ …中返回谓词的方法” 来轻松检查。除了自身内部

  • 问题内容: 拥有下一张原始地图: 在G1,G2和G3是不同年龄段的人群时,如何创建这样的新地图: 新密钥是每个组中的最大年龄。 我已经试过了: 但是编译器对我说:在这段代码中,“此表达式的目标类型必须是函数接口”: 任何帮助,将不胜感激。 问题答案: toMap使用和的功能。您在代码中正确地执行了此操作,但是对于,您却没有正确执行此操作,因此您需要包含以下函数: 注意 。 此外,由于您不使用地图键

  • 问题内容: 一直困扰我的是Javascript中的方法多么不可预测。 根据我的经验,在很多情况下计时器都非常不准确。所谓不准确,是指实际延迟时间或多或少地相差250-500ms。尽管这不是很长的时间,但是使用它来隐藏/显示UI元素时,时间显然是显而易见的。 是否有任何技巧可以确保准确执行(无需借助外部API),或者这是一个失败的原因? 问题答案: 是否有任何技巧可以确保准确执行(无需借助外部API

  • 我试着在Firebase Analytics中吸引观众,将“app version”设置为“contains‘debug’”。我的应用程序的调试版本在版本名字符串的末尾追加“-debug”。 但是,当我运行应用程序时,虽然Firebase为我的会话记录数据,但它没有为“调试观众”记录任何数据。 是否有一种方法来创建开发人员构建的受众,不管是通过版本名,还是任何其他方法? 谢谢!

  • 有没有Angular2的方法可以做到这一点,或者我只是使用老式的JavaScript?