首页 > 其他分享 >Kubernetes-ConfigMap详解

Kubernetes-ConfigMap详解

时间:2024-05-23 11:12:05浏览次数:19  
标签:ConfigMap cm name Kubernetes kubectl yaml 详解 pod config

简介:

一、ComfigMap的创建

1.使用目录创建

2.使用文件创建

3.使用命令行创建

二、Pod中使用ConfigMap

1.使用ConfigMap代替环境变量

2.使用ConfigMap设置命令行参数

3.使用ConfigMap用做数据卷插件

三、ConfigMap的热更新

简介:
ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制等对象。

一、ComfigMap的创建
1.使用目录创建
mkdir configmap
#创建configmap的目录,目录下创建文件,基于这个目录创建configmap

vim game.file
version=1.17
name=dave
age=18

vim ui.properties
level=2
color=yellow
kubectl create configmap game-config --from-file=../configmap/
#基于configmap目录创建名为game-config的configmap。
#--from-file指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容
2.使用文件创建
kubectl create configmap game-config-2 --from-file=./game.file
#基于文件创建
#--from-file这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的。
kubectl get cm
#configmap的简称是cm


kubectl get cm game-config -o yaml
#以yaml格式查看名为game-config的cm


kubectl describe cm game-config
#查看cm的详细信息


3.使用命令行创建
kubectl create configmap literal-config --from-literal=name=dave --from-literal=password=pass
#创建的类型为configmap,configmap的名字为literal-config,名字为name,值是dave,名字为password,值为pass

kubectl get configmaps literal-config -o yaml
#查看创建的cm
二、Pod中使用ConfigMap
1.使用ConfigMap代替环境变量
vim configmap-literal.yaml
#创建configmap的yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
name: literal-config
namespace: default
data:
name: dave
password: pass

kubectl apply -f configmap-literal.yaml
#基于yaml文件运行configmap
vim configmap-env.yaml
#创建yaml文件

apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
og_level: INFO

kubectl apply -f configmap-env.yaml
#基于yaml文件运行configmap
vim configmap-pod.yaml
#创建pod使用cm的yaml文件

apiVersion: v1
kind: Pod
metadata:
name: cm-env-test-pod
spec:
containers:
- name: test-container
image: centos:7.9.2009
command: [ "/bin/sh", "-c", "env" ]
env:
- name: USERNAME #创建一个环境变量的名字
valueFrom: #来源
configMapKeyRef: #来源于configMapKeyRef
name: literal-config #来自于上面创建的literal-config
key: name #来自于name字段
- name: PASSWORD
valueFrom:
configMapKeyRef:
name: literal-config
key: password
envFrom: #使用envFrom字段可以将env-config中的所有键值对作为环境变量导入到Pod中
- configMapRef:
name: env-config
restartPolicy: Never
kubectl create -f configmap-pod.yaml
#根据yaml文件创建pod

kubectl get pod


kubectl logs cm-env-test-pod
#查看pod的日志


2.使用ConfigMap设置命令行参数
vim cm-command-dapi-test-pod

apiVersion: v1
kind: Pod
metadata:
name: cm-command-dapi-test-pod
spec:
containers:
- name: test-container
image: centos:7.9.2009
command: [ "/bin/sh", "-c", "echo $(USERNAME) $(PASSWORD)" ]
env:
- name: USERNAME
valueFrom:
configMapKeyRef:
name: literal-config
key: name
- name: PASSWORD
valueFrom:
configMapKeyRef:
name: literal-config
key: password
restartPolicy: Never

kubectl create -f cm-command-dapi-test-pod

kubectl get pod


kubectl logs cm-command-dapi-test-pod


3.使用ConfigMap用做数据卷插件
vim cm-volume-test-pod

apiVersion: v1
kind: Pod
metadata:
name: cm-volume-test-pod
spec:
containers:
- name: test-container
image: centos:7.9.2009
command: [ "/bin/sh","-c","tailf /var/log/yum.log" ] #持久化运行,使容器保持运行,不会退出。
volumeMounts: #挂载volume卷
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume #卷的名字叫config-volume
configMap: #基于configMap提供的
name: literal-config #基于名字为literal-config的configMap提供的
restartPolicy: Never


kubectl apply -f cm-volume-test-pod

kubectl get pod


kubectl exec -it cm-volume-test-pod -- /bin/bash
#进入pod内的容器,这里pod内只有一个容器,如果pod内有多个容器,需要-c指定容器名。
#进入容器后,执行下列命令,查看挂载的volume卷的信息。


#为什么这里这么设计,因为这里支持热更新

#什么叫热更新呢,就是我现在把configmap的对象改变的话,这里的内容也会变化,

#注意:这里不是共享,这是注入。

如果共享过多的话,会造成过多的资源损耗

注入的话就不会有这个问题,先注入10个pod,这10个pod注入以后,再注入下10pod

#什么叫注入,cat这个文件,重定向到你的目录下,这叫注入。

三、ConfigMap的热更新
vim hot-update.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: log-config
namespace: default
data:
log_level: INFO
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hot-update
spec:
replicas: 2
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: log-config

kubectl create -f hot-update.yaml


kubectl get cm
#查看刚刚创建的名为log-config的cm。


开第二个终端

while 2>1;do kubectl exec hot-update-5f9f99b44f-sm7kf -- cat /etc/config/log_level;sleep 1s;date;done
#观察信息


终端1:

kubectl edit cm log-config
#修改data里的键值INFO为log_level:ERROR
#annotations:里面的INFO为ERROR


终端2查看变化

 

kubectl get deployment hot-update -o yaml
#查看yaml文件

kubectl patch deployment hot-update --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20190411" }}}}}'
#更新版本

kubectl get deployment hot-update -o yaml
#再次查看yaml文件


kubectl get pod
#pod已更新

 


kubectl patch deployment hot-update --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20190412" }}}}}'
#修改版本号的会再一次触发更新
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_73562288/article/details/135403096

标签:ConfigMap,cm,name,Kubernetes,kubectl,yaml,详解,pod,config
From: https://www.cnblogs.com/gaoyanbing/p/18207907

相关文章

  • JSP九大内置对象详解
    *JSP九大内置对象详解*JSP内置对象(9个内置对象):1.PageContextjavax.servlet.jsp.PageContextJSP的页面容器2.requestjavax.servlet.http.HttpServletrequest获取用户的请求信息3.responsejavax.servlet.http.HttpServletResponse服务器向客户端的回应信息4.sessionj......
  • WPF插件之 - PropertyChanged.Fody使用详解
    总目录文章目录总目录一、PropertyChanged.Fody是什么?二、PropertyChanged.Fody的安装三、PropertyChanged.Fody的功能1.特性1实现属性通知的功能2通知其他属性4不进行属性通知3指定属性更改时将调用的方法5设置当前属性依赖的属性6不检查是否相等7DoNotSetChangedAttribu......
  • k8s(pod)详解
    一:Pod介绍pod资源的各种配置和原理关于很多yaml文件的编写,都是基于配置引出来的1:pod的结构和定义 每个Pod中都可以包含一个或者多个容器,这些容器可以分为2大类:1:用户所在的容器,数量可多可少(用户容器)2:pause容器,这是每个pod都会有的一个跟容器,作用有2个1、......
  • k8s——pod的资源配置文件详解(manifest)
    pod的资源配置文件(manifest)详细介绍pod的资源配置文件(mannifest)的各个字段的含义元数据字段是否必须类型含义由用户提供备注name必须strpod的名称用户提供在同一个namspace中唯一labels不必须map[str]str用户自主标识的k/y键值对由用户提供多用于ser......
  • kubernetes——资源管理
    Kubernetes资源管理介绍kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在pod中,而kubernetes一般也不会直接管理pod,而是通过pod控制器来管理pod的。pod可以提供服务之后,就要考虑如何访......
  • Kubernetes集群中配置Ingress支持HTTPS访问(一):cfssl
    目录一.系统环境二.前言三.对称加密和非对称加密简介四.什么是HTTPS五.Ingress简介六.配置ingress对外发布服务6.1安装NGINXingresscontroller控制器6.2创建pod6.3为pod创建svc服务6.4使用ingress发布服务6.5访问服务6.5.1使用Linux客户端来访问服务6.5.2使用Windows客户......
  • EasyMR 基于国产化信创的适配实践技术详解
    国产化信创,即采用国产信息技术产品和服务,构建自主可控的信息技术体系。近年来,随着国家对网络安全和信息安全的重视程度不断提高,国产化信创已经成为国家战略的重要组成部分,并呈现出以下大趋势:●政策驱动,加速发展国家出台了一系列政策法规,大力支持国产化信创产业发展。例如,《“十......
  • TCP图文详解到底什么是三次握手四次挥手
    为什么会有TCP/IP协议在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把......
  • NumPy 随机数据分布与 Seaborn 可视化详解
    随机数据分布什么是数据分布?数据分布是指数据集中所有可能值出现的频率,并用概率来表示。它描述了数据取值的可能性。在统计学和数据科学中,数据分布是分析数据的重要基础。NumPy中的随机分布NumPy的random模块提供了多种方法来生成服从不同分布的随机数。生成离散分布随......
  • Kubernetes 数据存储:从理论到实践的全面指南
    本文深入解析Kubernetes(K8S)数据存储机制,探讨其架构、管理策略及最佳实践。文章详细介绍了K8S数据存储的基础、架构组成、存储卷管理技巧,并通过具体案例阐述如何高效、安全地管理数据存储,同时展望了未来技术趋势。关注【TechLeadCloud】,分享互联网架构、云服务技术的全......