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
相关推荐
Algorithm15762 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab
巅峰程序12 小时前
[docker]拉取镜像失败
docker·容器·eureka
江流。12 小时前
docker执行java的jar包
java·docker·jar
MonkeyKing_sunyuhua13 小时前
sudo docker ps才能查看,docker ps不能查看问题
docker·容器·eureka
小龙在山东14 小时前
使用Docker快速部署FastAPI Web应用
docker·容器·fastapi
苏格拉真没有底14 小时前
docker配置代理解决不能拉镜像问题
运维·docker·容器
CoderJia程序员甲16 小时前
阿里云Linux安装Docker服务报错问题
linux·阿里云·docker
A ?Charis17 小时前
我来讲一下-Service Mesh.
云原生·service_mesh
Ada大侦探17 小时前
新手小白学习docker第六弹------Docker常规安装(安装tomcat、mysql、redis)
mysql·docker·tomcat
ciao-lk17 小时前
docker desktop运行rabittmq容器,控制台无法访问
docker·容器