configmap的配置和使用

1.configmap的简单理解

提供服务的pod,比如mysql,主要有两部分重要数据,静态数据:mysql服务读取的配置文件,动态数据:存储数据.

如果pod出问题,删除pod,假如这些重要数据不单独备份,将随着pod的删除也被删除.很不方便.

重要数据和pod分离解耦,独立于pod之外,显然方便许多.

存储数据可以用pv pvc实现和pod的分离解耦,后面测试.

配置文件和pod分离解耦,也就是说mysql容器能够直接读取并使用预先配置好的配置文件(而不是使用容器中默认自带的配置文件).这是configMap的主要功能.

kubernetes使用configMap实现对pod中应用配置文件管理.

2.创建configmap

有两种方式:

1.通过yaml文件创建.

2.执行kubectl create命令,直接命令行创建.

命令行直接创建,见下:

cat mysqld.cnf

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

创建configMap,使用mysqld.cnf的数据

kubectl create configmap mysql-config --from-file=mysqld.cnf

configmap/mysql-config created

kubectl describe configmap mysql-config

Name: mysql-config

Namespace: default

Labels:

Annotations:

Data

====

mysqld.cnf:

----

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

Events:

yaml文件创建configmap,见下:

注意直接写入文件内容的格式 mysqld.cnf: |

cat mysql-config2.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: mysql-config2

data:

mysqld.cnf: |

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

kubectl apply -f mysql-config2.yaml

configmap/mysql-config2 created

kubectl describe configmap mysql-config2

Name: mysql-config2

Namespace: default

Labels:

Annotations: kubectl.kubernetes.io/last-applied-configuration:

{"apiVersion":"v1","data":{"mysqld.cnf":"[client]\nport = 3306\nsocket = /var/run/mysqld/mysqld.sock\n[mysql]\nno-auto-rehash\n\n[mysqld]\...

Data

====

mysqld.cnf:

----

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

Events:

3.使用configmap

configmap可以和secret一样当成环境变量使用.

主要使用volume挂载方式.应用配置文件使用volume挂载方式.支持动态更新.

下面用mysql示例,启用一个mysql容器pod,通过configmap读取预先配置好的配置文件.

configmap,用上面的mysql-config2.配置参考见下:

cat mysql-test.yaml

apiVersion: v1

kind: Service

metadata:

name: mysql-t

spec:

ports:

- port: 3306

selector:

app: mysql-t

---

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: mysql-t

spec:

selector:

matchLabels:

app: mysql-t

template:

metadata:

labels:

app: mysql-t

spec:

containers:

- image: mysql:5.7

name: mysql-t

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysecret

key: password

volumeMounts:

- name: mysql-t1

mountPath: /etc/mysql/mysql.conf.d

volumes:

- name: mysql-t1

configMap:

name: mysql-config2

kubectl apply -f mysql-test.yaml

service/mysql-t created

deployment.apps/mysql-t created

注释:

MYSQL_ROOT_PASSWORD使用的是secret篇里创建的secret.

volumeMounts/mountPath:pod容器里挂载目录,这个目录其实很重要,你要使用个容器的应用,需熟悉这个应用的配置文件存放目录并且挂载到正确目录.挂载目录错了容器应用无法读取到配置文件.

volumes:使用的卷name: mysql-t1,注意volumes和volumeMounts的这个名字是相对应的.

kubectl describe pod mysql-t-8fb468bcc-6b4r7

Name: mysql-t-8fb468bcc-6b4r7

Namespace: default

Priority: 0

Node: k8s-node2/192.168.174.129

Start Time: Fri, 22 Nov 2019 02:05:40 -0500

Labels: app=mysql-t

pod-template-hash=8fb468bcc

Annotations:

Status: Running

IP: 172.30.94.5

Controlled By: ReplicaSet/mysql-t-8fb468bcc

Containers:

mysql-t:

Container ID: docker://d7fff75f23a8cdff5d1aca8807725d1f54f07e1a4c181f25f435614c71bd916c

Image: mysql:5.7

Image ID: docker-pullable://mysql@sha256:44b33224e3c406bf50b5a2ee4286ed0d7f2c5aec1f7fdb70291f7f7c570284dd

Port: 3306/TCP

Host Port: 0/TCP

State: Running

Started: Fri, 22 Nov 2019 02:05:41 -0500

Ready: True

Restart Count: 0

Environment:

MYSQL_ROOT_PASSWORD: Optional: false

Mounts:

/etc/mysql/mysql.conf.d from mysql-t1 (rw)

/var/run/secrets/kubernetes.io/serviceaccount from default-token-fwtch (ro)

Conditions:

Type Status

Initialized True

Ready True

ContainersReady True

PodScheduled True

Volumes:

mysql-t1:

Type: ConfigMap (a volume populated by a ConfigMap)

Name: mysql-config2

Optional: false

default-token-fwtch:

Type: Secret (a volume populated by a Secret)

SecretName: default-token-fwtch

Optional: false

QoS Class: BestEffort

Node-Selectors:

Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s

node.kubernetes.io/unreachable:NoExecute for 300s

Events:

Type Reason Age From Message

---- ------ ---- ---- -------

Normal Scheduled 3m29s default-scheduler Successfully assigned default/mysql-t-8fb468bcc-6b4r7 to k8s-node2

Normal Pulled 3m28s kubelet, k8s-node2 Container image "mysql:5.7" already present on machine

Normal Created 3m28s kubelet, k8s-node2 Created container mysql-t

Normal Started 3m28s kubelet, k8s-node2 Started container mysql-t

注意mounts部分

Mounts:

/etc/mysql/mysql.conf.d from mysql-t1 (rw)

/var/run/secrets/kubernetes.io/serviceaccount from default-token-fwtch (ro)

检索可见,读取的就是我们配置的configmap.

root@mysql-t-8fb468bcc-6b4r7:/etc/mysql/mysql.conf.d# pwd

/etc/mysql/mysql.conf.d

root@mysql-t-8fb468bcc-6b4r7:/etc/mysql/mysql.conf.d# cat mysqld.cnf

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

4.动态更新

测试热更新

更新mysql-config2

加上以下内容:

log_bin=mysql_bin

binlog-format=Row

server-id=1

使用kubectl edit命令

kubectl edit configmap mysql-config2

configmap "mysql-config2" edited

kubectl describe configmap mysql-config2

Name: mysql-config2

Namespace: default

Labels:

Annotations: kubectl.kubernetes.io/last-applied-configuration:

{"apiVersion":"v1","data":{"mysqld.cnf":"[client]\nport = 3306\nsocket = /var/run/mysqld/mysqld.sock\n[mysql]\nno-auto-rehash\n\n[mysqld]\...

Data

====

mysqld.cnf:

----

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

log_bin=mysql_bin

binlog-format=Row

server-id=1

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

Events:

实现了热更新

kubectl exec -it mysql-t-8fb468bcc-9274l bash

root@mysql-t-8fb468bcc-9274l:/# cat /etc/mysql/mysql.conf.d/mysqld.cnf

[client]

port = 3306

socket = /var/run/mysqld/mysqld.sock

[mysql]

no-auto-rehash

[mysqld]

user = mysql

port = 3306

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

log_bin=mysql_bin

binlog-format=Row

server-id=1

[mysqld_safe]

log-error= /var/log/mysql/mysql_oldboy.err

pid-file = /var/run/mysqld/mysqld.pid

mapn安装完后mysql配置文件目录_k8s实践4:容器应用配置文件管理利器configmap相关推荐

  1. php fpm配置和php.ini,php安装完后配置php.ini和php-fpm.conf

    php.ini //错误日志级别 error_reporting = E_ALL //错误日志文件路径 error_log = /data/logs/php/php_errors.log //配置时区 ...

  2. ANSYS2020R2与Solidworks2019进行关联,但2019安装完后打开出现无法获得下列许可SOLIDWORKS Standard.使用许可文件不支持此版本(-21,126,0)

    本身想将ANSYS2020R2与Solidworks进行关联,本身电脑上安装了2016版本,但是使用ANSYS2020R2软件,无法关联上.又没找到相应方法去解决,估计是版本问题无法关联上吧,所以就重 ...

  3. 干净硬盘安装苹果系统(macos 光驱、硬盘安装方案)安装完后重启系统内核会崩溃...

    我的系统下载地址:http://www.verycd.com/groups/ubuntu/3049876.topic 方案一:macos 光盘安装步骤:(干净硬盘,我的方正品牌机上安装雪豹破解版光驱可 ...

  4. 无法使用_解决kali linux 2020 安装完后发现无法使用 ifconfig

    鱼蛋计算机交流群总部: 606219746 鱼蛋计算机交流分群002: 212088123 鱼蛋计算机交流分群003: 1020025486 鱼蛋计算机交流分群004:1158384728 (建议加此 ...

  5. Arcmap 安装完后使用出现visual fortran run-time error的解决方法

    Arcmap 安装完后使用出现visual fortran run-time error的解决方法 参考文章: (1)Arcmap 安装完后使用出现visual fortran run-time er ...

  6. windows服务安装完后自动启动

    服务写完后修改机会很少,老是忘记服务安装完后自动启动 找到Installer的AfterInstall事件. 注意是System.Configuration.Install.Installer下的事件 ...

  7. window10安装STEP7 Micro/Win V4.0 SP9,安装完后每次开机都提示Assertion Program:pniopcac.exe File

    安装STEP7 Micro/Win V4.0 SP9,安装完后每次开机都提示Assertion " Program:pniopcac.exe File:-" 我碰到过同样的问题,解 ...

  8. [tensorflow] Aanconda安装完后spyde中import tensorflow失败问题解决

    在windows平台下安装完Aanconda后,在prompt中activate tensorflow, import tensorflow ,执行其他各种测试均ok,但是打开spyde,执行impo ...

  9. CAD安装完后,出现“Adui18res.dll Not Found”,如何解决?

    CAD安装完后出现Adui18res.dll Not Found的问题主要出现在AutoCAD2010版本上,但是经过小编在网上查询发现,其他版本的AutoCAD软件或者依赖于动态链接库的游戏.软件等 ...

最新文章

  1. 不经历风雨,怎么能见彩虹!马克斯与我的不解之缘!
  2. 中国厂商导致美国断网很稀奇?咱们早就被坑过了
  3. 启明云端分享| ESP32-S3点480*480分辨率的RGB 2.1寸旋钮屏刷新效果到底会怎么样呢
  4. 如何自学JSP。--摘抄http://hi.baidu.com/comasp
  5. Bash字符串处理(与Java对照) - 18.格式化字符串
  6. 第六十六期:运维专家写给运维工程师的6条人生忠告
  7. oracle技术之Oracle 物化视图(一)
  8. python_程序的构成---python工作笔记015
  9. rds 数据库营销报告_《营销自动化从入门到精通》第五章 集成营销自动化工具与CRM...
  10. annotation:@Override出现The method of type must override asuperclass解决方案
  11. linux简单进程调用
  12. 在Mac上Topaz Gigapixel AI作为Photoshop插件未显示在“文件”->“自动”中的解决方法
  13. HTML静态网页作业——仿天猫购物商城(7页) 网页设计作业,网页制作作业, 学生网页作业, 网页作业成品, 网页作业模板
  14. 技术胖TypeScript图文视频教程
  15. 【FXCG】什么是风险?
  16. Fresco高斯模糊使用
  17. 如何解决360极速浏览器主页无法修改问题
  18. 品铂平板电脑刷linux,教你如何把品铂PIPO W8平板电脑升级到win10系统
  19. matlab snr mse,MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM...
  20. 揭秘“0 day漏洞”:一款强大却脆弱的武器

热门文章

  1. 串口通信过冲原因分析和端接的方法
  2. ng-cli新建项目
  3. u盘 产品制造商: ai_产品制造商的色彩理论
  4. 梦想Android版CAD控件2022.06.22更新,APP查看CAD图纸
  5. 利用C语言编程反向输出字符串
  6. BI-LSTM,BILSTM-CRF,Lattice-LSTM基本原理以及在NER中的应用
  7. Android 9 Pie 正式版总结
  8. 数字钟课程设计(74HC393版)
  9. yeslab的视频---“信息收集”学习报告
  10. Qt QImage像素格式小结