了解 Kube 組態

已完成

應用程式存放庫中,index.html 檔案中載入了組態檔,讓環境變數無需完整的映像組建即可更新。

設定檔未包含敏感性資訊,只需要與容器一起載入即可。 如何在不需要加密或編碼的情況下,在容器裝載檔案?

了解 ConfigMap

ConfigMap 是秘密的對應項目。 雖然祕密提供儲存和傳遞敏感性資料的機制,但 ConfigMap 卻是使用和祕密相同的鍵-值結構,用於儲存非敏感性資料的物件。 ConfigMaps 物件可讓您分離組態與容器映像,讓這些映像保持無狀態。

您可以建立 ConfigMap 以與應用程式程式碼分開儲存設定資料及載入它的方式,類於我們在 Pod 中載入祕密物件的方式。 您只能使用環境變數或將其裝載為容器內磁碟區中的檔案來參照 ConfigMap。

ConfigMap 有資料大小限制,所以 ConfigMap 中最多只能保存 1 MiB 的資料。 大小限制可協助您避免大型、複雜的組態檔,方法是讓您將大型組態分成較小的區塊。 使用 ConfigMaps,您只須裝載容器中所需的組態檔,以取得更高的細微性。

例如,祕密和 ConfigMap 是命名空間式的資源。 您只能使用建立 ConfigMap 的相同命名空間中的容器來存取和裝載 ConfigMap。

ConfigMap 也廣泛提供 Helm 和 Kube 運算子等其他工具,用來儲存和讀取狀態。

ConfigMap 更新

所有在 Pod 內「裝載為磁碟區」的 ConfigMap 都會在其值變更後自動更新。 由於 Kubelet 設定,此變更可能不會立即發生,但會自動發生,因此不需要重新啟動 Pod。

ConfigMap 繫結至環境變數時不會自動更新。 在這些情況下,必須重新啟動 Pod,變更才會生效。

建立與使用 ConfigMap

您可以使用與秘密相同的方法來建立 ConfigMap: YAML 檔案。 ConfigMap 規格如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-name
  namespace: default
data:
  key-name: "value as key"
  key.name: |
    multi line
    property, called "file-like" values

您可使用 Pod 或部署規格中的一或多個索引鍵來參考 ConfigMap,如下列範例所示:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: ENVIRONMENT_VARIABLE_NAME
          valueFrom:
            configMapKeyRef:
              name: configmap-name
              key: key-name

您也可以使用唯讀磁碟區將它們掛接為 Pod 內的檔案,如下列範例所示:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      volumeMounts:
      - name: volume-name
        mountPath: "/path/to/mount"
        readOnly: true
  volumes:
    - name: volume-name
      configMap:
        name: configmap-name
        items:
        - key: "key-name"
          path: "path/to/mount/the/key"

檢定您的知識

1.

為什麼要使用 ConfigMap?

2.

您要如何在應用程式中使用 ConfigMap?

3.

命名空間是為了限制 ConfigMap 嗎?