ConfigMap和Secret:配置应用程序
更改容器的主进程
我们需要一个可以用配置控制进程的服务,例如配置不同参数,程序表现不一样,我们看下这个程序
# cat fortuneloop.sh
#!/bin/bash
trap "exit" SIGINT
INTERVAL=$1 #默认值来自命令行参数
echo Configured to generate new fortune every $INTERVAL seconds
mkdir -p /var/htdocs
while :
do
echo $(date) Writing fortune to /var/htdocs/index.html
/usr/games/fortune > /var/htdocs/index.html
sleep $INTERVAL
done里面有个环境变量INTERVAL可以控制休眠的时间长短(默认值来自命令行参数),也就控制了fortune财富“鸡汤“的变化速度,我们来用Dockerfile制作这个服务
# cat Dockerfile
FROM ubuntu:latest
RUN apt-get update ; apt-get -y install fortune
ADD fortuneloop.sh /bin/fortuneloop.sh
ENTRYPOINT ["/bin/fortuneloop.sh"]
CMD ["10"]大家看懂服务逻辑就行了,镜像已经制作好了的。我们直接进入kubernetes部署环节
将命令行选项传递给应用程序
见pod描述文件
create试试看(可以跳过),因为上面的INTERVAL是来自命令行,所以结果可想而知频率是固定的2秒。
设置暴露给应用程序的环境变量
create试试,我们继续使用port-forward代理访问pod端口
然后在另一个控制台访问,观察是否设定的环境变量秒数
通过ConfigMap配置应用程序
ConfigMap也是我们最常用的配置服务的方式了
我们现在为财富鸡汤服务创建一个配置文件
create并get,使用-o yaml配合get可以获得最全的yaml描述
上述data部分就是我们的配置了,现在我们使用这个配置来为服务设置环境变量(这个操作和传统开发不一样吧)
同样使用port-forward看下调用下服务吧,这里不贴出结果
从上面的实例可以看出ConfigMap是一个含有数据的资源,它能借助kubernetes转为容器所使用的环境变量、参数、甚至是文件。
将ConfigMap暴露为pod中的文件
拿上述服务中的nginx做这个实验,先看看它的配置文件,我们尝试控制它是否开启压缩
可以将这个文件直接创建成ConfigMap,见
我们使用的是文件夹,里面含有两个文件,从configmap中能看出
有my-nginx-config.conf和sleep-interval两个,那我们使用他们
部署上,看看效果
在另外一个控制台,curl能看到开启了gzip
Well!现在我们体验了如何在kubernetes中为自己的应用使用配置文件,这样一来我们发版管理配置是不是更方便了呢?
通过Secret传递敏感配置信息
有时我们有一些账号密码不能明文,kubernetes提供了Secret资源和ConfigMap使用非常相似,只是对文本加密了而已。
我们常见的是给阿里云、亚马逊的密钥做加密处理,这些密钥是用来控制权限访问云商资源的。
首先创建一个secret
查看已经创建的secret
我们现在就可以使用secret了,写一个yaml
将它保存到文件 package-test.yaml,执行
它是一个cronjob,每两分钟运行一次作业(启动一个pod),我们的作业就是简单的打印环境变量 key和secret。
思考题
请谈谈都有哪几种配置应用的方式,和传统开发的区别
最后更新于
这有帮助吗?