K8S,使用configMap配置环境变量,在shell script获取到变量

52 阅读2分钟

项目A部署用的是K8S,Helm模版(K8S的对象文件管理工具,包括yaml)。

1.在helm的template目录下新建configMap.yaml,

kind: ConfigMap 
apiVersion: v1 
metadata:
  name: configMap-name-jack
data:
  #类属性键;每一个键都映射到一个简单的值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # 类文件键
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    

2.然后在deployment.yaml中引用configMap配置,在kind为Deployment/Pod中,sepc: -> containers: 节点下, 添加节点配置:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        # 定义环境变量
        - name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的,这个是环境变量名称,可以再shell script中用$PLAYER_INITIAL_LIVES获取,然后输出、
          valueFrom:
            configMapKeyRef:
              name: configMap-name-jack           # 这个值来自 ConfigMap
              key: player_initial_lives          # 需要取值的键
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: configMap-name-jack
              key: ui_properties_file_name
         - name: TEST-SINGLE-ENV #这种是直接在yaml配置文件配置环境变量和值,不单独卸载configmap.yaml文件中,shell script中用$TEST-SINGLE-ENV获取,然后输出、
           value: "true"      
              
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
  # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
  - name: config
    configMap:
      # 提供你想要挂载的 ConfigMap 的名字
      name: configMap-name-jack
      # 来自 ConfigMap 的一组键,将被创建为文件
      items:
      - key: "game.properties"
        path: "game.properties"


3.在jenkins部署项目时,使用Dockerfile文件,Dockerfile中,可以做很多事情,例如我将我需要执行一些逻辑的shell script脚本,叫做script-A.sh ,

RESULT_VALUE=$TEST-SINGLE-ENV
echo "RESULT_VALUE="$RESULT_VALUE
if [ $RESULT_VALUE == true ]; then
   //做一下逻辑处理,例如是切换到项目路径下,对一些文件的预处理,动态处理
else
  // todo
fi

4.在Dockerfile文件中,添加将script-A.sh复制到k8s pod目录中,


...... 前面的dockerfile命令
WORKDIR /usr/dev/project-A
COPY ./script-A.sh /usr/dev/project-A
RUN chmod +x script-A.sh #赋予执行权限
CMD ["sh", "-c", "sh script-A.sh && nginx -g 'daemon off;'"]
#先执行脚本,然后启动nginx

5.这样,在部署完之后,将执行到script-A.sh中编写的逻辑处理,可以做一些对当前部署项目的js,css等文件的处理,达到需求的效果,结合k8S中configMap的使用,动态的去处理需求。