Kubernetes for Beginners — Part 08
ConfigMaps-how to use configuration data in Kubernetes
現在,我們將看到如何使用單獨的配置文件來管理環境數據。在 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
不是火箭科學。它只包含了兩個步驟,
- 配置configuration文件
- 將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-config
的 configmap
,並有一個鍵值對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_HOME
和 URL
。將文件保存為 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 中使用它們。