Kubernetes for Beginners — Part 08

ConfigMaps-how to use configuration data in Kubernetes

Moris
Linux & Backend Notes
5 min readFeb 29, 2024

--

Photo by cottonbro from Pexels

現在,我們將看到如何使用單獨的配置文件來管理環境數據。在 Kubernetes 中,ConfigMaps 用於存儲這些環境配置數據。它是一種以 key value 對的形式存在的文件。配置了 configMap 之後,需要將它注入到 Kubernetes 的 pod 定義中。因此,configMap 文件中的配置數據將作為環境變量在容器內部承載的應用程序中可用。

下面是從上一篇文章中複製的程式碼片段,

apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: ubuntu-container
image: ubuntu
env:
- name: JAVA_HOME
value: /usr/java

現在將看到如何在 configMap中定義 JAVA_HOME 環境變量。

JAVA_HOME /usr/java

使用 configMaps 不是火箭科學。它只包含了兩個步驟,

  1. 配置configuration文件
  2. 將config文件注入到 pod 定義中

STEP 01: Configure the configuration file

創建 configmaps文件有三種方法。

Method 01

使用 kubectl create configmap 命令並在命令行中傳遞所有變量。

Syntax:
kubectl create configmap <config-name> --from-literal=<key>=<value>Example:
kubectl create configmap my-config --from-literal=JAVA_HOME=/usr/java

在上面的例子中,我們創建了一個名為 my-configconfigmap,並有一個鍵值對JAVA_HOME=/usr/java。如果你想添加更多變量,重複 --from-literal 選項與鍵和值。

kubectl create configmap \
my-config --from-literal=JAVA_HOME=/usr/java
--from-literal=URL=http://localhost:8000

但是,如果你必須配置許多變量,這種方法會很混亂。因此,你可以使用方法02的方式配置configuration file。

Method 02

使用文件輸入configuration data。

Syntax:
kubectl create configmap <config-name> --from-file=<path_to_file>Example:
kubectl create configmap my-config --from-file=my_config.properties

與上一種方法一樣,在這種方法中,你可以使用 --from-file 選項添加配置文件。

Method 03

最後一種方法是創建一個像 pod 定義一樣的定義文件。以下是一個樣本定義文件。

apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
data:
JAVA_HOME: /usr/java
URL: http://localhost:8000

現在,我們已經定義了一個名為 my-config 的 ConfigMap,它有兩個環境變量 JAVA_HOMEURL。將文件保存為 config-maps.yaml,然後執行命令 kubectl create -f config-maps.yaml。你可以根據需要創建不同用途的配置文件。

注意:

-查看現有的 config maps:kubectl get configmaps

-獲取 config map 描述:kubectl describe configmaps

STEP 02: Inject the config file into the pod definition

現在我們將看到如何在 Kubernetes pod 中使用配置的文件。以下我們有我們的樣本 pod 定義。我們將看到如何注入 config maps 文件。

apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: ubuntu-container
image: ubuntu

envFrom屬性列表用於在 pod 定義中定義環境變量。列表中的每個項目對應到一個 config map 項目,後面跟著創建的 config map 的名稱 (my-config)。

apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: ubuntu-container
image: ubuntu
envFrom:
- configMapRef:
name: my-config

如果你只想導入一個環境變量,可以使用以下 pod 定義模式。

env: 
- name: JAVA_HOME
valueFrom:
configMapKeyRef:
name: my-config
key: JAVA_HOME

Config Maps 也可以作為 Kubernetes 中的volume添加。

volumes: 
- name: my-config-volume
configMap:
name: my-config

在本文中,我們討論了如何創建 config maps 以及如何在 Kubernetes pods 中使用它們。

--

--

Moris
Linux & Backend Notes

An AI engineer who loves deep learning technology and is willing to share resources and learn new technologies