一、K8S存储机制介绍
k8s的stateful控制组件是为有状态服务而设计的,有状态服务需要对数据进行存储;k8s有4种存储机制,主要为:
1)configMap:为K8S存储配置文件而设计的,configMap可以用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
2)secret:为了解决密码、token、密钥等敏感数据的配置加密而设计,而不需要将这些敏感数据暴露到镜像或pod.spec中,可以volume或环境变量的方式使用。
3)volume:为容器提供共享存储卷,避免发生容器崩溃重启后容器中文件丢失的问题。当pod不存在时,volume也不复存在;k8s支持多种类型的卷,pod可使用任意数量的卷。
4)persistentVolume/persistentVolumeClai:
二、configMap介绍
许多应用程序从配置文件、命令行参数或环境变量中读取配置信息,而configMap API给我们提供了向容器注入配置信息的机制。
传统生成环境中,配置文件注册中心负责向n个集群n个节点应用程序的提供配置信息,该中心需要自行构建,没有较好的开源方案。应用程序向配置文件注册中心提供本节点的信息(如:IP、hostname),配置文件注册中心根据规则为该节点应用程序更新配置,应用程序按照新配置进行重载后运行。
k8s集群中,configMap充当了配置文件注册中心的作用。pod向configMap申请配置,configMap为各pod下发不同的配置。
configMap创建配置有3中方式:使用目录创建、使用文件创建、使用字面值创建。
1、使用目录创建configMap
mkdir configMapFile;cd configMapFile cat > game.properties <<eof enemies=aliens lives=3 enemies.cheat=true enemies.cheat.level=noGoodRotten enemies.code.passphrase=UUDDLRLRBABAS enemies.code.allowed=true enemies.code.lives=30 eof cat >ui.properties<<eof color.good=purple color.bad=yellow allow.textmode=true how.nice.to.look=fairlyNice eof kubectl create configmap game-config --from-file=../configMapFile #创建configMap; kubectl get configmap #查看configMap; kubectl get cm game-config -o yaml #以yaml格式输出game-config配置; kubectl get cm game-config -o json #以yaml格式输出game-config配置;
2、使用文件创建configMap
kubectl create configmap game-config2 --from-file=../configMapFile/game.properties #使用文件创建configMap; kubectl get cm game-config2 -o yaml
多次使用文件创建,与在该目录下一次性批量创建效果相同。
3、使用字面量创建configMap
kubectl create configmap game-config3 --from-literal=special.how=very --from-literal=special.type=charm #使用字面量创建configMap; kubectl get cm game-config3 -o yaml
三、secret介绍