docker - 将 Kubernetes 用于 TileServer-GL 以及自定义配置和样式文件

标签 docker kubernetes kubernetes-pod openmaptiles

如何使用 Kubernetes 添加自定义 config.json 并添加自定义样式 /styles/custom.json 到tileserver-gl?这是到目前为止我的 kubernetes list 文件的内容。 Tileserver-gl 已启动并运行良好,但我没有看到我定义的自定义主题。看起来我的自定义 config.json 文件没有被应用。使用 configMapvolumeMounts 是正确的方法吗?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: map-tile-server
  namespace: test
  labels:
    app: map-tile-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: map-tile-server
  template:
    metadata:
      namespace: test
      labels:
        app: map-tile-server
    spec:
      containers:
        - name: map-tile-server
          image: klokantech/tileserver-gl:v2.6.0          
          ports:
            - containerPort: 8080
              name: http
          volumeMounts:
            - name: "map-tile-server-config"
              mountPath: "/config.json"
            - name: "map-tile-server-style-config"
              mountPath: "/styles/custom.json"
          resources:
            limits:
              memory: "256Mi"
              cpu: "1"
      volumes:
        - name: "map-tile-server-config"
          configMap:
            name: "map-tile-server-config"
        - name: "map-tile-server-style-config"
          configMap:
            name: "map-tile-server-style-config"
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: "{ \"options\": { \"paths\": { \"root\": \"\", \"fonts\": \"\", \"styles\": \"styles\", \"mbtiles\": \"data\" }, \"serveStaticMaps\": true, \"formatQuality\": { \"jpeg\": 90, \"webp\": 90 }, \"maxSize\": 8192, \"pbfAlias\": \"pbf\" }, \"styles\": { \"custom\": { \"style\": \"custom.json\", \"tilejson\": { \"bounds\": [-180, -90, 180, 90] } } }, \"data\": { \"v3\": { \"mbtiles\": \"zurich.mbtiles\" } } }"
metadata:
  name: map-tile-server-config
  namespace: test
---
apiVersion: v1
kind: ConfigMap
data:
  custom.json: "{ \"version\": 8, \"name\": \"Custom\",  \"metadata\": { \"mapbox:autocomposite\": false, \"mapbox:type\": \"template\", \"maputnik:renderer\": \"mbgljs\", \"openmaptiles:version\": \"3.x\", \"openmaptiles:mapbox:owner\": \"openmaptiles\", \"openmaptiles:mapbox:source:url\": \"mapbox://openmaptiles.4qljc88t\"  },  \"sources\": {\"openmaptiles\": {\"type\": \"vector\", \"url\": \"mbtiles://{v3}\"}},  \"sprite\": \"\",  \"glyphs\": \"{fontstack}/{range}.pbf\",  \"layers\": [ {\"id\": \"background\",\"type\": \"background\",\"layout\": {\"visibility\": \"visible\"},\"paint\": {\"background-color\": \"rgba(49, 52, 56, 1)\"} }, {\"id\": \"landuse-residential\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landuse\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"Polygon\"],  [\"in\", \"class\", \"residential\", \"suburb\", \"neighbourhood\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(47, 13%, 86%)\", \"fill-opacity\": 0.7} }, {\"id\": \"landcover_grass\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"==\", \"class\", \"grass\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(82, 46%, 72%)\", \"fill-opacity\": 0.45} }, {\"id\": \"landcover_wood\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"==\", \"class\", \"wood\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-color\": \"hsl(82, 46%, 72%)\",  \"fill-opacity\": {\"base\": 1, \"stops\": [[8, 0.6], [22, 1]]}} }, {\"id\": \"water\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"water\",\"filter\": [\"all\", [\"==\", \"$type\", \"Polygon\"], [\"!=\", \"intermittent\", 1]],\"layout\": {\"visibility\": \"visible\"},\"paint\": {\"fill-color\": \"rgba(34, 35, 40, 1)\"} }, {\"id\": \"water_intermittent\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"water\",\"filter\": [\"all\", [\"==\", \"$type\", \"Polygon\"], [\"==\", \"intermittent\", 1]],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(205, 56%, 73%)\", \"fill-opacity\": 0.7} }, {\"id\": \"landcover-ice-shelf\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"==\", \"subclass\", \"ice_shelf\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(47, 26%, 88%)\", \"fill-opacity\": 0.8} }, {\"id\": \"landcover-glacier\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"==\", \"subclass\", \"glacier\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-color\": \"hsl(47, 22%, 94%)\",  \"fill-opacity\": {\"base\": 1, \"stops\": [[0, 1], [8, 0.5]]}} }, {\"id\": \"landcover_sand\",\"type\": \"fill\",\"metadata\": {},\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"all\", [\"in\", \"class\", \"sand\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-antialias\": false,  \"fill-color\": \"rgba(232, 214, 38, 1)\",  \"fill-opacity\": 0.3} }, {\"id\": \"landuse\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landuse\",\"filter\": [\"==\", \"class\", \"agriculture\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"#eae0d0\"} }, {\"id\": \"landuse_overlay_national_park\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"landcover\",\"filter\": [\"==\", \"class\", \"national_park\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-color\": \"#E1EBB0\",  \"fill-opacity\": {\"base\": 1, \"stops\": [[5, 0], [9, 0.75]]}} }, {\"id\": \"waterway-tunnel\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"waterway\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"tunnel\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(205, 56%, 73%)\",  \"line-dasharray\": [3, 3],  \"line-gap-width\": {\"stops\": [[12, 0], [20, 6]]},  \"line-opacity\": 1,  \"line-width\": {\"base\": 1.4, \"stops\": [[8, 1], [20, 2]]}} }, {\"id\": \"waterway\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"waterway\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"!in\", \"brunnel\", \"tunnel\", \"bridge\"],  [\"!=\", \"intermittent\", 1]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(205, 56%, 73%)\",  \"line-opacity\": 1,  \"line-width\": {\"base\": 1.4, \"stops\": [[8, 1], [20, 8]]}} }, {\"id\": \"waterway_intermittent\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"waterway\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"!in\", \"brunnel\", \"tunnel\", \"bridge\"],  [\"==\", \"intermittent\", 1]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(205, 56%, 73%)\",  \"line-opacity\": 1,  \"line-width\": {\"base\": 1.4, \"stops\": [[8, 1], [20, 8]]},  \"line-dasharray\": [2, 1]} }, {\"id\": \"tunnel_railway_transit\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"minzoom\": 0,\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"tunnel\"],  [\"==\", \"class\", \"transit\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(34, 12%, 66%)\",  \"line-dasharray\": [3, 3],  \"line-opacity\": {\"base\": 1, \"stops\": [[11, 0], [16, 1]]}} }, {\"id\": \"building\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"building\",\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-antialias\": true,  \"fill-color\": \"rgba(222, 211, 190, 1)\",  \"fill-opacity\": {\"base\": 1, \"stops\": [[13, 0], [15, 1]]},  \"fill-outline-color\": { \"stops\": [[15, \"rgba(212, 177, 146, 0)\"],[16, \"rgba(212, 177, 146, 0.5)\"] ]  }} }, {\"id\": \"housenumber\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"housenumber\",\"minzoom\": 17,\"filter\": [\"==\", \"$type\", \"Point\"],\"layout\": {  \"text-field\": \"{housenumber}\",  \"text-font\": [\"Noto Sans Regular\"],  \"text-size\": 10,  \"visibility\": \"none\"},\"paint\": {\"text-color\": \"rgba(212, 177, 146, 1)\"} }, {\"id\": \"road_area_pier\",\"type\": \"fill\",\"metadata\": {},\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [\"all\", [\"==\", \"$type\", \"Polygon\"], [\"==\", \"class\", \"pier\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(47, 26%, 88%)\", \"fill-antialias\": true} }, {\"id\": \"road_pier\",\"type\": \"line\",\"metadata\": {},\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [\"all\", [\"==\", \"$type\", \"LineString\"], [\"in\", \"class\", \"pier\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(47, 26%, 88%)\",  \"line-width\": {\"base\": 1.2, \"stops\": [[15, 1], [17, 4]]}} }, {\"id\": \"road_bridge_area\",\"type\": \"fill\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"Polygon\"],  [\"in\", \"brunnel\", \"bridge\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"fill-color\": \"hsl(47, 26%, 88%)\", \"fill-opacity\": 0.5} }, {\"id\": \"road_path\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"in\", \"class\", \"path\", \"track\"]],\"layout\": {  \"line-cap\": \"square\",  \"line-join\": \"bevel\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(0, 0%, 97%)\",  \"line-dasharray\": [1, 1],  \"line-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 10]]}} }, {\"id\": \"road_minor\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"minzoom\": 13,\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"in\", \"class\", \"minor\", \"service\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(0, 0%, 97%)\",  \"line-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]}} }, {\"id\": \"tunnel_minor\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"tunnel\"],  [\"==\", \"class\", \"minor_road\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#efefef\",  \"line-dasharray\": [0.36, 0.18],  \"line-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]}} }, {\"id\": \"tunnel_major\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"tunnel\"],  [\"in\", \"class\", \"primary\", \"secondary\", \"tertiary\", \"trunk\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#fff\",  \"line-dasharray\": [0.28, 0.14],  \"line-width\": {\"base\": 1.4, \"stops\": [[6, 0.5], [20, 30]]}} }, {\"id\": \"aeroway-area\",\"type\": \"fill\",\"metadata\": {\"mapbox:group\": \"1444849345966.4436\"},\"source\": \"openmaptiles\",\"source-layer\": \"aeroway\",\"minzoom\": 4,\"filter\": [  \"all\",  [\"==\", \"$type\", \"Polygon\"],  [\"in\", \"class\", \"runway\", \"taxiway\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"fill-color\": \"rgba(255, 255, 255, 1)\",  \"fill-opacity\": {\"base\": 1, \"stops\": [[13, 0], [14, 1]]}} }, {\"id\": \"aeroway-taxiway\",\"type\": \"line\",\"metadata\": {\"mapbox:group\": \"1444849345966.4436\"},\"source\": \"openmaptiles\",\"source-layer\": \"aeroway\",\"minzoom\": 12,\"filter\": [  \"all\",  [\"in\", \"class\", \"taxiway\"],  [\"==\", \"$type\", \"LineString\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"rgba(255, 255, 255, 1)\",  \"line-opacity\": 1,  \"line-width\": {\"base\": 1.5, \"stops\": [[12, 1], [17, 10]]}} }, {\"id\": \"aeroway-runway\",\"type\": \"line\",\"metadata\": {\"mapbox:group\": \"1444849345966.4436\"},\"source\": \"openmaptiles\",\"source-layer\": \"aeroway\",\"minzoom\": 4,\"filter\": [  \"all\",  [\"in\", \"class\", \"runway\"],  [\"==\", \"$type\", \"LineString\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"rgba(255, 255, 255, 1)\",  \"line-opacity\": 1,  \"line-width\": {\"base\": 1.5, \"stops\": [[11, 4], [17, 50]]}} }, {\"id\": \"road_trunk_primary\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"in\", \"class\", \"trunk\", \"primary\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#fff\",  \"line-width\": {\"base\": 1.4, \"stops\": [[6, 0.5], [20, 30]]}} }, {\"id\": \"road_secondary_tertiary\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"in\", \"class\", \"secondary\", \"tertiary\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#fff\",  \"line-width\": {\"base\": 1.4, \"stops\": [[6, 0.5], [20, 20]]}} }, {\"id\": \"road_major_motorway\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"class\", \"motorway\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(0, 0%, 100%)\",  \"line-offset\": 0,  \"line-width\": {\"base\": 1.4, \"stops\": [[8, 1], [16, 10]]}} }, {\"id\": \"railway-transit\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"class\", \"transit\"],  [\"!=\", \"brunnel\", \"tunnel\"]],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(34, 12%, 66%)\",  \"line-opacity\": {\"base\": 1, \"stops\": [[11, 0], [16, 1]]}} }, {\"id\": \"railway\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [\"==\", \"class\", \"rail\"],\"layout\": {\"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(34, 12%, 66%)\",  \"line-opacity\": {\"base\": 1, \"stops\": [[11, 0], [16, 1]]}} }, {\"id\": \"waterway-bridge-case\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"waterway\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#bbbbbb\",  \"line-gap-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]},  \"line-width\": {\"base\": 1.6, \"stops\": [[12, 0.5], [20, 10]]}} }, {\"id\": \"waterway-bridge\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"waterway\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(205, 56%, 73%)\",  \"line-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]}} }, {\"id\": \"bridge_minor case\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"],  [\"==\", \"class\", \"minor_road\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#dedede\",  \"line-gap-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]},  \"line-width\": {\"base\": 1.6, \"stops\": [[12, 0.5], [20, 10]]}} }, {\"id\": \"bridge_major case\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"],  [\"in\", \"class\", \"primary\", \"secondary\", \"tertiary\", \"trunk\"]],\"layout\": {  \"line-cap\": \"butt\",  \"line-join\": \"miter\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#dedede\",  \"line-gap-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]},  \"line-width\": {\"base\": 1.6, \"stops\": [[12, 0.5], [20, 10]]}} }, {\"id\": \"bridge_minor\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"],  [\"==\", \"class\", \"minor_road\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#efefef\",  \"line-width\": {\"base\": 1.55, \"stops\": [[4, 0.25], [20, 30]]}} }, {\"id\": \"bridge_major\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation\",\"filter\": [  \"all\",  [\"==\", \"$type\", \"LineString\"],  [\"==\", \"brunnel\", \"bridge\"],  [\"in\", \"class\", \"primary\", \"secondary\", \"tertiary\", \"trunk\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"#fff\",  \"line-width\": {\"base\": 1.4, \"stops\": [[6, 0.5], [20, 30]]}} }, {\"id\": \"admin_sub\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"boundary\",\"filter\": [\"in\", \"admin_level\", 4, 6, 8],\"layout\": {\"visibility\": \"none\"},\"paint\": {\"line-color\": \"hsla(0, 0%, 60%, 0.5)\", \"line-dasharray\": [2, 1]} }, {\"id\": \"admin_country\",\"type\": \"line\",\"source\": \"openmaptiles\",\"source-layer\": \"boundary\",\"filter\": [  \"all\",  [\"<=\", \"admin_level\", 2],  [\"==\", \"$type\", \"LineString\"]],\"layout\": {  \"line-cap\": \"round\",  \"line-join\": \"round\",  \"visibility\": \"none\"},\"paint\": {  \"line-color\": \"hsl(0, 0%, 60%)\",  \"line-width\": {\"base\": 1.3, \"stops\": [[3, 0.5], [22, 15]]}} }, {\"id\": \"poi_label\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"poi\",\"minzoom\": 14,\"filter\": [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"rank\", 1]],\"layout\": {  \"icon-size\": 1,  \"text-anchor\": \"top\",  \"text-field\": \"{name:latin}\\n{name:nonlatin}\",  \"text-font\": [\"Noto Sans Regular\"],  \"text-max-width\": 8,  \"text-offset\": [0, 0.5],  \"text-size\": 11,  \"visibility\": \"none\"},\"paint\": {  \"text-color\": \"#666\",  \"text-halo-blur\": 1,  \"text-halo-color\": \"rgba(255,255,255,0.75)\",  \"text-halo-width\": 1} }, {\"id\": \"airport-label\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"aerodrome_label\",\"minzoom\": 10,\"filter\": [\"all\", [\"has\", \"iata\"]],\"layout\": {  \"icon-size\": 1,  \"text-anchor\": \"top\",  \"text-field\": \"{name:latin}\\n{name:nonlatin}\",  \"text-font\": [\"Noto Sans Regular\"],  \"text-max-width\": 8,  \"text-offset\": [0, 0.5],  \"text-size\": 11,  \"visibility\": \"none\"},\"paint\": {  \"text-color\": \"#666\",  \"text-halo-blur\": 1,  \"text-halo-color\": \"rgba(255,255,255,0.75)\",  \"text-halo-width\": 1} }, {\"id\": \"road_major_label\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"transportation_name\",\"filter\": [\"==\", \"$type\", \"LineString\"],\"layout\": {  \"symbol-placement\": \"line\",  \"text-field\": \"{name:latin} {name:nonlatin}\",  \"text-font\": [\"Noto Sans Regular\"],  \"text-letter-spacing\": 0.1,  \"text-rotation-alignment\": \"map\",  \"text-size\": {\"base\": 1.4, \"stops\": [[10, 8], [20, 14]]}, \"text-transform\": \"uppercase\", \"visibility\": \"none\"},\"paint\": { \"text-color\": \"#000\", \"text-halo-color\": \"hsl(0, 0%, 100%)\", \"text-halo-width\": 2} }, {\"id\": \"place_label_other\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"place\",\"minzoom\": 8,\"filter\": [ \"all\", [\"==\", \"$type\", \"Point\"], [\"!in\", \"class\", \"city\", \"state\", \"country\", \"continent\"]],\"layout\": { \"text-anchor\": \"center\", \"text-field\": \"{name:latin}\\n{name:nonlatin}\", \"text-font\": [\"Noto Sans Regular\"], \"text-max-width\": 6, \"text-size\": {\"stops\": [[6, 10], [12, 14]]}, \"visibility\": \"none\"},\"paint\": { \"text-color\": \"hsl(0, 0%, 25%)\", \"text-halo-blur\": 0, \"text-halo-color\": \"hsl(0, 0%, 100%)\", \"text-halo-width\": 2} }, {\"id\": \"place_label_city\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"place\",\"maxzoom\": 16,\"filter\": [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"class\", \"city\"]],\"layout\": { \"text-field\": \"{name:latin}\\n{name:nonlatin}\", \"text-font\": [\"Noto Sans Regular\"], \"text-max-width\": 10, \"text-size\": {\"stops\": [[3, 12], [8, 16]]}, \"visibility\": \"none\"},\"paint\": { \"text-color\": \"hsl(0, 0%, 0%)\", \"text-halo-blur\": 0, \"text-halo-color\": \"hsla(0, 0%, 100%, 0.75)\", \"text-halo-width\": 2} }, {\"id\": \"country_label-other\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"place\",\"maxzoom\": 12,\"filter\": [ \"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"class\", \"country\"], [\"!has\", \"iso_a2\"]],\"layout\": { \"text-field\": \"{name:latin}\", \"text-font\": [\"Noto Sans Regular\"], \"text-max-width\": 10, \"text-size\": {\"stops\": [[3, 12], [8, 22]]}, \"visibility\": \"none\"},\"paint\": { \"text-color\": \"hsl(0, 0%, 13%)\", \"text-halo-blur\": 0, \"text-halo-color\": \"rgba(255,255,255,0.75)\", \"text-halo-width\": 2} }, {\"id\": \"country_label\",\"type\": \"symbol\",\"source\": \"openmaptiles\",\"source-layer\": \"place\",\"maxzoom\": 12,\"filter\": [ \"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"class\", \"country\"], [\"has\", \"iso_a2\"]],\"layout\": { \"text-field\": \"{name:latin}\", \"text-font\": [\"Noto Sans Bold\"], \"text-max-width\": 10, \"text-size\": {\"stops\": [[3, 12], [8, 22]]}, \"visibility\": \"none\"},\"paint\": { \"text-color\": \"hsl(0, 0%, 13%)\", \"text-halo-blur\": 0, \"text-halo-color\": \"rgba(255,255,255,0.75)\", \"text-halo-width\": 2} } ], \"id\": \"basic\"}"
metadata:
  name: map-tile-server-style-config
  namespace: test

最佳答案

我更深入地研究了您的环境并将其部署在我的本地集群上,以下是我的发现:

  • 当我按照您的问题部署您的 yaml 时,看看文件最终安装在哪里:
$ kubectl get pods
NAME                               READY   STATUS              RESTARTS   AGE
map-tile-server-5c86b677df-wswwz   1/1     Running             0          2s

$ kubectl exec -it map-tile-server-5cb677df-wswwz /bin/bash --
root@map-tile-server-5c86b677df-wswwz:/# ls -l
drwxrwxrwx   3 root root 4096 Apr 10 12:16 config.json
drwxr-xr-x   3 root root 4096 Apr 10 12:16 styles

root@map-tile-server-5c86b677df-wswwz:/config.json# ls -l
lrwxrwxrwx 1 root root 18 Apr 10 12:16 config.json -> ..data/config.json

root@map-tile-server-5c86b677df-wswwz:/styles# ls -l
drwxrwxrwx 3 root root 4096 Apr 10 12:16 custom.json

root@map-tile-server-5c86b677df-wswwz:/styles# cd custom.json/
root@map-tile-server-5c86b677df-wswwz:/styles/custom.json# ls -l
lrwxrwxrwx 1 root root 18 Apr 10 12:16 custom.json -> ..data/custom.json
  • 它使用文件名创建文件夹,并将配置映射插入每个文件夹中。

  • 在您的问题中,您提到您希望将此文件放置在 /config.json/styles/custom.json 中,我想和你评论两件事:

    • 您无法将config.json设置为直接挂载在/中,容器将不会运行,因为您“覆盖”了/文件夹。因此,您的 config.json 需要保留在某个文件夹中,最佳实践是直接挂载在 /data 目录中。

    • 虽然有一个符号链接(symbolic link)将 /styles/custom.json/custom.json 文件定向到 data/custom.json,但最好警告一下你:

    如果您在 config.json 中提及路径 /style/custom.json,它将找不到该文件

在这里您可以看到 Kubernetes 文档 How to Mount ConfigMaps as Files 中提供的示例

  • 以下是我对您的 yaml 进行的更改,以将 custom.json 文件移动到预期路径:
          volumeMounts:
            - name: map-tile-server-config
              mountPath: /config.json
            - name: map-tile-server-style-config
              mountPath: /styles
      volumes:
        - name: map-tile-server-config
          configMap:
            name: map-tile-server-config
        - name: map-tile-server-style-config
          configMap:
            name: map-tile-server-style-config
  • 现在让我们测试一下:
$ kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
map-tile-server-5cd7694b74-s6g6g   1/1     Running   0          8s

$ kubectl exec -it map-tile-server-5cd7694b74-s6g6g -- /bin/bash
root@map-tile-server-5cd7694b74-s6g6g:/# ls
bin  boot  config.json  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  styles  sys  tmp  usr  var

root@map-tile-server-5cd7694b74-s6g6g:/config.json# ls -l
lrwxrwxrwx 1 root root 18 Apr 10 12:27 config.json -> ..data/config.json

root@map-tile-server-5cd7694b74-s6g6g:/styles# ls -l
lrwxrwxrwx 1 root root 18 Apr 10 12:27 custom.json -> ..data/custom.json

现在文件已位于预期位置。

  • 为了方便您以后的管理,我的建议是安装到:
          volumeMounts:
            - name: map-tile-server-config
              mountPath: /data/config
            - name: map-tile-server-style-config
              mountPath: /data/styles
  • 将输出数据文件夹内的所有内容:
owilliam@minikube-usc1a:~/CaseFiles/configmap-json$ k exec -it map-tile-server-6b5fc64fd6-6g2wb -- /bin/bash
root@map-tile-server-6b5fc64fd6-6g2wb:/data# ls
config  styles  zurich_switzerland.mbtiles
root@map-tile-server-6b5fc64fd6-6g2wb:/data# ls -l 
total 23684
drwxrwxrwx 3 root root     4096 Apr 10 13:22 config
drwxrwxrwx 3 root root     4096 Apr 10 13:22 styles
-rw-r--r-- 1 root root 24244224 Apr 10 13:22 zurich_switzerland.mbtiles
root@map-tile-server-6b5fc64fd6-6g2wb:/data# ls config
config.json
root@map-tile-server-6b5fc64fd6-6g2wb:/data# ls styles

如果您有任何问题,请在评论中告诉我。

关于docker - 将 Kubernetes 用于 TileServer-GL 以及自定义配置和样式文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110380/

相关文章:

Docker Swarm 与 etcd

docker - 在 alpine 上预编译 golang

php - 每次清除docker容器内的缓存时都无法创建存储目录

python - 在 Kubeflow 管道中共享 secret

kubernetes - 如何更改印花布监听默认端口?

docker - 创建Dockercompose和Dockerfile的问题。导致 “Error response from daemon”

kubernetes - Ingress 和证书管理器未创建证书

kubernetes - 无法在新创建的 GKE 集群上初始化 helm(tiller)

kubernetes - 具有大量状态集和服务的Kubernetes集群的架构建议

docker - Jenkins Kubernetes 插件不执行 Docker 镜像的入口点