簡體   English   中英

如何將整個目錄及其帶有 ConfigMap 的子目錄放在多節點集群上的 Kubernetes Pod 中?

[英]How to put a whole directory and its subdirectories with a ConfigMap in a Kubernetes Pod on a multi-node cluster?

問題

  • 我們想重復使用相同的圖像
  • 我們有不同的 static 文件(例如 css),這些文件應該在不同的部署中有所不同。 應保留這些文件的文件夾結構。

例如:

  1. 測試1.xml
  2. 測試2.xml
  3. 布局
      3.1 測試1.css
      3.1 測試2.css

我們需要將這些文件一次(在啟動時)放入 Pod。

據我所知,我只能在一個目錄級別中創建所有文件的一個 ConfigMap,並且我必須重新創建結構。

例如

kubectl create configmap style-files --from-file=.

在我們上面的示例中,此命令只會為 xml 文件創建一個 ConfigMap。

預期行為

行為類似於 ConfigMap,但能夠創建單個 ConfigMap,其中包含當前目錄中的所有文件和子目錄中的所有文件,同時保留文件夾結構。

問題

是否有一些針對我的用例的概念或者我必須使用 ConfigMaps?

您可以在集群內可訪問的位置提供存檔文件(fe s3 存儲或簡單的 http 服務器)並使用配置 map 配置正確的 ZE6B391A8D2C4D45902A2Z3A8B6585703 以下載文件。 要下載和解壓縮存檔,您可以使用與卷掛載相結合的 init 容器。

有關初始化容器的更多信息: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

我建議使用 configmaps,但由於 configmaps 是平面的,因此您可能需要使用其中兩個和兩個掛載來重新創建層次結構。

使用 XML 將一個安裝到/your/path/ ,將另一個包含 CSS 的安裝到/your/path/layout

可能需要巧妙地使用subpath鍵來避免第一個cm覆蓋第二個nd

目錄中的示例文件:

.
├── test21.css
├── test22.css
├── test2.xml
└── test.xml

Create configmap:
    kubectl create configmap example --from-file=./

示例配置圖:

apiVersion: v1
data:
  test.xml: |
    test1
    test1
  test2.xml: |
    test2
    test2
  test21.css: |
    test21
    test21
  test22.css: |
    test22
    test22
kind: ConfigMap

具有投影 ConfigMap 鍵的卷的示例 pod:

apiVersion: v1
kind: Pod
metadata:
  name: busy
spec:
  containers:
  - name: busybox
    image: k8s.gcr.io/busybox
    command: ["/bin/sh"]
    args: ["-c", "sleep 200"]
    volumeMounts:
    - mountPath: /test
      name: data1
  volumes:
    - name: data1
      configMap:
        name: example
        items:
        - key: test.xml
          path: test.xml
        - key: test2.xml
          path: test2.xml
        - key: test21.css
          path: layout/test21.css
        - key: test22.css
          path: layout/test22.css

筆記:

您可以基於每個文件將密鑰投射到特定路徑和特定權限。

您可以使用 投影卷將此示例與不同的源(如秘密和配置映射)結合起來:投影卷將多個現有卷源映射到同一目錄中。

apiVersion: v1
kind: Pod
metadata:
  name: busy
spec:
  containers:
  - name: busybox
    image: k8s.gcr.io/busybox
    command: ["/bin/sh"]
    args: ["-c", "sleep 200"]
    volumeMounts:
    - mountPath: /test
      name: data1
  volumes:
    - name: data1
      projected:
        sources:
        - configMap:
            name: example
            items:
              - key: test.xml
                path: test.xml
              - key: test2.xml
                path: test2.xml
              - key: test21.css
                path: layout/test21.css
              - key: test22.css
                path: layout/test22.css

另一種方法是使用 zip/jar 文件作為 configmap(configmap 支持二進制文件),因此在安裝后可以將其解壓縮到容器內的所需路徑,或使用 init 容器准備適當的文件夾結構或使用重新填充的數據構建圖像。

資源:

希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM