k8s-configmap

Kubernetes - Configmap热更新原理 GitHub地址: https://github.com/QingyaFan/container-cloud/issues/2 Kubernetes中提供configmap,用来管理应用的配置,configmap具备热更新的能力,但只有通过目录挂载的configmap才具备热更新能力,其余通过环境变量,通过subPath挂载的文件都不能动态更新。这篇文章里我们来看看configmap热更新的原理,... 阅读详情

k8s-configmap

一.目的

把应用的代码和配置分开,通过配置configmap管理pod,一种统一的集群配置管理方案。
ConfigMap API资源提供了将配置数据注入容器的方式,同时保持容器是不知道Kubernetes的。ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制等对象。

二.基本原理

ConfigMap是存储通用的配置变量的。ConfigMap有点儿像一个统一的配置文件,使用户可以将分布式系统中用于不同模块的环境变量统一到一个对象中管理;而它与配置文件的区别在于它是存在集群的“环境”中的,并且支持K8s集群中所有通用的操作调用方式。

而资源的使用者可以通过ConfigMap来存储这个资源的配置,这样需要访问这个资源的应用就可以同通过ConfigMap来引用这个资源。相当通过创建Configmap封装资源配置。

configmap以一个或者多个key:value的形式保存在k8s系统中供应用使用,既可以用于表示一个变量的值(eg.apploglevel:info),也可以用于表示一个完整配置文件的内容(eg: server.xml=<?xml...>...)
可以通过yaml配置文件或者直接用kubectl create configmap 命令行的方式来创建 ConfigMap。

三.ConfigMap 配置

可以通过建立ConfigMap来支持应用从环境变量和包含配置数据的文件读取信息,如下面例子了展示了configMap如何获得这两种配置的。

图片.png


data 一栏包括了配置数据。就如同你们看到的那样,ConfigMap可以被用来保存单个属性,也可以用来保存一个配置文件。

1.kubectl 命令行方式创建

(1) 从目录中创建
该目录中已经存在一些配置文件,而且目录中所有的文件都将作为configMap中的数据,一个文件为一个data。
key的名字为文件的名字,value为文件的内容。
kubectl create configmap game-config --from-file=/opt/configmap/file/

[root@master file]# ls
game.properties  ui.properties
[root@master file]# kubectl  create configmap game-config --from-file=/opt/configmap/file/
[root@master file]# kubectl  describe configmap game-config
Name:        game-config
Namespace:    default
Labels:        <none>
Annotations:    <none>

Data
====
game.properties:    158 bytes
ui.properties:        83 bytes

通过kubectl get configmap game-config -o yaml 可以看到value的值。
(2) 从文件中创建

[root@master file]# kubectl create configmap game-config2 --from-file=/opt/configmap/file/game.properties --from-file=/opt/configmap/file/ui.properties
[root@master file]# kubectl  describe configmap game-config2
Name:        game-config2
Namespace:    default
Labels:        <none>
Annotations:    <none>

Data
====
game.properties:    158 bytes
ui.properties:        83 bytes

(3) 从文本中创建,直接指定key的名字

[root@master file]# kubectl create  configmap game-config-3 --from-file=game-special-key=/opt/configmap/file/game.properties
[root@master file]# kubectl  describe configmap game-config-3
Name:        game-config-3
Namespace:    default
Labels:        <none>
Annotations:    <none>

Data
====
game-special-key:    158 bytes

(4) 从文字值(literal values)中创建

[root@master yaml]# kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
[root@master yaml]# kubectl get configmaps special-config -o yaml
apiVersion: v1
data:
  special.how: very
  special.type: charm
kind: ConfigMap
metadata:
  creationTimestamp: 2017-03-02T15:28:29Z
  name: special-config
  namespace: default
  resourceVersion: "128440"
  selfLink: /api/v1/namespaces/default/configmaps/special-config
  uid: e30d9c0f-ff5c-11e6-9929-000c29962b4f
[root@master yaml]# kubectl  describe configmap special-config
Name:        special-config
Namespace:    default
Labels:        <none>
Annotations:    <none>

Data
====
special.how:    4 bytes
special.type:    5 bytes

2.yaml文件方式创建

例子1

apiVersion: v1
kind: ConfigMap
metadata:
  name: special
  namespace: default
data:
  special.how: very
  special.type: charm

例子2

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-config
data:
  example.property.1: hello
  example.property.2: world
  example.property.file: |-
    property.1=value-1
    property.2=value-2
    property.3=value-3
[root@master yaml]# kubectl  describe configmap example-config
Name:        example-config
Namespace:    default
Labels:        <none>
Annotations:    <none>

Data
====
example.property.1:    5 bytes
example.property.2:    5 bytes
example.property.file:    56 bytes

例子3

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-serverxml
data:
  key-serverxml: |
    <?xml version='1.0' encoding='utf-8'?>
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>

      <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />

          </Host>
        </Engine>
      </Service>
    </Server>

四. ConfigMap的使用

ConfigMap供容器使用的典型用法如下:

1.生成为容器内的环境变量。
2.设置容器启动命令的启动参数(需设置为环境变量)
3.以Volume的形式挂载为容器内部的文件或者目录

(1)通过环境变量获取定义好的ConfigMap 中的内容。

apiVersion: v1
kind: ConfigMap
metadata:
  name: appvars
data:
  apploglevel: info
  appdatadir: /var/data
apiVersion: v1
kind: Pod
metadata:
  name: cm-test-pod
spec:
  containers:
  - name: cm-test
    image: test-registry:5000/busybox
    imagePullPolicy: IfNotPresent
    command: [ "/bin/sh", "-c", "env | grep APP" ]
    env:
    - name: APPLOGLEVEL
      valueFrom:
        configMapKeyRef:
          name: appvars
          key: apploglevel
    - name: APPDATADIR
      valueFrom:
        configMapKeyRef:
          name: appvars
          key: appdatadir
  restartPolicy: Never

通过kubectl logs cm-test-pod 可以看到pod曾经执行过的结果.

[root@master ~]# kubectl  logs  cm-test-pod
APPDATADIR=/var/data
APPLOGLEVEL=info

(2) 通过volume挂载的方式将configmap中的内容挂载为容器内部的文件或目录.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-appconfigfiles
data:
  key-serverxml: |
    <?xml version='1.0' encoding='utf-8'?>
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>

      <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                   resourceName="UserDatabase"/>
          </Realm>
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                   prefix="localhost_access_log" suffix=".txt"
                   pattern="%h %l %u %t "%r" %s %b" />

          </Host>
        </Engine>
      </Service>
    </Server>
  key-loggingproperties: "handlers
    = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler,
    3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler,
    java.util.logging.ConsoleHandler\r\n\r\n.handlers = 1catalina.org.apache.juli.FileHandler,
    java.util.logging.ConsoleHandler\r\n\r\n1catalina.org.apache.juli.FileHandler.level
    = FINE\r\n1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs\r\n1catalina.org.apache.juli.FileHandler.prefix
    = catalina.\r\n\r\n2localhost.org.apache.juli.FileHandler.level = FINE\r\n2localhost.org.apache.juli.FileHandler.directory
    = ${catalina.base}/logs\r\n2localhost.org.apache.juli.FileHandler.prefix = localhost.\r\n\r\n3manager.org.apache.juli.FileHandler.level
    = FINE\r\n3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs\r\n3manager.org.apache.juli.FileHandler.prefix
    = manager.\r\n\r\n4host-manager.org.apache.juli.FileHandler.level = FINE\r\n4host-manager.org.apache.juli.FileHandler.directory
    = ${catalina.base}/logs\r\n4host-manager.org.apache.juli.FileHandler.prefix =
    host-manager.\r\n\r\njava.util.logging.ConsoleHandler.level = FINE\r\njava.util.logging.ConsoleHandler.formatter
    = java.util.logging.SimpleFormatter\r\n\r\n\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].level
    = INFO\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers
    = 2localhost.org.apache.juli.FileHandler\r\n\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level
    = INFO\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers
    = 3manager.org.apache.juli.FileHandler\r\n\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level
    = INFO\r\norg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers
    = 4host-manager.org.apache.juli.FileHandler\r\n\r\n"
apiVersion: v1
kind: Pod
metadata:
  name: cm-test-app
spec:
  containers:
  - name: cm-test-app
    image:  test-registry:5000/tomcat
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: serverxml
      mountPath: /configfiles
  volumes:
  - name: serverxml
    configMap:
      name: cm-appconfigfiles
      items:
      - key: key-serverxml
        path: server.xml
      - key: key-loggingproperties
        path: logging.properties
[root@master volume]# kubectl  exec -it cm-test-app /bin/bash
root@cm-test-app:/usr/local/tomcat# cd /configfiles/
root@cm-test-app:/configfiles# ls
logging.properties  server.xml

(3).设置容器启动命令的启动参数

apiVersion: v1
kind: ConfigMap
metadata:
  name: var
  namespace: default
data:
  special.how: very
  special.type: charm
apiVersion: v1
kind: Pod
metadata:
  name: var-test
spec:
  containers:
    - name: test-container
      image: test-registry:5000/busybox
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: var
              key: special.how
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: var
              key: special.type
  restartPolicy: Never
[root@master var]# kubectl  logs var-test
very charm

五. ConfigMap修改

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-demo
  namespace: default
data:
  index.html: |
      Hello Everyone
apiVersion: v1
kind: ReplicationController
metadata:
  name: configmap-demo2
spec:
  template:
    metadata:
      labels:
        app: configmap-demo2
    spec:
      containers:
        - name: configmap-demo2
          image: test-registry:5000/nginx
          ports:
            - containerPort: 80
          volumeMounts:
          - name: config-volume
            mountPath: /usr/share/nginx/html/
      volumes:
        - name: config-volume
          configMap:
            name: configmap-demo
[root@master change]# curl http://172.25.2.2:80
Hello Everyone

修改

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-demo
  namespace: default
data:
  index.html: |
      Hello World!
[root@master change]# kubectl  replace -f k8s-configmap.yaml
[root@master change]# curl http://172.25.2.2:80
Hello World!

修改configmap会有延时,要过一段时间容器的配置才会发生变化。

参考:
https://kubernetes.io/docs/user-guide/configmap/
https://segmentfault.com/a/1190000004940306
https://github.com/thrawn01/configmap-microservice-demo

分类: kubernetes

K8S配置管理中心Configmap实现微服务配置 ConfigMap是Kubernetes中的一个API对象,主要用于存储非机密性的配置数据。 阅读详情

相关推荐

05-k8s当中的ConfigMap资源

ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中;应用场景:主要是对应用程序的配置;pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源;

2302_79199605的博客 1371

K8s configMap原理介绍

给容器内应用程序传递参数的实现方式:   1. 将配置文件直接打包到镜像中,但这种方式不推荐使用,因为修改配置不够灵活。   2. 通过定义Pod清单时,指定自定义命令行参数,即设定 args:["命令参数"],这种也    可在启动Pod时,传参来修改Pod的应用程序的配置文件.   3. 使用...

weixin_30681121的博客 411

Kubernetes K8S之存储ConfigMap详解

K8S之存储ConfigMap概述与说明,并详解常用ConfigMap示例

踏歌行的专栏 4994

【Kubernetes 011】ConfigMap原理和实际操作详解

相信很多朋友都听说过配置中心这种东西,应用在运行的时候会从配置中心读取不同环境的配置信息,以达到相同的应用在不同环境运行的目的。这种低耦合的应用运行方式也在k8s中得到了应用。这一节我们就来学习k8s中的配置中心:ConfigMap。 我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。 文章目录ConfigMap生成ConfigMap根据文件或者文件夹生成ConfigMap根据yaml文件或命令行生成ConfigMap容器使用Co

T型人小付的博客 2026

(k8s)kubernetes中ConfigMap和Secret

ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。使用时,Pod可以将其用作环境变量、命令行参数或存储卷中的配置文件。ConfigMap将你的环境配置信息和容器镜像解耦,便于应用配置的修改。注意:ConfigMap并不提供保密或加密功能。如果你想存储的数据是机密性的,请使用Secret,或者使用其他第三方工具来保存你的数据的私密性,而不是用ConfigMap。

Richardlygo的博客 1409

spring-cloud-kubernetes自动同步k8s的configmap更新

以上就是实战工程的所有代码了,仅仅只是引入了少量jar依赖,以及在启动配置文件中指定了configmap的信息和同步模式,即完成了获取配置文件的所有操作,至于代码中用到配置文件的地方,和使用SpringCloud Config并无差别。以上就是开启自动更新的步骤了,您基于上一章的源码做上述更改即可,也可以随同本文一起重新开发一个全新应用,来实现获取configmap的配置,并且实时同步configmap的变化;#更新配置信息的模式:polling是主动拉取,event是事件通知。

2401_89317758的博客 832

k8s基础(7)—Kubernetes-ConfigMap

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时,

dghfttgv的博客 1370

kubernetes》》k8s》》ConfigMap 、Secret

ConfigMap是一种 API 对象,使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap将配置和Pod解耦,更易于配置文件的更改和管理。ConfigMap 并不提供保密或者加密功能。如果你想存储的数据是机密的,请使用Secret。

Kaizen的博客 782

Kubernetes(k8s)ConfigMap详解及应用

文章目录一、ConfigMap概述二、ConfigMap创建1)通过命令行创建configmap(key-value键值对)2)通过文件创建configmap3)通过文件夹创建configmap4)通过yaml文件创建三、ConfigMap简单使用1)用作环境变量2)用作命令行参数3)使用volume将ConfigMap作为文件或目录直接挂载 一、ConfigMap概述 ConfigMap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用

匠人精神,持之以恒! 6589

【Kubernetes】k8s ConfigMap

本文出自:kubernetes-入门指南.pdf 看书笔记,仅供自己学习。应用程序的运行可能会依赖一些配置,而这些配置又是可能会随着需求产生变化的,如果我们的应用程序架构不是应用和配置分离的,那么就会存在当我们需要去修改某些配置项的属性时需要重新构建镜像文件的窘境。现在,ConfigMap组件可以很好的帮助我们实现应用和配置分离,避免因为修改配置项而重新构建镜像。ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

九师兄 158

Android 11系统定制:如何彻底隐藏状态栏电池图标(RK3568实测)

本文详细解析了在Android 11系统上如何通过多维度修改实现状态栏电池图标的彻底隐藏,特别针对RK3568平台提供了实战指南。从系统UI架构解析到核心配置文件修改,再到进阶技巧与疑难排查,帮助开发者深度定制Android系统,满足特定场景需求。

weixin_29250573的博客 377

k8s 配置管理中心Configmap详解

在Kubernetes(K8s)集群中,ConfigMap作为一种重要的资源对象,扮演着配置管理中心的角色。本文旨在深入剖析ConfigMap的概念、用途、操作方式以及最佳实践,帮助读者更好地理解和应用这一功能强大的配置管理工具。

博客虽小,世界尽在其中 3396

银河麒麟服务器(ky10 server)arm、x86安装qemu虚拟机

接下来就可以新建服务器了。

zengliguang的专栏 8714

spring-cloud-kubernetes与k8s的configmap

spring-cloud-kubernetes-config是spring-cloud-kubernetes框架下的一个库,用于将kubernetes的configmap作为配置文件,提供给springboot应用

程序员欣宸的博客 8653

解决屏幕不亮难题:慷智SerDes DE信号极性配置避坑指南

本文深入探讨了基于慷智AIM95x系列SerDes芯片的嵌入式显示系统开发中,因DE信号极性配置不匹配导致屏幕不亮的典型故障。文章详细解析了DE信号的核心作用与极性定义,提供了慷智SerDes芯片中DE极性寄存器的具体配置方法与调试记录,并给出了从隔离问题、对比时序到波形验证的系统性排查流程,帮助工程师快速定位并解决此类隐蔽问题。

weixin_29185493的博客 143

【Arduino 101】五分钟搞懂PID控制算法

【Arduino 101】五分钟搞懂PID控制算法物料清单尺寸接线 文章目录物料清单尺寸接线 物料清单 Arduino Uno x 1 超声波模块(HC-SR04)x 1 舵机(Tower Pro MG996R)x 1 舵机供电: 5V 稳压管(LM7805) x 1 , 滤波电容 (0.33uF, 0.1uF) x 2, 9V 电池 x 1 滑轨:泡沫板 支架:乐高 滚动物体:胶带(Up试过网球,但是测距模块的表现不理想) 尺寸 接线 ...

机器人工坊 1万+

基于 Readme.md 编写交互式组件文档:react-styleguidist 分节示例中的样式继承与 Playground 实战

在 react-styleguidist 中,组件的使用说明主要写在组件目录下的 `Readme.md`(或与组件同名的 `.md` 文件)中,其中的 `jsx` 代码块会被自动编译成可实时编辑、实时预览的交互式 Playground。本文以仓库内 `examples/sections` 示例里的 Label 组件为例,逐层讲解「一段四行 Readme 如何变成文档页面」「示例如何继承全局样式」「

gitblog_00694的博客 923

STM32F407用FSMC+DMA驱动LVGL,3.5寸屏流畅度翻倍实战(附CubeMX配置避坑)

本文详细介绍了如何在STM32F407上通过FSMC+DMA驱动LVGL,显著提升3.5寸屏的显示流畅度。从FSMC与DMA的配置原理到LVGL驱动层适配,提供了完整的优化方案和实测数据,帮助开发者解决界面卡顿问题,实现流畅度翻倍的效果。

weixin_30872499的博客 559

kubernetes(k8s) ConfigMap实战

目录前言实战从本地文件创建ConfigMap程序镜像Deployment配置文件运行程序查看配置文件修改配置小结 前言 ConfigMap将配置和容器分离,容器外挂配置,当有变更时,改动ConfigMap,便可以全局生效。相当于一个配置中心的角色。 下面我将以一个简单的Java应用为例,部署运行。利用ConfigMap把配置外挂进来。看下会有什么效果。 实战 从本地文件创建ConfigMap 创建ConfigMap的方式,推荐从本地文件创建而不是直接命令,这样好维护些。 我们先建立applic

愤怒的苹果ext的博客 2200

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

《Python星球日记》 第73天:情感分析与主题建模

《Python星球日记》 第73天:情感分析与主题建模,今天我们将探索两个自然语言处理领域的重要技术:情感分析和主题建模。这两项技术在社交媒体分析、用户反馈处理、市场研究等多个领域有着广泛应用。

Code_流苏:在代码中寻诗意,在实践中觅真知 919

k8s mysql 配置文件_kubernetes之配置mysql的configmap

一.简单说明我们在运行一个mysql服务时,mysql服务有两类重要的数据,一个是存储的数据、另一个是存储的配置文件。存储数据这里我们可以使用挂载PVC来实现持久化存储,配置文件这里我们如果实现和容器的解耦,可以采用configmap来实现。二.ConfigMap介绍2.1 ConfigMap作用和使用场景ConfigMap用于保存配置数据,以键值对的形式存储ConfigMap资源提供了向Pod注...

weixin_42181929的博客 896

npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org的解决方案

本文主要介绍了npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org 的解决方案,希望能对使用npm的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 6万+
上一篇: kubernetes学习4--资源配额管理(租户配额)
下一篇: 分别测试使用 ConfigMap 挂载 Env 和 Volume 的情况。
王树民
博客等级 码龄10年 912粉丝 560原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值