当前位置: 首页 > news >正文

K8S——存储ConfigMap

configMap描述信息

ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。

ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制大对象

k8s中存储分为以下几类:

ConfigMap、Volume、Secret、Perstent Volume(pv)

演示 ConfigMap的创建

Ⅰ 使用目录创建

mkdir -p configmap/dir/
cd dir

创建文件

vim game.properties

enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30                          

创建文件

vim ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
vim ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice

创建game-config

[root@master dir]# kubectl create configmap game-config --from-file=../dir

—from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就 是文件的内容
查看configmap

kubectl get cm game-config
#查看详细信息
kubectl get cm game-config -o yaml 
apiVersion: v1
data:
  game.properties: |
    enemies=aliens
    lives=3
    enemies.cheat=true
    enemies.cheat.level=noGoodRotten
    secret.code.passphrase=UUDDLRLRBABAS
    secret.code.allowed=true
    secret.code.lives=30
  ui.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true
    how.nice.to.look=fairlyNice
kind: ConfigMap
metadata:
  creationTimestamp: "2022-12-22T04:34:49Z"
  name: game-config
  namespace: default
  resourceVersion: "187406"
  selfLink: /api/v1/namespaces/default/configmaps/game-config
  uid: e2a7ced2-21fa-4311-b84c-83b2621e0cf5

Ⅱ 使用文件创建
只要指定为一个文件就可以从单个文件中创建 ConfigMap

kubectl create configmap game-config-2 --from-file=../dir/game.properties

与目录创建../dir的区别是直接指定到文件../dir/game.properties
查看

kubectl get configmaps game-config-2 -o yaml

—from-file这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个
目录是一样的

Ⅲ 使用字面值创建
使用文字值创建,利用 —from-literal 参数传递配置信息,该参数可以使用多次,格式如下

kubectl create configmap special-config --from-literal=special.how=very --from-
literal=special.type=charm
#special-config:configmap名
#--from-literal=键值名=键值
kubectl get configmaps special-config -o yaml

pod 中使用ConfigMap

Ⅰ 使用ConfigMap来替代环境变量

vim pod.yaml

apiVersion: v1
kind: Pod
metadata:
 name: dapi-test-pod
spec:
 containers:
 - name: test-config
   image: nginx
   command: ["/bin/bash","-c","env"]
   env:
    - name: SPECIAL_LEVE_KEY
      valueFrom:
        configMapKeyRef:
         name: special-config
         key: special.how
    - name: SPECIAL_TYPE_KEY
      valueFrom:
        configMapKeyRef:
         name: special-config
         key: special.type    
   envFrom:
     - configMapRef:
        name: env-config #configmap来源 
 restartPolicy: Never
#查看pod及环境变量
[root@master dir]# kubectl get pod
NAME                           READY   STATUS        RESTARTS   AGE
dapi-test-pod                  0/1     Completed     0          2m10s
[root@master dir]# kubectl logs dapi-test-pod   
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=dapi-test-pod
PWD=/
PKG_RELEASE=1~bullseye
HOME=/root
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
log_level=INFO
SPECIAL_LEVE_KEY=very
NJS_VERSION=0.7.9
SHLVL=0
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PORT=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SPECIAL_TYPE_KEY=charm
NGINX_VERSION=1.23.3
_=/usr/bin/env

在这里插入图片描述
Ⅱ 使用ConfigMap设置命令行参数

vim pod1.yaml

apiVersion: v1
kind: Pod
metadata:
 name: dapi-test-pod1
spec:
 containers:
 - name: test-config1
   image: nginx
   command: ["/bin/bash","-c","echo $(SPECIAL_LEVE_KEY) $(SPECIAL_TYPE_KEY)"]
   env:
    - name: SPECIAL_LEVE_KEY
      valueFrom:
        configMapKeyRef:
         name: special-config
         key: special.how
    - name: SPECIAL_TYPE_KEY
      valueFrom:
        configMapKeyRef:
         name: special-config
         key: special.type
   envFrom:
     - configMapRef:
        name: env-config
 restartPolicy: Never

在这里插入图片描述
在这里插入图片描述
Ⅲ 通过数据卷插入使用ConfigMap

apiVersion: v1
kind: Pod
metadata:
 name: dapi-test-pod2
spec:
 containers:
 - name: test-config2
   image: nginx
   command: ["/bin/bash","-c","sleep 600s"]
   volumeMounts:
    - name: config-volumes
      mountPath: /etc/config
 volumes:
  - name: config-volumes
    configMap:
      name: special-config
 restartPolicy: Never
kubectl create -f pod2.yaml

查看pod2

[root@master dir]# kubectl get pod
NAME                           READY   STATUS        RESTARTS   AGE
dapi-test-pod                  0/1     Completed     0          31m
dapi-test-pod1                 0/1     Completed     0          6m59s
dapi-test-pod2                 1/1     Running       0          9s

查看挂载目录

[root@master dir]# kubectl exec -it dapi-test-pod2 bash
root@dapi-test-pod2:/# cd /etc/config/
root@dapi-test-pod2:/etc/config# ls
special.how  special.type

ConfigMap热更新

[root@apiserver config]# cat 111.yaml 
apiVersion: v1
kind: ConfigMap
metadata: 
 name: log-config
data:
 log_level: INFO## 输出信息
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: nginx-deployment
spec:
    replicas: 3
    template: 
       metadata: 
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx
           ports: 
           - containerPort: 80
           volumeMounts:
           - name: config-volume
             mountPath: /etc/config
         volumes:
         - name: config-volume
           configMap:
              name: log-config

在这里插入图片描述
创建

kubectl apply -f 111.yaml 
kubectl get pod 
nginx-deployment-58cc897b99-2khhb   1/1     Running       0          24s
nginx-deployment-58cc897b99-h6qj8   1/1     Running       0          24s
nginx-deployment-58cc897b99-xjpdk   1/1     Running       0          24s

查看挂载目录信息
是否正确

[root@master dir]# kubectl exec -it nginx-deployment-58cc897b99-2khhb  bash
root@nginx-deployment-58cc897b99-2khhb:/# cd /etc/config/
root@nginx-deployment-58cc897b99-2khhb:/etc/config# ls
log_level
root@nginx-deployment-58cc897b99-2khhb:/etc/config# cat log_level 
INFO

编辑configmap实现热更新

kubectl edit cm log-config

在这里插入图片描述
修改后

[root@apiserver config]# kubectl exec -it nginx-deployment-58b5f7c9d-bdxrc bash
root@nginx-deployment-58b5f7c9d-bdxrc:/# cd /etc//config/
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# ls
log_level
root@nginx-deployment-58b5f7c9d-bdxrc:/etc/config# cat log_level 
DEBUG

错误信息

如果configmap配置错误使用

#查看cm信息
kubectl get cm
#选择要重新配置的configmap
kubectl  delete configmap  cm名称

如果提示有type错误
也要同时删除pod,再重新创建

如果重新查看修改后的configmap
没有该改变的话删除pod 使nginx重启

相关文章:

  • C++:类和对象:运算符重载
  • 现在转行计算机如49年入国军?
  • 小哥用Python兼职月入过万,用Python做项目有多赚钱?
  • 【架构师(第五十一篇)】 服务端开发之技术方案设计
  • 系统架构设计师教材改版,2023年软考考试难度上升
  • 【C语言进阶】进来抄作业,完善你的通讯录(软工期末大作业可用)
  • WebMagic
  • 必须要学习的源码--ConcurrentHashMap
  • 常见的数据通信方式有哪些?
  • 刷题记录:牛客NC16544简单环
  • 初学python+QT做GUI(零基础)
  • AlertDialog6种使用方法
  • Java+MySQL基于SSM的二手玩具交换网站
  • 哈啰出行高质量故障复盘法:“3+5+3”(附模板)
  • 为什么企业传统网络访问海外应用程序不稳定、速度慢?怎么解决?
  • 【OpenFeign】【源码+图解】【四】FeignClient实例工具类ReflectiveFeign
  • springboot 定时任务基础模板
  • zabbix添加一个ubuntu受监控主机
  • Android8.1下拉状态栏菜单和系统设置添加触摸开关功能
  • Java HashSet