介绍
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 将环境配置信息和容器镜像解耦,便于应用配置的修改。当你需要储存机密信息时可以使用 Secret 对象。
备注:ConfigMap 并不提供保密或者加密功能。如果你想存储的数据是机密的,请使用 Secret;或者使用其他第三方工具来保证数据的私密性,而不是用 ConfigMap
有三种创建方式
- 使用目录创建
- 使用文件创建
- 使用字面值创建
使用目录创建
文件内容如下
执行下面命令生成
kubectl create configmap game-config --from-file=/root/config
—from-file:
指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容- game-config:自定义的名称
也可以通过下面命令查看有多少个 ConfigMap
kubectl get cm # cm 是 ConfigMap 的缩写
查看详细信息
kubectl describe cm game-config # cm 是 ConfigMap 的缩写,game-config 是创建时候起的名字
使用文件创建
使用文件创建和使用目录创建的方式是一样的,只是把目录改为具体的文件即可,例如我们需要把上面的 game.file 使用文件创建,执行下面命令
kubectl create configmap game-config2 --from-file=/root/config/game.file # 这里起的名称叫 game-config2
--from-file 这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的
使用字面值创建
使用文字值创建,利用 —from-literal
参数传递配置信息,该参数可以使用多次,格式如下
# literal-config 为名称,name 和 password 是 key,dave 和 pass 是 value kubectl create configmap literal-config --from-literal=name=dave --from-literal=password=pass
Pod 中使用 ConfigMap 对象
创建 configmap.yaml,内容如下:
apiVersion: v1 kind: ConfigMap # 类型为 ConfigMap metadata: name: configmap # ConfigMap 的名称 namespace: zouzou data: info: | # 挂载到容器里 | 前的是文件名,后面的是文件里的内容 username:admin password:123456
接下来,使用此配置文件创建 configmap
# 创建 configmap [root@dce-10-6-215-215 pod-dir]# kubectl create -f configmap.yaml configmap/configmap created
查看 configmap
# cm 是 configmap 的缩写 [root@dce-10-6-215-215 pod-dir]# kubectl get cm -n zouzou -o wide NAME DATA AGE configmap 1 47s
查看 configmap 的详情
# 查看 configmap 的详情 [root@dce-10-6-215-215 pod-dir]# kubectl describe cm -n zouzou Name: configmap Namespace: zouzou Labels: <none> Annotations: <none> Data ==== info: ---- username:admin password:123456 Events: <none>
接下来创建一个 pod-configmap.yaml,将上面创建的 configmap 挂载进去
apiVersion: v1 kind: Pod # 类型为 pod metadata: name: pod-configmap # pod 的名称 namespace: zouzou spec: containers: - name: nginx image: nginx:1.14 volumeMounts: # 将 configmap 挂载到目录 - name: config # 名称要和下面 volumes 里的 name 的值一样 mountPath: /configmap/config # 挂载到容器里的这个路径下 volumes: # 引用configmap - name: config # 名称要和上面 volumeMounts 里的 name 的值一样 configMap: name: configmap # 这个名称要和 configmap.yaml 文件里的 name 的名称对应
创建 pod
# 创建 pod [root@dce-10-6-215-215 pod-dir]# kubectl create -f pod-configmap.yaml pod/pod-configmap created
查看 pod
# 查看 pod,pod 正常运行 [root@dce-10-6-215-215 pod-dir]# kubectl get pod -n zouzou -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-configmap 1/1 Running 0 43s 172.29.35.62 dce-10-6-215-200 <none> <none>
进入到 pod 容器里面,查看挂载的文件是否在容器里面
[root@dce-10-6-215-215 pod-dir]# kubectl exec -it pod-configmap -n zouzou /bin/sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead. # cd /configmap/config/ # ls info # cat info username:admin password:123456
可以看到映射已经成功,每个 configmap 都映射成了一个目录
key--->文件 value---->文件中的内容
此时如果更新 configmap 的内容, 容器中的值也会动态更新(需要点时间才会更新过去)
Secret
在 kubernetes 中,还存在一种和 ConfigMap 非常类似的对象,称为 Secret 对象。它主要用于存储敏感信息,例如密码、秘钥、证书等等
首先使用 base64 对数据进行编码
[root@dce-10-6-215-215 pod-dir]# echo -n admin | base64 YWRtaW4= [root@dce-10-6-215-215 pod-dir]# echo -n 123456 | base64 MTIzNDU2
接下来编写 secret.yaml,并创建 Secret
apiVersion: v1 kind: Secret # 类型为Secret metadata: name: secret # Secret 的名称 namespace: zouzou type: Opaque data: username: YWRtaW4= # 上面 base64 加密后的数据 password: MTIzNDU2 # 上面 base64 加密后的数据
创建 secret
# 创建 secret [root@dce-10-6-215-215 pod-dir]# kubectl create -f secret.yaml secret/secret created
查看 secret
# 查看 secret [root@dce-10-6-215-215 pod-dir]# kubectl get secret -n zouzou NAME TYPE DATA AGE default-token-cvq85 kubernetes.io/service-account-token 3 2d1h secret Opaque 2 96s [root@dce-10-6-215-215 pod-di
查看 secret 详情
# 查看详情 [root@dce-10-6-215-215 pod-dir]# kubectl describe secret secret -n zouzou Name: secret Namespace: zouzou Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 6 bytes username: 5 bytes
创建 pod-secret.yaml,将上面创建的 secret 挂载进去
apiVersion: v1 kind: Pod # 类型为 pod metadata: name: pod-secret # pod 的名称 namespace: zouzou spec: containers: - name: nginx image: nginx:1.14 volumeMounts: # 将 secret 挂载到目录 - name: config mountPath: /secret/config # 容器里的路径 volumes: - name: config secret: # secret secretName: secret
创建 pod
# 创建 pod [root@dce-10-6-215-215 pod-dir]# kubectl create -f pod-secret.yaml pod/pod-secret created
查看 pod
# 查看 pod [root@dce-10-6-215-215 pod-dir]# kubectl get pod -n zouzou -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-secret 1/1 Running 0 29s 172.29.35.63 dce-10-6-215-200 <none> <none>
进入容器,查看 secret 信息,发现已经自动解码了
至此,已经实现了利用 secret 实现了信息的编码。