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
相关推荐
DLYSB_1 天前
混合云与工业边缘场景下“云原生告警与物理现场声光”的集成架构实践
云原生·架构·报警灯
xhaxy1 天前
docker
docker·容器·eureka
上火的金鱼妹1 天前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
一技安身1 天前
【信创】Docker‑Compose V2 两种离线部署(独立模式、插件模式)简易教程
java·docker·eureka
鸿观工坊1 天前
Docker 多阶段构建实践指南
docker
阿里云云原生1 天前
遇到多 Agent 协作效率低?试试引入“讨论共识”与“横向通信”机制
云原生
大牧师1 天前
MySQL 学习教程
数据库·sql·mysql·docker·node·全栈·后端数据
MC丶科1 天前
软考架构师90天冲刺|DAY44·Redis高级应用
数据库·数据仓库·redis·缓存·oracle·容器·规格说明书
天外天-亮1 天前
docker + window 安装
运维·docker·容器
进击的小菜鸡dd1 天前
docker 容器的挂载映射关系查看
运维·docker·容器