K8S资源介绍之configmap

1 configmap介绍

是什么:是K8S内置的一种存储卷,数据存储在etcd数据库中

应用场景:主要是存储应用的配置,实现配置与应分离,可以实现类似配置配置中心的功能

由于镜像是只读的特性,如果想要修改需要重新打镜像。但是每次打镜像都会带来繁琐的工作。如果说只是配置文件发生修改,完全没有必要打镜像,可以将配置文件定义为一个cm资源,然后将其挂载到容器的相应路径

  • configmap存在形式
    • 键值对形式
    • 类文件形式

2 configmap创建和删除

2.1 响应式创建configmap

创建一个类似mysql配置的cm

bash 复制代码
kubectl create cm my.cnf --from-literal=port=3306 --from-literal=socket=/tmp/mysql80.sock

[root@master231~]# kubectl describe cm my.cnf 
Name:         my.cnf
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
socket:
----
/tmp/mysql80.sock
port:
----
3306

BinaryData
====

Events:  <none

[root@master231~]# kubectl get cm my.cnf -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my.cnf
  namespace: default
data:
  port: "3306"
  socket: /tmp/mysql80.sock

2.2 基于现有配置文件创建configmap

从已有的文件创建一个cm,比较便捷

1.先写一个mysql.conf配置文件

bash 复制代码
cat > /data/3306/my.cnf <<eof
[mysql]
socket=/tmp/mysql.sock
default-character-set=utf8
[mysqld]
user=mysql
mysqlx=0
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
eof

2.基于文件创建

bash 复制代码
kubectl create cm mysql.conf --from-file=mysql.conf

3.查看文件内容,内容部分使用一个|引用。也可以手写yaml进行创建。

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql.conf
  namespace: default
data:
  mysql.conf: |
    [mysql]
    socket=/tmp/mysql.sock
    default-character-set=utf8
    [mysqld]
    user=mysql
    mysqlx=0
    basedir=/usr/local/mysql
    datadir=/data/3306/data
    socket=/tmp/mysql.sock

2.3 键值对和类文件同时使用

键值对和类文件同时使用也是可以创建成功的

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: my.cnf
  namespace: default
data:
  port: "3306"
  socket: /tmp/mysql80.sock
  mysql.conf: |
    mysql_user=root

    data_path=/data/mysql/data1
    index=true

2.4 占位符|和/说明

\表示下级字段原样输出

``/`表示将下级字段放在一行

1.编写一个cm配置

yaml 复制代码
cat > << EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: test1
  namespace: default
data:
  mysql.conf: /
    [mysql]
    socket=/tmp/mysql.sock
    default-character-set=utf8
    [mysqld]
    user=mysql
    mysqlx=0
    basedir=/usr/local/mysql
    datadir=/data/3306/data
    socket=/tmp/mysql.sock
EOF

2.查看到全部内容在一行中

yaml 复制代码
[root@master23102-configmap]# kubectl get cm test1 -o yaml
apiVersion: v1
data:
  mysql.conf: / [mysql] socket=/tmp/mysql.sock default-character-set=utf8 [mysqld]
    user=mysql mysqlx=0 basedir=/usr/local/mysql datadir=/data/3306/data socket=/tmp/mysql.sock
kind: ConfigMap
....
bash 复制代码
[root@master23102-configmap]# kubectl describe cm test1 
Name:         test1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
mysql.conf:
----
/ [mysql] socket=/tmp/mysql.sock default-character-set=utf8 [mysqld] user=mysql mysqlx=0 basedir=/usr/local/mysql datadir=/data/3306/data socket=/tmp/mysql.sock

BinaryData
====

2.5 删除configmap的方式

方式1:

kubectl delete cm my.cnf mysql.conf

方式2:

删除对应的yaml配置文件

3 pod环境变量引用configmap的key

其实就是引用上一个01-cm-games.yaml 的键

一些容器容器运行时需要传递环境变量,这是就可以引用configmap中定义的key。

如:mysql容器,nacos容器...

1.创建cm

yaml 复制代码
[root@master23102-configmap]# cat 01.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: db1.cnf
  namespace: default
data:
  port: "3306"
  socket: /tmp/mysql80.sock
  author: wzy666
  mysql.conf: |
    mysql_user=root

    data_path=/data/mysql/data1
    index=true

2.创建pod测试

yaml 复制代码
[root@master231 configmaps]# cat 02-deploy-cm-env.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-cm-env
spec:
  replicas: 1
  selector:
    matchExpressions:
    - key: apps
      values:
      - xiuxian
      operator: In
  template:
    metadata:
      labels:
         apps: xiuxian
    spec:
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v3
        env:
        - name: author_name1
          # 指定值从哪里获取,从cm中获取
          valueFrom:
            configMapKeyRef:
              # 指定上一步创建的cm db1.cnf
              name: db1.cnf
              key: author

3.测试变量可以获取到,打印出来

bash 复制代码
kubectl exec deploy-cm-env-f449485f-hdxth -- /bin/sh -c 'echo ${author_name1}'
wzy666
[root@master23102-configmap]# kubectl exec eploy-cm-env-f449485f-hdxth -- /bin/sh -c 'env |grep author'
author_name1=wzy666
相关推荐
默 唁4 小时前
win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
docker·容器
Godlovesea5 小时前
ubuntu安装docker 无法拉取问题
云原生·eureka
计算机毕设定制辅导-无忧学长5 小时前
Docker 与持续集成 / 持续部署(CI/CD)的集成(一)
ci/cd·docker·容器
Yuanymoon6 小时前
Docker 修改配置后无法启动问题
运维·docker·容器
阿猿收手吧!9 小时前
【Docker】Docker中卷的类型、区别及应用
开发语言·docker·容器·eureka
青啊青斯9 小时前
Windows搭建CUDA大模型Docker环境
windows·docker·容器
提笔忘字的帝国11 小时前
Centos 7安装docker
linux·docker·centos
桂月二二11 小时前
基于Knative的无服务器引擎重构:实现毫秒级冷启动的云原生应用浪潮
云原生·serverless·knative
阿里云大数据AI技术11 小时前
阿里云 MaxCompute MaxQA 开启公测,解锁近实时高效查询体验
大数据·阿里云·云原生·实时数仓·maxcompute
茅坑的小石头12 小时前
CentOS系统docker配置镜像加速registry-mirrors,配置阿里云和道客
运维·docker·容器