【Kubernetes系列】ConfigMap前端项目使用实例


一、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"
    };

猜你喜欢

转载自blog.csdn.net/u012069313/article/details/125370203