Kubernetes配置管理 ConfigMap

news2024/9/30 19:36:01

Kubernetes配置管理 ConfigMap

一、ConfigMap

1.1 什么是configmap

  • kubernetes集群可以使用ConfigMap来实现对容器中应用的配置管理
  • 可以把ConfigMap看作是一个挂载到pod中的存储卷

1.2 创建ConfigMap的4种方式

1.2.1 在命令行指定参数创建

通过直接在命令行中指定configmap参数创建,即--from-literal=key=value

[root@k8s-master1 ~]# kubectl create configmap cm1 --from-literal=host=127.0.0.1 --from-literal=port=3306
configmap/cm1 created
[root@k8s-master1 ~]# kubectl get cm
NAME   DATA   AGE
cm1    2      12s
[root@k8s-master1 ~]#  kubectl describe cm cm1
Name:         cm1
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host:
----
127.0.0.1
port:
----
3306
Events:  <none>

在这里插入图片描述

1.2.2 在命令行通过多个文件创建

通过指定文件创建,即将一个配置文件创建为一个ConfigMap,--from-file=文件路径

[root@k8s-master1 ~]#  echo -n 127.0.0.1 > host
[root@k8s-master1 ~]#  echo -n 3306 > port				

[root@k8s-master1 ~]#  kubectl create configmap cm2 --from-file=./host --from-file=./port
configmap/cm2 created

[root@k8s-master1 ~]#  kubectl get cm
NAME   DATA   AGE
cm1    2      3m45s
cm2    2      94s
[root@k8s-master1 ~]#  kubectl describe cm cm2
Name:         cm2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host:
----
127.0.0.1
port:
----
3306
Events:  <none>

通过多文件来创建configmap

1.2.3 在命令行通过文件提供多个键值对创建

通过一个文件内多个键值对,--from-env-file=文件路径;

[root@k8smaster ~]# vi env.properties
[root@k8smaster ~]# cat env.properties 
host=127.0.0.1
port=3306
[root@k8smaster ~]# kubectl create configmap cm3 --from-env-file=env.properties
configmap/cm3 created
[root@k8smaster ~]# kubectl get cm
NAME   DATA   AGE
cm1    2      76m
cm2    2      4m6s
cm3    2      8s

[root@k8s-master1 ~]#  kubectl describe cm cm3
Name:         cm3
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
host:
----
127.0.0.1
port:
----
3306
Events:  <none>

1.2.4 通过YAML资源清单文件创建

通过kubectl create/apply -f YMAL文件 创建

[root@k8s-master1 ~]#  vim cm4.yml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm4
data:
  host: 127.0.0.1
  port: "3306"
  
[root@k8s-master1 ~]#  kubectl apply -f cm4.yml
configmap/cm4 created
[root@k8s-master1 ~]#  kubectl get cm
NAME   DATA   AGE
cm1    2      6m18s
cm2    2      4m7s
cm3    2      113s
cm4    2      11s
[root@k8s-master1 ~]#  kubectl describe cm cm4
Name:         cm4
Namespace:    default
Labels:       <none>
Annotations:
Data
====
host:
----
127.0.0.1
port:
----
3306
Events:  <none>

在这里插入图片描述

1.3 ConfigMap的2种使用方式

1.3.1 通过环境变量的方式传递给pod

[root@k8s-master1 ~]#  vim pod-cm1.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-cm1
spec:
  containers:
  - name: busybox
    image: busybox
    args: [ "/bin/sh", "-c", "sleep 10000" ]
    envFrom:							# env方式
    - configMapRef:
        name: cm1						# configmap名称
[root@k8s-master1 ~]#  kubectl apply -f pod-cm1.yml
pod/pod-cm1 created
[root@k8s-master1 ~]#  kubectl get pods
NAME               READY   STATUS    RESTARTS   AGE
pod-cm1            1/1     Running   0          9s
[root@k8s-master1 ~]#  kubectl exec pod-cm1 -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=pod-cm1
host=127.0.0.1								 # 我们创建的configmap传进去的env
port=3306									 # 我们创建的configmap传进去的env
DEPLOY_NGINX_PORT_80_TCP=tcp://10.2.205.160:80
DEPLOY_NGINX_PORT_80_TCP_ADDR=10.2.205.160
KUBERNETES_PORT=tcp://10.2.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.2.0.1:443
MY_SERVICE_SERVICE_HOST=10.2.52.46
MY_SERVICE_PORT_80_TCP_ADDR=10.2.52.46
KUBERNETES_SERVICE_HOST=10.2.0.1
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.2.0.1
MY_SERVICE_SERVICE_PORT=80
MY_SERVICE_PORT=tcp://10.2.52.46:80
MY_SERVICE_PORT_80_TCP=tcp://10.2.52.46:80
DEPLOY_NGINX_SERVICE_HOST=10.2.205.160
DEPLOY_NGINX_SERVICE_PORT=80
KUBERNETES_PORT_443_TCP_PORT=443
MY_SERVICE_PORT_80_TCP_PORT=80
DEPLOY_NGINX_PORT=tcp://10.2.205.160:80
DEPLOY_NGINX_PORT_80_TCP_PROTO=tcp
DEPLOY_NGINX_PORT_80_TCP_PORT=80
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
MY_SERVICE_PORT_80_TCP_PROTO=tcp
HOME=/root

在这里插入图片描述

1.3.2 通过volume的方式挂载到pod内

[root@k8s-master1 ~]#  vim pod-cm2.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-cm2
spec:
  containers:
  - name: busybox
    image: busybox
    args: [ "/bin/sh", "-c", "sleep 10000" ]
    volumeMounts:                               # 用volume挂载方式
    - name: vol-cm                              # 对应下面的volume名
      mountPath: "/etc/mysql"                   # 挂载到容器内部的路径
      readOnly: true                            # 只读

  volumes:
  - name: vol-cm                                # 卷名称
    configMap:
      name: cm2                                 # configmap的名称
[root@k8s-master1 ~]#  kubectl apply -f pod-cm2.yml
pod/pod-cm2 created
[root@k8s-master1 ~]#  kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
pod-cm1   1/1     Running   0          3m51s
pod-cm2   1/1     Running   0          49s
[root@k8s-master1 ~]#  kubectl exec pod-cm2 -- ls /etc/mysql
host
port
[root@k8s-master1 ~]#  kubectl exec pod-cm2 -- cat /etc/mysql/host
127.0.0.1

[root@k8s-master1 ~]#  kubectl exec pod-cm2 -- cat /etc/mysql/port
3306

1.4 ConfigMap的热更新

1.4.1 ConfigMap热更新方式

如果修改了value, 那么容器内部会不会更新?

  • 通过环境变量的方式传递给pod。这种方式不会热更新
  • 通过volume的方式挂载到pod内。这种方式会热更新,大概需要半分钟左右。

1.4.2 ConfigMap热更新验证

1.4.2.1 通过环境变量方式

此种方式不会热更新

1.编辑修改对应的configmap

[root@k8s-master1 ~]# kubectl edit cm cm1
apiVersion: v1
data:
  host: 127.0.0.1
  port: "3307"								3306修改成3307
kind: ConfigMap
metadata:
  creationTimestamp: "2020-11-07T12:07:04Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:host: {}
        f:port: {}
    manager: kubectl
    operation: Update
    time: "2020-11-07T12:07:04Z"
  name: cm1
  namespace: default
  resourceVersion: "169386"
  selfLink: /api/v1/namespaces/default/configmaps/cm1
  uid: f06cd44d-2ef9-48f2-9ccc-995f9d9ea2ad
  1. 验证对应的pod里的变化,发现很久都不会改变(环境变量方式)
[root@k8s-master1 ~]#  kubectl exec pod-cm1 -- env |grep port
port=3306									仍然为3306

1.4.2.2 通过volume方式

  1. 编辑修改对应的configmap
[root@k8s-master1 ~]#  kubectl edit cm cm2
apiVersion: v1
data:
  host: 127.0.0.1
  port: "3308"							 		 修改成3308
kind: ConfigMap
metadata:
  creationTimestamp: "2020-11-07T12:09:15Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:host: {}
        f:port: {}
    manager: kubectl
    operation: Update
    time: "2020-11-07T12:09:15Z"
  name: cm2
  namespace: default
  resourceVersion: "169707"
  selfLink: /api/v1/namespaces/default/configmaps/cm2

2.验证对应的pod里的变化,一段时间后会改变(卷挂载方式)

[root@k8s-master1 ~]#  kubectl exec pod-cm2 -- cat /etc/mysql/port
3308										     大概半分钟后更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手玩转腾讯云轻量应用服务器搭建网站(保姆级教程)

腾讯云轻量应用服务器镜像选择宝塔Linux面板&#xff0c;然后在宝塔面板上安装LNMP网站所需的Web环境&#xff0c;在宝塔面板上新建站点&#xff0c;上床网站程序安装包到根目录&#xff0c;并安装网站全流程。腾讯云百科来详细说下腾讯云轻量应用服务器搭建网站全流程&#xf…

opencv显示图片

要使用OpenCV在Python中显示图像&#xff0c;您需要遵循以下步骤&#xff1a; 1. 首先&#xff0c;确保已经安装了OpenCV。您可以使用以下命令安装OpenCV&#xff1a; pip install opencv-python 2. 然后&#xff0c;编写一个简单的程序来读取并显示图像。以下是一个示例代码…

数据可视化之雷达图(Radar Chart)

什么是雷达图? 雷达图&#xff08;Radar Chart&#xff09;也称为蜘蛛图、网络图或极坐标图&#xff0c;是一种用于可视化多变量数据的图表。该图表由一系列从中心点向外辐射的辐条组成&#xff0c;每个辐条代表一个不同的变量。数据使用线或区域绘制在每个辐条上&#xff0c…

面试的水太深,年轻人你把握不住.....

前言 去阿里面试测试工程师&#xff0c;这里面水太深&#xff0c;什么未来规划&#xff0c;职业发展的东西都是虚拟的&#xff0c;作者还太年轻&#xff0c;没有那个经历&#xff0c;把握不住。项目只有几个&#xff0c;开心快乐就行&#xff0c;不PK&#xff0c;文明PK。 很…

Partial convolution Gated convolution

组会讨论帖 1. 图像修复 图像修复&#xff08;Image Inpainting&#xff09;&#xff0c;顾名思义&#xff0c;就是将图像中损坏的部分修复起来&#xff0c;是一种图像编辑技术&#xff0c;可以应用在移除物体、修复老照片、图像补全&#xff08;eg,地震插值&#xff09;等等。…

【初始scrapy框架上】——全栈开发——如桃花来

目录索引 scrapy框架的介绍&#xff1a;scrapy第三方包的下载&#xff1a;常见的换源网址&#xff1a; scrapy的图示原理&#xff1a;或者&#xff1a;或者&#xff1a; scrapy原理流程&#xff1a;详细介绍&#xff1a;流程描述&#xff1a;scrapy中的三个内置对象&#xff1a…

open cv 4.6.0 导入maven库以及依赖包 安装教程

windows&#xff1a; 1.官网下载windows安装包 2.安装完成后&#xff0c;复制opencv\build\java\x64\opencv_java451.dll 到 C:\Windows 下 centos&#xff1a; 参考https://www.cnblogs.com/huizhipeng/p/12732019.html 1.先安装cmake3 参考https://www.jianshu.com/p/20…

详谈大模型训练和推理优化技术

详谈大模型训练和推理优化技术 作者&#xff1a;王嘉宁&#xff0c;转载请注明出处&#xff1a;https://wjn1996.blog.csdn.net/article/details/130764843 ChatGPT于2022年12月初发布&#xff0c;震惊轰动了全世界&#xff0c;发布后的这段时间里&#xff0c;一系列国内外的…

莫言用 GPT 写颁奖辞,那如果他自己写会是什么效果呢?

在《收获》杂志 65 周年庆典上&#xff0c;莫言在为余华颁奖时表示&#xff0c;余华是自己的好朋友&#xff0c;但给他的颁奖词写了好几天也想不出来&#xff0c;后来找了 ChatGPT 帮忙写。最后&#xff0c;莫言让 ChatGPT 写了一篇莎士比亚风格 1000 多字的颁奖词&#xff0c;…

「硬核分享」Docker+jenkinsPipeline 运行实现 python 自动化

一、实现思路 在 Linux 服务器安装 docker 创建 jenkins 容器 jenkins 中创建 pipeline 项目 根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目 执行完成之后删除容器 二、环境准…

Defining Timing Constraints and Exceptions(UG945)

在本实验中&#xff0c;将学习为设计创建约束的两种方法。将使用Vivado2019.2 IDE中包含的Kintex-7 CPU网表示例设计。 步骤1&#xff1a;打开示例项目 1.打开Vivado IDE。 Vivado IDE的“Getting Started page”包含打开或创建项目以及查看文档的链接。 2.在“Getting Started…

泛型编程与模板简单介绍,函数模板及其原理与template,typename,模板参数T,函数模板隐式实例化等

泛型编程 比方说现在要去实现一个通用的交换函数&#xff0c;以我们现在的思路&#xff0c;肯定是通过函数重载去解决。但是这样子的话有几个缺点&#xff1a;重载的函数仅仅是类型不同&#xff0c;代码复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就需要用户自己…

水溶性花菁染料Sulfo-CY7 NHS este标记活性脂Cyanine7-NHS

Sulfo-CY7 NHS ester是一种荧光标记试剂&#xff0c;化学结构为C38H42KN3O10S2&#xff0c;分子量约为803.98 。此外&#xff0c;它的分子中还含有一个N-羟基琥珀酰亚胺酯基团&#xff0c;这个基团可以与生物分子中的氨基结合&#xff0c;从而实现荧光标记。Sulfo-CY7 NHS este…

Moonbeam联合Multichain和AWS Startups正式推出Bear Necessities Hackathon黑客松

我们很高兴宣布Bear Necessities Hackathon正式启动。本次黑客松包含7个挑战&#xff0c;超过7万美金的奖池等你来领&#xff01;我们欢迎所有的BUILDers参加&#xff0c;这是开发者们探索Moonbeam并构建跨链用例的机会&#xff01; 本次黑客松由Moonbeam、Multichain和AWS St…

js原生实现pc端日历组件

业务场景 客户要求日期选择使用pc端的样式&#xff0c;前端在x5平台上&#xff0c;也就是需要用原始html、js、css等实现&#xff0c;笔者使用于 原生javascript封装的PC端日历插件&#xff0c;不依赖任何第三方插件&#xff0c;复制的代码文件较长&#xff0c;可跳到 总结 处…

使用whistle对安卓手机进行调试

注意&#xff1a;手机调试的时候需要与电脑连同一个wifi。 1、安装whistle npm install -g whistle2、运行 whistle w2 start3、打开电脑浏览器 输入 http://10.53.40.72:8899/ &#xff0c;点击二维码&#xff0c;可以生成 rootCA.crt 证书&#xff0c;把它发到手机上&…

mysql8查看锁

一。准备环境 1.登录mysql&#xff0c;设置锁等待时间&#xff0c;然后退出。 mysql> set global innodb_lock_wait_timeout1200; Query OK, 0 rows affected (0.00 sec) 2.再次登录MySQL。打开第一个session 3.登录msyql&#xff0c;打开第二个session a&#xff1a;…

Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布

Rasa 3.x 学习系列-Rasa [3.5.8] -2023-05-12新版本发布 当自定义动作设置的值与槽的现有值相同时&#xff0c;将触发SlotSet事件。修复了这个问题&#xff0c;使AugmentedMemoizationPolicy能够正确地处理截断的跟踪器。 为了恢复以前的行为&#xff0c;自定义操作只有在槽值…

使用VSCode创建第一个ESP-IDF项目

1.在VSCode中安装ESP-IDF: 在 VS Code 中安装 ESP-IDF&#xff1a; 在-VS-Code-中安装-ESP-IDF、新建项目 安装过程中可能会遇到的问题&#xff1a; 解决-pip-安装第三方包时因-SSL-报错_pip-ssl error 在完全使用VSCode安装ESP-IDF环境后&#xff0c;不会存在ESP-IDF Termin…

【利用AI刷面试题】AI:十道Vue面试题巩固一下知识

文章目录 1. 你在Vue中遇到过哪些性能问题&#xff1f;如何优化这些性能问题&#xff1f;2. Vue生命周期钩子函数有哪些&#xff1f;在什么情况下使用它们&#xff1f;3. Vue组件通信方式有哪些&#xff1f;它们各自适用于哪些场景&#xff1f;4. 你了解diff算法吗&#xff1f;…