【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"
    };
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑吧邓邓子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值