k8s--配置存储 ConfigMap、Secret

简介: k8s--配置存储 ConfigMap、Secret

介绍


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 实现了信息的编码。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
人工智能 缓存 Kubernetes
ACK GIE配置建议
Gateway with Inference Extension是基于Kubernetes社区Gateway API及其扩展规范实现的增强型组件,支持四层/七层路由服务,并面向生成式AI推理场景提供负载均衡优化、服务管理简化等能力,适用于AI推理服务的高可用部署与性能优化。在不同的场景使用ACK Gateway with Inference Extension时,可能需要根据业务需求和高可用需要对网关和推理扩展进行不同的配置调整。本文主要介绍在实际业务场景中针对ACK GIE的配置建议,以获得更好的使用效果。
558 23
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
726 267
|
12月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
722 22
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
374 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
292 1
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
12月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
677 13
|
Kubernetes 关系型数据库 MySQL
k8s之Secret
k8s之Secret
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
1095 0

推荐镜像

更多