首页 > 其他分享 >每天一点基础K8S--K8S中的configmap

每天一点基础K8S--K8S中的configmap

时间:2022-12-27 21:11:34浏览次数:40  
标签:node configmap -- worker version master K8S root

ConfigMap

1、背景

为了将配置数据和代码解耦,可以将变化的配置文件单独保存为configmap,而不用每次都修改代码。

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。

ConfigMap 的名字必须是一个合法的 DNS 子域名

2、configMap的实际使用场景

1、将配置信息和镜像解耦,以便实现镜像的可移植性和可复用;

2、在微服务场景下,可能存在多个服务公用配置文件的情况。此时可以通过configMap实现配置共享。

3、configMap配置文件的创建

# 1、通过yaml文件创建
[root@master-worker-node-1 configmap]# cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-configmap
immutable: true   # 不可被修改
data:
  VERSION: v1.1.0
  password: 1qaz@WSX
  
# 2、通过文件创建
[root@master-worker-node-1 configmap]# cat version.txt 
v2.2.0
[root@master-worker-node-1 configmap]# kubectl create configmap version-configmap --from-file=./version.txt 
configmap/version-configmap created

[root@master-worker-node-1 configmap]# kubectl create configmap mysql-password --from-literal=PASS=123456
configmap/mysql-password created

# 3、通过命令行创建
[root@master-worker-node-1 configmap]# kubectl create configmap mysql-password --from-literal=PASS=123456
configmap/mysql-password created

# 4、将目录制作为configmap
[root@master-worker-node-1 configmap]# tree ./test-dir/
./test-dir/
├── version-3
└── version-4

0 directories, 2 files
[root@master-worker-node-1 configmap]# kubectl create configmap test-dir --from-file=./test-dir/
configmap/test-dir created
[root@master-worker-node-1 configmap]# kubectl apply -f configmap.yaml 
configmap/test-configmap created

# 查看configmap
[root@master-worker-node-1 configmap]# kubectl get configmap 
NAME                DATA   AGE
kube-root-ca.crt    1      32d
test-configmap      2      21h
version-configmap   1      82s
[root@master-worker-node-1 configmap]# 

# [root@master-worker-node-1 configmap]# kubectl describe configmap test-configmap
Name:         test-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
VERSION:
----
v1.1.0
password:
----
1qaz@WSX

BinaryData
====

Events:  <none>

[root@master-worker-node-1 configmap]# kubectl describe configmap version-configmap 
Name:         version-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
version.txt:
----
v2.2.0

4、ConfigMap的使用

可以使用四种方式来使用 ConfigMap 配置 Pod 中的容器:

1. 在容器命令和参数内
2. 容器的环境变量
3. 在只读卷里面添加一个文件,让应用来读取
4. 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap
4.1 使用env.valueFrom.configMapKeyRef通过环境变量引入
[root@master-worker-node-1 configmap]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      imagePullPolicy: IfNotPresent
      env:
            - name: version # pod内,env的名称
          valueFrom:
            configMapKeyRef:
              name: test-configmap  # configmap的name
              key: VERSION       # configmap对应的key
        - name: pass
          valueFrom:
            configMapKeyRef:
              name: test-configmap
              key: password

# 创建pod
[root@master-worker-node-1 configmap]# kubectl apply -f pod.yaml 
pod/nginx created

# 查看pod的env情况
[root@master-worker-node-1 configmap]# kubectl get pods 
NAME                              READY   STATUS    RESTARTS        AGE
nfs-provisioner-9f9fc45fd-l4f6l   1/1     Running   2 (2d20h ago)   3d20h
nginx                             1/1     Running   0               3s
[root@master-worker-node-1 configmap]# kubectl exec -it nginx -- env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx
NGINX_VERSION=1.23.2
NJS_VERSION=0.7.7
PKG_RELEASE=1~bullseye
version=v1.1.0
pass=1qaz@WSX
4.2 使用 envFrom.configMapRef 通过环境变量引入
[root@master-worker-node-1 configmap]# cat pod-2.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-2
spec:
  containers:
    - name: nginx-2
      image: nginx
      imagePullPolicy: IfNotPresent
      envFrom:
        - configMapRef:
              name: test-configmap
              
# 创建
[root@master-worker-node-1 configmap]# kubectl apply -f pod-2.yaml 
pod/nginx-2 created

[root@master-worker-node-1 configmap]# kubectl get pods -o wide nginx-2
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE                 NOMINATED NODE   READINESS GATES
nginx-2   1/1     Running   0          53s   10.244.54.15   only-worker-node-4   <none>           <none>
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-2 -- env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx-2
NGINX_VERSION=1.23.2
NJS_VERSION=0.7.7
PKG_RELEASE=1~bullseye
VERSION=v1.1.0
password=1qaz@WSX
4.3 将configmap做成volume,挂载到pod中使用
[root@master-worker-node-1 configmap]# cat pod-3.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-3
spec:
  containers:
    - name: nginx-3
      image: nginx
      imagePullPolicy: IfNotPresent
      volumeMounts:
      - name: test-volume-configmap
        mountPath: /mnt
        readOnly: true
  volumes:
  - name: test-volume-configmap
    configMap:
      name: test-version
[root@master-worker-node-1 configmap]# kubectl apply -f pod-3.yaml 
pod/nginx-3 created

[root@master-worker-node-1 configmap]# kubectl get pods -o wide nginx-3
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE                 NOMINATED NODE   READINESS GATES
nginx-3   1/1     Running   0          65s   10.244.31.35   only-worker-node-3   <none>           <none>

[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- ls -l /mnt
total 0
lrwxrwxrwx. 1 root root 14 Dec 27 12:46 version -> ..data/version


[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- sh 
# ls -l /mnt 
total 0
lrwxrwxrwx. 1 root root 14 Dec 27 12:46 version -> ..data/version
# cat /mnt/version
v2.2.0

5、configMap在线更新

[root@master-worker-node-1 configmap]# kubectl patch configmaps test-version -p '{"data":{"version":"v22.22.22"}}'
configmap/test-version patched

[root@master-worker-node-1 configmap]# kubectl patch configmaps test-version -p '{"data":{"version":"v22.22.22"}}'
configmap/test-version patched
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v2.2.0
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v2.2.0
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v2.2.0
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v2.2.0
[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v22.22.22[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 
v22.22.22[root@master-worker-node-1 configmap]# kubectl exec -it nginx-3 -- cat /mnt/version 

# 等待一段时间后,configmap完成自动更新。具体等待多久,与缓存有关。

6、小结

1、configmap是以明文的形式将配置信息给pod内使用的办法。它的大小有限,不能超过1Mi

2、可以将文件、目录等多种形式做成configmap,并且通过env或者volume的形式供pod内使用。

3、configmap可以在线更新,但是需要一定时间间隔

标签:node,configmap,--,worker,version,master,K8S,root
From: https://www.cnblogs.com/woshinidaye123/p/17009013.html

相关文章

  • 反射
    反射执行指定的方法publicvoidreflectTest()throwsException{Classclazz=Class.forName("com.jlpay.mng.agent.demo.AddAgent");Methodp......
  • 微服务网关解决方案调研和使用总结 专题
    一.什么是网关1.1什么是网关APIGateway(APIGW/API网关),顾名思义,是出现在系统边界上的一个面向API的、串行集中式的强管控服务,这里的边界是企业IT系统的边界,可以理解为​......
  • CORS 实战 专题
    本文会代码层面对CORS问题进行剖析CORS相关相关概念可参考 ERRORinfo:XMLHttpRequestcannotloadhttp://localhost:8080/jsonp/scene1/user/1.No'Access-Control-Allo......
  • 分布式架构中的 无状态 专题
     服务的无状态性,即:-服务端不保存任何客户端请求者信息-客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份带来的好处是什么呢?•客户端请求不依赖服务端的......
  • 基于微服务API级权限的技术架构
    一般而言,企业内部一套成熟的权限系统,都是基于角色(Role)的访问控制方法(RBAC–RoleBasedAccessControl),即权限(Permission)与角色相关联,用户(User)通过成为适当角色的成员而......
  • 明解入门练习5-4
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#defineABC5intmain(){intx;inta[ABC];for(x=0;x<ABC;x++){printf("a[%d]:",x);sc......
  • SD-WAN可靠性设计解决方案
    随着信息技术的快速发展和普及,企业对信息的依赖程度越来越高。网络作为信息传输的载体,企业对其可靠性的要求也越来越高,而建立一个可靠的网络系统是一项复杂且艰巨的工作。网......
  • 关于cas-client单点登录客户端拦截请求和忽略/排除不需要拦截的请求URL的问题(不需要修
     前言:今天在网上无意间看到cas单点登录排除请求的问题,发现很多人在讨论如何通过改写AuthenticationFilter类来实现忽略/排除请求URL的功能;突发奇想搜了一下,还真蛮多人都是......
  • .NET 在云原生时代的蜕变,让我在云时代脱颖而出
    .NET生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展。有了开源和跨平台这两个关键优先事项,我们就可以放心了。云原生对应用运行时的不同需求,说明一个.......
  • 中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名
    2019.11.9的中国.NET开发者峰会将在上海举办,到目前为止,大会的主题基本确定,这两天就会和大家会面,很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了......