Configmaps
Configmaps的定义
Configmap,KV格式,属于名称空间级别的资源,主要作用是让配置信息和镜像文件解耦,增强应用的可移植性,类似Kubernetes的配置中心,明文存储配置信息,不能包含敏感信息;(注入方式:环境变量或者存储卷)
集群外部向集群内部注入配置或密钥信息的通道;
统一配置中心,将配置信息放到统一的配置中心进行统一管理,当配置文件需要更新时,重载即可;
Configmaps的使用方式
配置容器化应用的几种方式:
-
自定义命令行参数,,args:[];
-
把配置文件直接写死在镜像中;(不灵活不建议)
-
存储卷,即文件挂载方式,把configmap当作存储卷,挂载到pod内读取配置信息的文件目录上;(虽然相对笨拙,但可以动态修改,支持实时获取,具体时间取决于信息上传到API-server,以及下发到pod的时间; )
-
环境变量
环境变量注入,把configmap和pod做关联,把configmap里面的数据内容传递给pod内的变量;(前置条件:应用本身是支持通过环境变量加载配置的Cloud Native应用;或者针对传统cloudenabled应用,可以使用Entrypoint预处理脚本使得环境变量转换为配置文件中的配置信息;)通过环境变量加载配置或者读取配置文件加载配置;(注:支持动态修改,但是需要手动重载reload;)
环境变量的获取配置的方式,仅在pod启动时加载,后面修改需要重新启动才能生效;
- (1) env
valueFrom: metedata.name/ metedata.namespace/ metedata.labels/ metedata.annotations……;
- (2) envFrom
kubectl create configmap my-config --from-file=config-data/
或者使用环境变量env,示例如下:
apiVersion: v1
kind: Pod
metadata:
name: configmap-demo-pod
spec:
containers:
- name: demo
image: alpine
command: ["sleep", "3600"]
env:
# Define the environment variable
- name: PLAYER_INITIAL_LIVES # Notice that the case is different here
# from the key name in the ConfigMap.
valueFrom:
configMapKeyRef:
name: game-demo # The ConfigMap this value comes from.
key: player_initial_lives # The key to fetch.
- name: UI_PROPERTIES_FILE_NAME
valueFrom:
configMapKeyRef:
name: game-demo
key: ui_properties_file_name
volumeMounts:
- name: config
mountPath: "/config"
readOnly: true
volumes:
# You set volumes at the Pod level, then mount them into containers inside that Pod
- name: config
configMap:
# Provide the name of the ConfigMap you want to mount.
name: game-demo
# An array of keys from the ConfigMap to create as files
items:
- key: "game.properties"
path: "game.properties"
- key: "user-interface.properties"
path: "user-interface.properties"
然后可以通过命令进入容器:
Kubectl exec -it configmap-demo-pod – /bin/bash
最后使用命令printenv打印该容器的环境变量,验证是否注入成功;
或者直接使用命令:Kubectl exec -it configmap-demo-pod – printenv
Configmaps的创建方式
补充kubernetes中快速创建Configmap的几种方式:
在Kubernetes中,有几种常用的方法可以快速创建ConfigMap。以下是其中一些方法:
-
使用kubectl create configmap命令:
你可以使用kubectl命令来创建ConfigMap。以下是一个示例命令,其中my-config
是ConfigMap的名称,而key1=value1
和key2=value2
是要添加的数据项。kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
-
使用配置文件创建ConfigMap:
你可以创建一个YAML或JSON文件,其中包含ConfigMap的定义,然后使用kubectl apply命令将其部署到Kubernetes集群。以下是一个示例YAML文件:apiVersion: v1 kind: ConfigMap metadata: name: my-config data: key1: value1 key2: value2
然后,使用以下命令来创建ConfigMap:
kubectl apply -f configmap.yaml
-
从文件创建ConfigMap:
你可以从文件中创建ConfigMap,其中每个文件的内容将成为ConfigMap中的一个键值对。假设你有一个名为config-data
的目录,其中包含多个配置文件。你可以使用以下命令将这些文件的内容添加到ConfigMap中:kubectl create configmap my-config --from-file=config-data/
-
从环境变量创建ConfigMap:
你可以使用kubectl create configmap命令从环境变量创建ConfigMap。假设你的环境变量已经设置,你可以运行以下命令:kubectl create configmap my-config --from-env-file=my-env-file
其中,
my-env-file
是包含环境变量的文件。
这些方法中的每一种都允许你以不同的方式创建ConfigMap,选择取决于你的需求和配置数据的来源。
Secret
Secret的定义
Secret,功能类似configmap,是base64编码加密存放的,用于存放敏感信息;
Secret,会进行64位加密,但不是真正的安全;
Secret的分类
- Generic:保存密码数据;
- TLS:保存私钥或者证书数据;——一般是使用挂在到存储卷的方式;
- Docker Registery:保存Docker镜像仓库里面的凭证数据,如用户名、密码或令牌等;——imagePullSecret
使用echo [64位编码文件] | base64 -d,进行解密;
注意:尽量不要使用环境变量的方式注入secret,因为它会解密后直接显示;