目录
一、ConfigMap 简介
ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。ConfigMap 可以很方便地实现应用和配置分离,避免因修改配置而重新构建镜像。
二、ConfigMap 创建
可以从文件、目录或者 key-value 字符串创建等创建 ConfigMap。
1.从 key-value 字符串创建
执行命令创建:
kubectl create configmap env-config --from-literal=NODE_ENV=development
kubectl create configmap env-config --from-literal=NODE_ENV=development
configmap/env-config created
执行命令查看:
kubectl get configmap env-config -o go-template='{
{.data}}'
kubectl get configmap env-config -o go-template='{
{.data}}'
map[NODE_ENV:development]
2.从 env 文件创建
echo -e "NODE_ENV=development\nNODE_HOME=/usr/local/node-v14.18.2-linux-x64" | tee config.env
NODE_ENV=development
NODE_HOME=/usr/local/node-v14.18.2-linux-x64
kubectl create configmap env-config --from-env-file=config.env
configmap/env-config created
kubectl get configmap env-config -o go-template='{
{.data}}'
map[NODE_ENV:development NODE_HOME:/usr/local/node-v14.18.2-linux-x64]
3.从目录创建
mkdir config
echo a>config/a
echo b>config/b
kubectl create configmap env-config --from-file=config/
configmap/env-config created
kubectl get configmap env-config -o go-template='{
{.data}}'
map[a:a
b:b
]
三、ConfigMap 使用
ConfigMap 可以通过设置环境变量、设置容器命令行参数、在 Volume 中创建配置文件等方式在 Pod 中使用。
1.设置环境变量
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: shop-ui
spec:
containers:
- name: test-container
image: 192.168.1.48/shop-ui/manager-ui:4.2.3.7
command: [ "/bin/sh", "-c", "env" ]
env:
- name: NODE_ENV_KEY
valueFrom:
configMapKeyRef:
name: env-config
key: NODE_ENV
- name: NODE_PATH_KEY
valueFrom:
configMapKeyRef:
name: env-config
key: NODE_HOME
envFrom:
- configMapRef:
name: env-config
restartPolicy: Never
2.设置容器命令行参数
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: shop-ui
spec:
containers:
- name: test-container
image: 192.168.1.48/shop-ui/manager-ui:4.2.3.7
command: [ "/bin/sh", "-c", "echo $(NODE_ENV_KEY) $(NODE_PATH_KEY)" ]
env:
- name: NODE_ENV_KEY
valueFrom:
configMapKeyRef:
name: env-config
key: NODE_ENV
- name: NODE_PATH_KEY
valueFrom:
configMapKeyRef:
name: env-config
key: NODE_HOME
envFrom:
- configMapRef:
name: env-config
restartPolicy: Never
3.在 Volume 中创建配置文件
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: shop-ui
spec:
containers:
- name: test-container
image: 192.168.1.48/shop-ui/manager-ui:4.2.3.7
command: [ "/bin/sh", "-c", "cat /etc/config/keys/node.env" ]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: env-config
items:
- key: NODE_ENV
path: keys/node.env
restartPolicy: Never
四、前端项目使用实例
apiVersion: v1
kind: Namespace
metadata:
name: shop-ui
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: manager-ui
namespace: shop-ui
spec:
replicas: 1
selector:
matchLabels:
app: manager-ui
template:
metadata:
labels:
app: manager-ui
spec:
containers:
- name: manager-ui
image: 192.168.1.48/shop-ui/manager-ui:4.2.3.7
ports:
- name: http
containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html/config.js
name: config-js
subPath: config.js
volumes:
- configMap:
name: ui-config
name: config-js
---
apiVersion: v1
kind: Service
metadata:
name: manager-ui-service
namespace: shop-ui
spec:
selector:
app: manager-ui
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 10003
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
name: ui-config
namespace: shop-ui
data:
config.js: |
var BASE = {
/**
* @description api请求基础路径
*/
API_DEV: {
common: "http://192.168.1.11:8890",
buyer: "http://192.168.1.11:8888",
seller: "http://192.168.1.11:8889",
manager: "http://192.168.1.11:8887"
},
API_UAT: {
common: "http://192.168.1.22:8890",
buyer: "http://192.168.1.22:8888",
seller: "http://192.168.1.22:8889",
manager: "http://192.168.1.22:8887"
},
API_PROD: {
common: "http://192.168.1.33:8890",
buyer: "http://192.168.1.33:8888",
seller: "http://192.168.1.33:8889",
manager: "http://192.168.1.33:8887"
},
PREFIX: "/manager"
};