Kubernetes学习之ConfigMap

kubectl获取命名空间下所有configmap集合的方法 此方法比较高级,你可以创建一个自定义的Go模板来精确控制哪些字段会被展示。下面是一个例子,获取所有命名空间下的ConfigMap但会忽略和在上述命令中,---metadata:data:{{- end }}{{- end }}此模板文件迭代所有ConfigMap对象,只包含名称、命名空间以及数据字段。注意,模板语法可能根据你想要显示的确切内容和格式有所不同。这样导出的会有些强迫症,还是不太推荐! 阅读详情

一、认识ConfigMap资源
  在分布式环境中,基于负载、容错等需求的考虑,几乎所有的服务器都需要在不同的机器上分别部署不止一个实例。随着程序功能的日益复杂,同时配置文件的修改频率通常远远大于代码本身,这种情况下,有时仅仅是一个配置内容的修改,就不得不重新进行代码提交、打包、分发上线的流程。部署模式较大的场景中,分发上线工作即繁杂又沉重。
  究其根本,所有的这些麻烦都是由于配置和代码在管理和发布过程中紧密耦合所致。配置本身源于代码,是为了提高代码的灵活性而提取出来的一些经常变化的或需要定制的内容,而正是配置的这种天生的变化特征为部署过程带来了不小的麻烦,也最终催生了分布式系统配置管理系统,从而将配置内容从代码完全分离出来,及时可靠高效的提供配置访问和更新服务。
  作为分布式系统的Kubernetes也提供了统一配置管理方案–ConfigMap。Kubernetes基于ConfigMap对象实现了将配置文件从容器镜像中解耦,从而增强了容器应用的可移植性。简单来说,一个ConfigMap对象就是一系列配置数据的集合,这些数据可"注入"到Pod对象中,并为容器应用所使用,注入方式有挂载为存储卷和传递为环境变量两种。
  ConfigMap对象将配置数据以键值对的形式进行存储,这些数据可以在Pod对象中使用或者为系统组件提供配置,例如控制器对象等。不过,无论应用程序如何使用ConfigMap对象中的数据,用户都完全可以通过在不同的环境中创建名称相同但是内容不同的ConfigMap对象,从而为不同环境中同一功能的Pod资源提供不同的配置信息,实现应用于配置的灵活勾兑。
在这里插入图片描述

二、创建ConfigMap
  Kubernetes的不少资源既可以使用kubelet create命令创建,也可以使用清单创建,例如namespace。ConfigMap是另一个两种创建方式都可以常见的资源。而且,通过使用"kubectl create configmap"命令,用户可以根据目录、文件或直接值创建ConfigMap对象,命令语法格式如下所示:

kubectl create configmap <map-name> <data-source>

.
  其中,<map-name>即为ConfigMap对象的名称,而<data-source>是数据源,它可以通过直接值、文件或目录来获取。无论是哪一种数据源供给方式,它都要转换为ConfigMap对象中的Key-Value数据,其中Key由用户在命令行给出或者是文件数据源的文件名,它仅能由数字、字母、连接号和点号组成,而Value则是直接值或文件数据源的内容。

1)利用直接值创建
  为"kubelet create configmap"命令使用"--from-literal"选项可在命令行直接给出键值对来创建ConfigMap对象,重复使用此选项则可以传递多个键值对。命令格式如下:

kubelet create configmap configmap_name --from-literal=key-name-1=value-1

例如,下面的命令创建了一个名为special-config时传递了两个键值对:

]# kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
configmap/special-config created

查看ConfigMap对象的详细信息:

]# kubectl get configmap -o wide 
NAME                 DATA   AGE
special-config       2      8s

]# kubectl get configmap special-config -o yaml
apiVersion: v1
data:
  special.how: very
  special.type: charm
kind: ConfigMap
metadata:
  creationTimestamp: "2020-08-30T07:39:16Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:special.how: {}
        f:special.type: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T07:39:16Z"
  name: special-config
  namespace: default
  resourceVersion: "6456083"
  selfLink: /api/v1/namespaces/default/configmaps/special-config
  uid: 6d5f473b-bd99-49eb-9729-00fac9dd8642

2)基于文件创建
  为"kubectl create configmap"命令使用"--from-file"选项即可基于文件内容来创建ConfigMap对象,它的命令格式如下。可以重复多次使用"--from-file"选项以传递多个文件内容:

kubectl create configmap <configmap_name> --from-file=<path-to-file>

例如,下面的命令可以把事先准备好的Nginx配置文件模板保存于ConfigMap对象nginx-config中:

]# kubectl create configmap nginx-conf --from-file=/etc/nginx/nginx.conf.default
configmap/nginx-conf created

查看ConfigMap资源对象详细信息:

]# kubectl get configmap nginx-conf -o yaml 
apiVersion: v1
data:
  nginx.conf.default: |2
  
    worker_processes  1;


    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        sendfile        on;
        keepalive_timeout  65;

        server {
            listen       80;
            server_name  localhost;

            location / {
                root   html;
                index  index.html index.htm;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2020-08-30T07:47:58Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:nginx.conf.default: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T07:47:58Z"
  name: nginx-conf
  namespace: default
  resourceVersion: "6457570"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-conf
  uid: a485c228-2a05-43cb-a5b1-87a40a40958b

3)基于目录创建
  如果配置文件数量较多且存储于有限的目录中时,kubelet还提供了基于目录直接将多个文件分别收纳为键值数据的ConfigMap资源创建方式。将"–from-file"选项后面所跟的路径指向一个目录路径就能将目录下的所有文件一同创建于同一ConfigMap资源中,命令格式如下:

]# kubectl create configmap nginx-conf-files --from-file=/data/nginx/
configmap/nginx-conf-files created

查看ConfigMap资源详细信息:

]# kubectl get configmap nginx-conf-files -o yaml 
apiVersion: v1
data:
  myserver-1.conf: |
    worker_processes  1;



    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        sendfile        on;
        keepalive_timeout  65;


        server {
            listen       80;
            server_name  localhost;


            location / {
                root   html;
                index  index.html index.htm;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }

        }
    }
  myserver-2.conf: |
    worker_processes  1;



    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        sendfile        on;
        keepalive_timeout  65;


        server {
            listen       80;
            server_name  localhost;


            location / {
                root   html;
                index  index.html index.htm;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }

        }
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2020-08-30T07:58:17Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:myserver-1.conf: {}
        f:myserver-2.conf: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T07:58:17Z"
  name: nginx-conf-files
  namespace: default
  resourceVersion: "6459321"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-conf-files
  uid: 5a1075a3-e427-4a8c-a9df-1e2f23385b8e

4)使用清单创建ConfigMap
  基于配置文件创建ConfigMap资源时,它所使用的字段包括通常的apiVersion、kind和metadata字段,以及用于存储数据的关键字字段"data"。例如,如下配置资源清单文件:

]# cat my-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-demo
  namespace: default
data:
  log_level: INFO
  log_file: /var/log/test.log

]# kubectl apply -f my-configmap.yaml 
configmap/configmap-demo created

查看ConfigMap资源对象:

]# kubectl get configmap -o wide 
NAME                 DATA   AGE
configmap-demo       2      10s

]# kubectl describe configmap configmap-demo 
Name:         configmap-demo
Namespace:    default
Labels:       <none>
Annotations:  
Data
====
log_file:
----
/var/log/test.log
log_level:
----
INFO
Events:  <none>

三、在Pod中使用ConfigMap资源
  Pod资源的环境变量值的获取方式之一包括引用ConfigMap对象中的数据,这一点通过在env中为valueFrom内嵌configMapKeyRef对象即可实现,其使用格式如下:

valueFrom:
  configMapKeyRef:
    key:
    name:
      optional:

.
  其中,字段name的值为要引用的ConfigMap对象的名称,字段key可用于指定要引用ConfigMap对象中某键的键名,而字段optional则用于为当前Pod资源指明引用是否为可选的。此类环境变量的使用方式与直接定义的环境变量并无区别,它们可被用于容器的启动脚本或直接传递给容器应用等。

1)编写Pod与ConfigMap资源的yaml文件

]# cat configmap-demo.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: busybox-http-config
  namespace: default
data:
  http_port: "8080"
  verbose_level: "-vv"

---
apiVersion: v1
kind: Pod
metadata:
  name: configmap-env-demo
  namespace: default
spec:
  containers:
  - name: busybox-httpd
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/httpd"]
    args: ["-f","-p","$(HTTPD_PORT)","$(HTTPD_LOG_VERBOSE)"]
    env:
    - name: HTTPD_PORT
      valueFrom: 
        configMapKeyRef:
          name: busybox-http-config
          key: http_port
    - name: HTTPD_LOG_VERBOSE
      valueFrom:
        configMapKeyRef:
          name: busybox-http-config
          key: verbose_level
          optional: true

]# kubectl apply -f configmap-demo.yaml 
configmap/busybox-http-config created
pod/configmap-env-demo created

2)查看ConfigMap和Pod资源信息

]# kubectl get configmap busybox-http-config -o yaml 
apiVersion: v1
data:
  http_port: "8080"
  verbose_level: -vv
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"http_port":"8080","verbose_level":"-vv"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"busybox-http-config","namespace":"default"}}
  creationTimestamp: "2020-08-30T08:20:23Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:http_port: {}
        f:verbose_level: {}
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
    manager: kubectl
    operation: Update
    time: "2020-08-30T08:20:23Z"
  name: busybox-http-config
  namespace: default
  resourceVersion: "6463086"
  selfLink: /api/v1/namespaces/default/configmaps/busybox-http-config
  uid: 741b6ced-919a-4ff8-ae37-eecfd376a643

]# kubectl get pods -o wide 
NAME                 READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
configmap-env-demo   1/1     Running   0          3s    10.244.1.116   node1   <none>           <none>

]# kubectl describe pods configmap-env-demo 
Name:         configmap-env-demo
Namespace:    default
Priority:     0
Node:         node1/172.16.2.101
Start Time:   Mon, 31 Aug 2020 16:23:53 +0800
Labels:       <none>
Annotations:  Status:  Running
IP:           10.244.1.116
IPs:
  IP:  10.244.1.116
Containers:
  busybox-httpd:
    Container ID:  docker://dcb784ac9c189c847a75d06d8917a5eec672280ba1708a1652bbbdf8a7553219
    Image:         busybox
    Image ID:      docker-pullable://busybox@sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/httpd
    Args:
      -f
      -p
      $(HTTPD_PORT)
      $(HTTPD_LOG_VERBOSE)
    State:          Running
      Started:      Mon, 31 Aug 2020 16:23:54 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      HTTPD_PORT:         <set to the key 'http_port' of config map 'busybox-http-config'>      Optional: false
      HTTPD_LOG_VERBOSE:  <set to the key 'verbose_level' of config map 'busybox-http-config'>  Optional: true
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-47pch (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-47pch:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-47pch
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/configmap-env-demo to node1
  Normal  Pulled     <invalid>  kubelet, node1     Container image "busybox" already present on machine
  Normal  Created    <invalid>  kubelet, node1     Created container busybox-httpd
  Normal  Started    <invalid>  kubelet, node1     Started container busybox-httpd

可以看到当前Pod已经成功使用了ConfigMap资源中的数据

3)验证Pod信息

]# kubectl exec -it configmap-env-demo -- ps aux 
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/httpd -f -p 8080 -vv
    6 root      0:00 ps aux

.
  创建ConfigMap资源的Pod对象时,被引用的资源必须事先存在,否则将无法启动相应的容器,直到被依赖的资源创建完成为止。不过,那些未引用不存在的ConfigMap资源的容器将不受此影响。另外,ConfigMap是名称空间级别的资源,它必须与引用它的Pod资源在同一个空间中。

四、ConfigMap存储卷
  若ConfigMap对象中的键值来源于较长的文件内容,那么使用环境变量将其导入会使得变量值占据过多的内存空间而且不易处理。这类数据通常用于为容器应用提供配置文件,因此使得将其内容直接作为文件进行引用方式为较好的选择。其实现方式是,在定义Pod资源时,将此类ConfigMap对象配置为ConfigMap类型的存储卷,而后由容器将其挂载至特定的挂载点后直接访问。

1)挂载整个存储卷
  关联为Pod资源的存储卷时,ConfigMap对象中的每个键都对应的表现为一个文件,键名转换为文件名,而键值则为相应文件的内容,即便是通过直接创建的键值数据,也一样表现为文件视图。挂载于容器之上,由键值数据表现出的文件位于挂载点目录中,容器中的进程可直接读取这些文件的内容。
  配置Pod资源时,基于存储卷的方式引用ConfigMap对象的方法也非常简单,仅需要指明存储卷名称及要引用的ConfigMap的对象名称即可。

]# cat configmap-volume.yaml 
apiVersion: v1
kind: Pod
metadata: 
  name: configmap-volume-demo
  namespace: default
spec:
  containers:
  - name: nginx-server
    image: nginx:alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: ngxconfig
      mountPath: /data/
      readOnly: true
  volumes:
    - name: ngxconfig
      configMap:
        name: nginx-conf-files

]# kubectl apply -f configmap-volume.yaml 
pod/configmap-volume-demo created

查看Pod资源详细信息:

]# kubectl get pods  -o wide 
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
configmap-volume-demo   1/1     Running   0          11s   10.244.1.123   node1   <none>           <none>

]# kubectl describe pods configmap-volume-demo 
Name:         configmap-volume-demo
Namespace:    default
Priority:     0
Node:         node1/172.16.2.101
Start Time:   Mon, 31 Aug 2020 17:08:30 +0800
Labels:       <none>
Annotations:  Status:  Running
IP:           10.244.1.123
IPs:
  IP:  10.244.1.123
Containers:
  nginx-server:
    Container ID:   docker://f32e43cc784d89bc6b547ff7d21a54c252d9bf3d0a328327065e5b83401aefde
    Image:          nginx:alpine
    Image ID:       docker-pullable://nginx@sha256:a97eb9ecc708c8aa715ccfb5e9338f5456e4b65575daf304f108301f3b497314
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Mon, 31 Aug 2020 17:08:31 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /data/ from ngxconfig (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-47pch (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  ngxconfig:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      nginx-conf-files
    Optional:  false
  default-token-47pch:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-47pch
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/configmap-volume-demo to node1
  Normal  Pulled     <invalid>  kubelet, node1     Container image "nginx:alpine" already present on machine
  Normal  Created    <invalid>  kubelet, node1     Created container nginx-server
  Normal  Started    <invalid>  kubelet, node1     Started container nginx-server

查看Pod中的配置文件是否存在:

]# kubectl exec -it configmap-volume-demo ls  -- /data/
myserver-1.conf  myserver-2.conf

2)挂载存储卷中的部分键值
  有的时候,用户很可能不期望在容器中挂载某个ConfigMap存储卷后于挂载点目录导出所有的文件,这在通过一个ConfigMap对象为单个Pod资源中的多个容器分别提供配置时尤其常见;所以ConfigMap存储卷也允许我们通过指定的字段来挂载特定的ConfigMap资源对象中的部分键值。

]# cat configmap-volume2.yaml 
apiVersion: v1
kind: Pod
metadata: 
  name: configmap-volume-demo
  namespace: default
spec:
  containers:
  - name: nginx-server
    image: nginx:alpine
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: ngxconfig
      mountPath: /data/
      readOnly: true
  volumes:
    - name: ngxconfig
      configMap:
        name: nginx-conf-files
        items:
        - key: myserver-1.conf
          path: myserver-1.conf
          mode: 0644

]# kubectl apply -f configmap-volume2.yaml 
pod/configmap-volume-demo created

查看Pod资源详细信息:

]# kubectl get pods -o wide 
NAME                    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
configmap-volume-demo   1/1     Running   0          9s    10.244.1.124   node1   <none>           <none>

]# kubectl describe pods configmap-volume-demo 
Name:         configmap-volume-demo
Namespace:    default
Priority:     0
Node:         node1/172.16.2.101
Start Time:   Mon, 31 Aug 2020 17:17:51 +0800
Labels:       <none>
Annotations:  Status:  Running
IP:           10.244.1.124
IPs:
  IP:  10.244.1.124
Containers:
  nginx-server:
    Container ID:   docker://b7c88eba8c2f5c5a4bc6b025187bed9e5e3c3ab28ef544cd65310e08e0e6ad8f
    Image:          nginx:alpine
    Image ID:       docker-pullable://nginx@sha256:a97eb9ecc708c8aa715ccfb5e9338f5456e4b65575daf304f108301f3b497314
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Mon, 31 Aug 2020 17:17:52 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /data/ from ngxconfig (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-47pch (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  ngxconfig:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      nginx-conf-files
    Optional:  false
  default-token-47pch:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-47pch
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age        From               Message
  ----    ------     ----       ----               -------
  Normal  Scheduled  <unknown>  default-scheduler  Successfully assigned default/configmap-volume-demo to node1
  Normal  Pulled     <invalid>  kubelet, node1     Container image "nginx:alpine" already present on machine
  Normal  Created    <invalid>  kubelet, node1     Created container nginx-server
  Normal  Started    <invalid>  kubelet, node1     Started container nginx-server

验证ConfigMap资源是否已挂载:

]# kubectl exec -it configmap-volume-demo -- ls /data/
myserver-1.conf

使用ConfigMap资源的注意事项:
  1)以存储卷方式引用的ConfigMap必须先于Pod存在,除非在Pod中将它们全部标记为"optional",否则将会导致Pod无法正常启动的错误;同样,即使存在ConfigMap,在引用的键不存在时,也会导致一样的错误。
  2)当以环境变量方式注入的ConfigMap中的键不存在时会被忽略,Pod可以正常启动,但错误引用的信息会以"InvalidVariableNames"事件记录于日志中。
  3)ConfigMap是名称空间级别的资源,因此,引用它的Pod必须处于同一名称空间中。
  4)kubelet不支持引用Kubernetes API Server上不存在的ConfigMap资源,这包括那些通过kubelet的"–manifest-url"或"–config"选项,以及kubectl REST API创建的Pod。

k8s学习-ConfigMap(创建、使用、更新、删除等)_使用 helm 更新 configmap 使用 envFrom 将所有 ConfigMap 的数据定义为容器环境变量,ConfigMap 中的键成为 Pod 中的环境变量名称。**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~可以看到刚才的文件中的键值对确实成为了Pod中的环境变量。如果你想挂载的目录下有其他的目录或文件,可以使用这种方式。 阅读详情

相关推荐

K8S学习指南(18)-k8s核心对象configmap

Kubernetes(简称K8s)是当今最流行的容器编排系统之一,用于管理和编排容器化应用程序。在Kubernetes中,ConfigMap是一个核心对象,用于将配置数据与应用程序分离,提高应用的可移植性和可维护性。本文将深入探讨ConfigMap的概念、用途以及通过详细的示例演示如何使用ConfigMap。ConfigMap是Kubernetes中的一种资源对象,用于存储非机密性的配置数据,例如键值对、配置文件等。

俞兆鹏的博客 3358

k8s configmap 详解

ConfigMap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:生成为容器内的环境变量;设置容器启动命令的启动参数(需设置为环境变量)以Volume的形式挂载为容器内部的文件或目录。

魏志标的博客 5956

S32DS IDE调试技巧:如何用Attach功能高效定位汽车电子MCU的Bootloader问题

本文详细介绍了在汽车电子MCU开发中,如何利用S32DS IDE的Attach调试模式高效定位Bootloader与应用程序的协同问题。通过对比常规调试与Attach模式的本质差异,并深入讲解工程配置、镜像合并及实战调试流程,帮助开发者在不复位、不重新下载程序的前提下,实时分析系统状态,快速解决内存映射冲突、中断向量表重定向等疑难杂症。

weixin_29168393的博客 268

总结:k8s之ConfigMap

一、介绍 ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。如果需要存储加密信息时可以使用Secret对象。 创建ConfigMap的方式有4种: 通过直接在命令行中指定configmap参数创建,即--from-literal 通过指定文件创建,即将一个配置文件创建为一个ConfigMap--from-file=<文件> 通过指定目录创建,

w2009211777的专栏 5955

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6558

深入解析NRF52832安全DFU Bootloader实现机制与蓝牙OTA升级流程

本文深入解析了NRF52832芯片安全DFU Bootloader的实现机制与蓝牙OTA升级流程。详细阐述了Bootloader的核心概念、双区升级策略、源码初始化流程以及蓝牙DFU服务的数据传输协议,并提供了从环境搭建、密钥生成到编译烧录、生成升级包的完整实战指南,帮助开发者构建安全可靠的无线固件更新系统。

weixin_29188043的博客 490

kubernetes—ConfigMap 与 Secret

1. Secret 是一种包含少量敏感信息,例如密码、token 或 key 的对象这样的信息可能会被放在Pod spec 中或者镜像中;将其放在一个secret 对象中可以更好地控制它的用途,并降低意外暴露的风险2.ConfigMap 主要解决配置文件的存储问题,而Secret 主要用来解决密码、token、秘钥等敏感数据①在创建、查看和编辑Pod的流程中Secret 暴露风险较小②系统会对Secret 对象采取额外的预防措施,例如避免将其写入磁盘中可能的位置③。

qq_41619571的博客 2887

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 601

【Kubernetes实战】(二十)数据存储 ConfigMap

ConfigMap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的。特点:动态更新(定时更新),明文存储(describe可看到信息)三、ConfigMap使用。

604

STM32H743必要外围电路分析

写在前面:这篇博客是我第一次绘制STM32最小系统板的过程记录。 2020-1-11 BOOT STM32采用ARM内核,和ARM处理器一样,都有专门的boot脚决定单片机从何处启动。 在官方数据手册的第105页,我们可以看到 系统复位后,在SYSTICK的第四个上升沿锁存BOOT引脚的值,复位后,BOOT引脚可以由用户自由配置而不会影响系统正常运行。 BOOT引脚决定了自举存储器地址,当BO...

Cui_Hongwei的博客 1万+

MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载)

目录 MQTT(一)C#使用 MQTTnet 快速实现 MQTT 通信(文末有完整Demo下载) MQTT(二)在windows64位上安装Python环境 MQTT(三)Python客户端+net客户端+net服务端 简单通信 MQTT(四)树莓派开机自动运行Python客户端 MQTT(五)EMQ开源MQTT消息服务器 1 什么是 MQTT ? MQTT(Message Que...

pw的博客 10万+

K8S学习笔记之Kubernetes 配置管理 ConfigMap

0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用到 k8s 的另外一种资源,那就是 ConfigMap。 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。而...

dengxiangbao3167的博客 253

ThingsBoard教程(十六):RPC部件的使用

前言 各位读者好,截止目前,ThingsBoard系列文章已经做了十篇,分别是 ThingsBoard教程(一):ThingBoard介绍及安装 ThingsBoard教程(二):租户,租户配置,部件组模块的使用 ThingsBoard教程(三):系统设置模块的使用 ThingsBoard教程(四):规则链简介与操作 ThingsBoard教程(五):客户,资产管理 ThingsBoard教程(六):设备管理 ThingsBoard教程(七):模拟设备遥测 ThingsBoard教程(八):自定义UI T

知无涯 4580

Kubernetes 学习笔记(七)--- K8S存储卷、ConfigMap、Secrets

目录 emptyDir gitRepo hostPath nfs pvc 1. 配置NFS共享存储: 2. 创建PV 3. 定义PVC,并使用 accessModes <[]string> 存储类(StorageClass) configmap 1. 通过命令行创建ConfigMap 2. 通过yaml文件创建ConfigMap ...

yshir 937

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

服务器时不时的会发送短信说你服务器有病毒,找到了这个tmp文件,删除了之后又有了。确实是有很多人就这么无聊,每天都攻击你的服务器。找了很久的原因,网上也提供了一大堆方法,但都是很简陋的答案,具体怎么操作并没有说。没办法只能自己去排查这个问题。从两个角度来考虑,第一是服务器系统问题,比如宝塔的漏洞。但一时半会看不出问题来。只能去排查自己的项目代码。最后了解到代码确实是存在漏洞的。但代码中也确实了很多的校验,为什么会存在漏洞了?这就不得不从上传的过程开始说起。

guiplan 1497

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kubernetes(k8s) 学习 (八) k8s 存储之 ConfigMap( 4种创建方式+3种使用方式+热更新)

文章目录configmap简介创建ConfigMap的方式使用字面值创建使用文件创建使用目录创建编写configmap的yaml文件如何使用configmap使用configmap设置环境变量普通格式envfrom格式使用conigmap设置命令行参数通过数据卷使用configmapconfigmap热更新使用ConfigMap的限制条件 configmap简介 在生产环境中经常会遇到需要修改配置...

weixin_45649763的博客 2698

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

k8s学习-ConfigMap(创建、使用、更新、删除等)_使用 helm 更新 configmap(1)

从 Kubernetes 1.23 版本开始,kubectl 支持多次指定 --from-env-file 参数来从多个数据源创建 ConfigMap。使用 envFrom 将所有 ConfigMap 的数据定义为容器环境变量,ConfigMap 中的键成为 Pod 中的环境变量名称。还有通过生成器和字面值创建configmap,由于一般配置比较多,还是使用目录或文件更方便,这里就不展示了。可以看到刚才的文件中的键值对确实成为了Pod中的环境变量。如果你想挂载的目录下有其他的目录或文件,可以使用这种方式。

2401_83946570的博客 523

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

云原生|kubernetes|关于configMap的一些学习

【代码】云原生|kubernetes|关于configMap的一些学习。

zsk_john的技术分享专用博客 860

K8S系列学习之ConfigMap实战

Kubernetes学习路上的那些事儿,很有必要分享出来 什么是ConfigMap 官网上给出了一系列使用ConfigMap的实例,可以点击链接进行查看:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/ 简单的说,ConfigMap主要是配合k8s集群实现配置参数加载和业务容器运行分离的,对于开发和运维技术人员来说,“解耦”是个福音。因为难免配置参数发生变动,如果..

tianyangqi的专栏 642

K8s(Kubernetes)学习(七)——k8s持久化存储:emptyDir、local、nfs、PV&&PVC静态供给&动态供给、configMap、secret

在 Kubernetes 中,ConfigMap 是一种用于存储非敏感信息的 Kubernetes 对象。它用于存储配置数据,如键值对、整个配置文件或 JSON 数据等。ConfigMap 通常用于容器镜像中的配置文件、命令行参数和环境变量等。环境变量注入:将配置数据注入到 Pod 中的容器环境变量中。配置文件注入:将配置数据注入到 Pod 中的容器文件系统中,容器可以读取这些文件。命令行参数注入:将配置数据注入到容器的命令行参数中。基本操作。

Pistachiout的学习博客 876

k8s cm ( ConfigMap ) 学习

ka get cm ka describe configmap cm名称 或 ka describe cm cm名称 Kubernetes—配置管理ConfigMap

喝醉酒的小白 4152

k8s学习(十一)使用configmap

ConfigMap 资源对象使用key-value形式的键值对来配置数据,这些数据可以在Pod里面使用 1、定义configmap的yaml kind: ConfigMap apiVersion: v1 metadata: name: config-demo namespace: default data: data.1: hello data.2: world redis...

文若书生的专栏 1111

k8s学习--ConfigMap详细解释与应用

简单理解kubernetes集群可以使用ConfigMap来实现对容器中应用的配置进行管理(就是可以把一些应用的conf文件内容写到里面)。可以把ConfigMap看作是一个挂载到pod中的存储卷详细解释在 Kubernetes 中,ConfigMap 是一种 API 对象,用于存储非机密数据(如配置文件、环境变量、命令行参数等)。ConfigMap 允许您将应用程序的配置与容器化的应用程序分开管理,从而实现配置的灵活和动态管理。ConfigMap 的核心概念Key-Value 存储。

lwxvgdv的博客 5206

k8s学习(十四)ConfigMap的使用

目录前言一、创建ConfigMap二、使用ConfigMap 前言 ConfigMap组件可以实现应用和配置分离,避免因为修改配置项而重新构建镜像。 ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置 文件。 一、创建ConfigMap 1、从字符串创建 [root@k8s-master k8s]# kubectl create configmap config-string --from-literal=testKey=testValue configmap..

码易的博客 2198
上一篇: Kubernetes学习之PV、PVC
下一篇: Kubernetes学习之Secret
Micky_Yang
博客等级 码龄8年 58粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值