配置容器化应用程序
1  | # 应用程序 会将配置嵌入到程序本身 方式:  | 
1  | # 为何使用 环境变量  | 
容器传递命令行参数
在 Docker 中定义命令与参数
1  | 1. 容器中运行完整的指令两部分组成: 命令与参数  | 
了解 shell 和 exec 的区别
1  | shell: ENTRYPOINT node app.js  | 
1  | # 主进程(pid=1) 是 shell进程 而非 node 进程,node(pid=7)进程于shell中启动  | 
可配置化镜像中的间隔参数
1  | # 修改循环延迟间隔,使其可配置  | 
1  | # 传递一个间隔参数覆盖默认值  | 
在 K8S 中覆盖命令和参数
1  | 1. 在k8s定义容器时,镜像的ENTRYPOINT 和 CMD 是可以被覆盖的  | 
1  | Docker K8S 描述  | 
1  | [root@k8s-master1 forloop]# vim fortune-pod.yaml  | 
容器设置环境变量
1  | # 脚本中删除 命令行传参 NUM=$1  | 
环境变量引用其他环境变量
1  | env:  | 
硬编码环境变量
1  | 1. pod中定义硬编码环境变量 无法有效区分 生产环境与开发环境的pod定义  | 
使用 ConfigMap 解耦配置
1  | 1. K8S 可以将配置选项分离到 单独的资源对象 ConfigMap中  | 
创建 ConfigMap
通过 kubectl 创建 ConfigMap
1  | # 1. ConfigMap的键名 必须是一个合法的DNS子域 数字字母、破折号、下划线和圆点  | 
通过 yaml 文件创建 ConfigMap
1  | [root@k8s-master1 configmap]# kubectl get cm fortune-config -o yaml > fortune-config.yaml  | 
从文件内容创建 ConfigMap
1  | [root@k8s-master1 configmap]# cat my.conf  | 
1  | # 指定键名  | 
1  | [root@k8s-master1 configmap]# cat redis.conf  | 
使用 变量方式 传给容器
1  | [root@k8s-master1 configmap]# vim fortune-pod.yaml  | 
在 Pod 中引用不存在的 ConfigMap
1  | 1. k8s 正常调度尝试所有容器  | 
使用 envFrom 一次性传入所有ConfigMap下的键值对
1  | [root@k8s-master1 configmap]# vim my.conf  | 
1  | [root@k8s-master1 configmap]# vim my-pod.yaml  | 
使用 命令行参数 传给容器
1  | [root@k8s-master1 forloop]# vim fortune-pod.yaml  | 
使用 卷形式暴露 ConfigMap
1  | 1. 环境变量和命令行传参 作为配置值通常适用于变量值较短的场景  | 
1  | [root@k8s-master1 configmap-file]# vim my-nginx-config.conf  | 
1  | [root@k8s-master1 configmap-file]# cat sleep-interval  | 
1  | [root@k8s-master1 configmap-file]# cat redis.cfg  | 
1  | # 现在我有三段不同的配置文件 nginx 延迟值 和 redis配置  | 
将整个文件夹下的所有配置文件 创建 ConfigMap
1  | [root@k8s-master1 configmap-file]# kubectl create configmap fortune-config --from-file=/opt/demo/configmap-file/  | 
Volume 卷形式挂载到 pod 中
1  | [root@k8s-master1 configmap-file]# vim fortune-pod-cm-volume.yaml  | 
1  | # 测试  | 
1  | # 查看挂载的文件  | 
卷内暴露指定的 ConfigMap 数据
1  | # 想让my-nginx-config.conf作为文件暴露在 /etc/nginx/conf.d下  | 
1  | volumes:  | 
1  | [root@k8s-master1 configmap-file]# kubectl exec fortune-kbddc -c web-server ls /etc/nginx/conf.d  | 
注意点
1  | 1. 挂载某一个文件会隐藏该文件夹中已存在的文件  | 
更新应用配置且不重启应用程序
1  | 1. 环境变量和命令行传参作为配置源的弊端在于无法修改pod中的配置  | 
1  | [root@k8s-master1 configmap-file]# kubectl edit cm fortune-config  | 
1  | [root@k8s-master1 configmap-file]# kubectl exec fortune-kbddc -c web-server cat /etc/nginx/conf.d/gzip.conf  | 
1  | # 手动通知 nginx 重启程序  | 
Secret 给容器传递敏感数据
1  | 1. Secret 可作为环境变量传值给容器  | 
默认令牌 Secret
1  | 1. 默认被挂载只所有容器的 Secret  | 
创建 Secret
1  | # 测试将https 的证书秘钥传送给Nginx容器  | 
在 Pod 中读取 Secret
1  | 1. 通过secret卷 将Secret暴露给容器  | 
在 Pod 中使用 Secret
1  | # 开启之前nginx配置的 https选项  | 
1  | # 挂载 secret 到 pod里  | 
1  | [root@k8s-master1 secret]# vim fortune-svc.yaml  | 
1  | # 测试  | 
Secret 卷 存储于内存
1  | [root@k8s-master1 secret]# kubectl exec fortune-95lsq -c web-server -- mount | grep certs  | 
在私有镜像仓库中 使用 Secret
1  | 0. 镜像仓库 设置为 私有仓库,并且上传一个镜像  | 
1  | [root@k8s-master1 secret]# vim base.yaml  | 
不需要为每个 Pod 指定镜像拉取 Secret
1  | 1. 如果系统中运行大量Pod,是否每个Pod都要配置镜像拉取Secret  | 
