了解 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"