ConfigMap--kubernetes的“配置中心”_configmaps "kube-proxy" not found-程序员宅基地

技术标签: ConfigMap  Kubernetes  

一、简介

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。
ConfigMap 允许您将配置文件与镜像文件分离,以使容器化的应用程序具有可移植性。

二、创建

2.1 使用 kubectl 创建ConfigMap

格式:

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

map-name 是要分配给 ConfigMap 的名称
data-source 是要从中提取数据的目录,文件或者文字值

数据源对应于 ConfigMap 中的 key-value (键值对)

  • key = 您在命令行上提供的文件名或者密钥
  • value = 您在命令行上提供的文件内容或者文字值

2.1.1 根据目录创建

从同一目录中的多个文件创建 ConfigMap

[root@harbor configmap]# ll
总用量 16
-rw-r-----. 1 root root 2737 6月  29 14:51 base-ms.yml
-rw-r-----. 1 root root 2452 6月  29 16:10 business-ms.yml
-rw-r-----. 1 root root  540 6月  29 14:50 eureka.yml
-rw-r-----. 1 root root 1119 6月  29 14:50 oauth2.yml
[root@harbor configmap]# kubectl create configmap test-configmap --from-file=/opt/configmap/ -n xzzyy-test 
configmap/test-configmap created

查看configmap内容

kubectl describe configmaps -n xzzyy-test test-configmap

输出类似以下内容:

Name:         test-configmap
Namespace:    xzzyy-test
Labels:       <none>
Annotations:  <none>

Data
====
base-ms.yml:
----
cn:
    enableCodeGenerator: true
    enableDruidDBConfig: true
    enableGenerateCode: true
    enableGlobalException: true
    enableTxAdviceInterceptor: true
    ......
business-ms.yml:
----
cn:
    enableCodeGenerator: true
    enableDruidDBConfig: true
    enableGenerateCode: true
    enableGlobalException: true
    enableRequestLogHandler: true
    enableTxAdviceInterceptor: true
    enableAopLog: true
    ......
eureka.yml:
----
server:
    port: 40000
	......
oauth2.yml:
----
eureka:
    client:
        serviceUrl:
            defaultZone: http://root:root@test-eureka-svc:40000/eureka
			.....
Events:  <none>

修改

kubectl edit configmaps -n xzzyy-test test-configmap

删除

kubectl delete configmaps -n xzzyy-test test-configmap

2.1.2 根据文件创建

从单个文件或多个文件创建 ConfigMap

kubectl create configmap test-configmap2 \
	--from-file=/opt/configmap/base-ms.yml \
  	--from-file=/opt/configmap/business-ms.yml \
  	--from-file=/opt/configmap/eureka.yml \
 	--from-file=/opt/configmap/oauth2.yml \
  	-n xzzyy-test 

内容与从目录创建类似,此处不展示了。

2.1.3 根据文字值创建

kubectl create configmap special-config \
  	--from-literal=special.how=very \
  	--from-literal=special.type=charm \

查看内容

[root@harbor opt]# kubectl describe configmaps special-config 
Name:         special-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
special.how:
----
very
special.type:
----
charm
Events:  <none>

2.2 根据生成器创建

自 1.14 开始, kubectl 开始支持 kustomization.yaml。
个人认为这种创建方式不如kubectl简单,此处就不研究了,想继续了解可以参考官网:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/#%E6%A0%B9%E6%8D%AE%E7%94%9F%E6%88%90%E5%99%A8%E5%88%9B%E5%BB%BA-configmap

三、使用

3.1 定义容器的环境变量

3.1.1 使用单个 ConfigMap 中的数据定义容器环境变量

1、在 ConfigMap 中将环境变量定义为键值对:

kubectl create configmap special-config --from-literal=special.how=very

2、将 ConfigMap 中定义的 special.how 值分配给 Pod 的 SPECIAL_LEVEL_KEY 环境变量。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY    # 容器环境变量名称
          valueFrom:
            configMapKeyRef:
              name: special-config   # configmap的名字
              key: special.how       # configmap的key
  restartPolicy: Never

3.1.2 使用来自多个 ConfigMap 的数据定义容器环境变量

1、在 ConfigMap 中将环境变量定义为键值对:

kubectl create configmap special-config --from-literal=special.how=very
kubectl create configmap env-config --from-literal=log_level=INFO

2、将 ConfigMap 中定义的 special.howlog_level值分配给 Pod 中的 SPECIAL_LEVEL_KEYLOG_LEVEL环境变量。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: env-config
              key: log_level
  restartPolicy: Never

3.1.3 将 ConfigMap 中的所有键值对配置为容器环境变量

1、创建一个包含多个键值对的 ConfigMap。

kubectl create configmap special-config-1 \
	--from-literal=SPECIAL_LEVEL=very \
	--from-literal=SPECIAL_TYPE=INFO \
	--from-literal=AUTH=liuli

2、使用 envFrom 将所有 ConfigMap 的数据定义为容器环境变量,ConfigMap 中的键成为 Pod 中的环境变量名称。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config-1
  restartPolicy: Never

3.2 容器 entrypoint 的命令行参数

kubectl create configmap special-config-2 \
	--from-literal=SPECIAL_LEVEL=very \
	--from-literal=SPECIAL_TYPE=INFO \
	--from-literal=AUTH=liuli
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) $(AUTH_KEY)" ]
      args: ["$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) $(AUTH_KEY)"]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config-2
              key: SPECIAL_LEVEL
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config-2
              key: SPECIAL_TYPE
        - name: AUTH_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config-2
              key: AUTH
  restartPolicy: Never

3.3 容器数据卷中生成文件

3.3.1 将 ConfigMap 中键值在容器中生成文件

注意:该操作会清空mountPath/etc/config目录下的内容

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh", "-c", "ls -l /etc/config/" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config-1
  restartPolicy: Never

3.3.2 将 ConfigMap 数据添加到容器中的特定路径

注意:该操作会清空mountPath/etc/config目录下的内容

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox:latest
      command: [ "/bin/sh","-c","cat /etc/config/keys" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config-1
        items:
        - key: SPECIAL_LEVEL
          path: keys
  restartPolicy: Never

四、实例

结合公司项目,我选择了将ConfigMap中的键值通过volumeMounts的方式生成配置文件,供Jar包读取启动。

4.1 创建ConfigMap

配置文件目录

[root@harbor configmap]# ll
总用量 72
-rw-r-----. 1 root root 2731 6月  30 09:50 dev-base-ms.yml
-rw-r-----. 1 root root 2448 6月  30 09:51 dev-business-ms.yml
-rw-r-----. 1 root root 1466 6月  30 09:51 dev-common-ws.yml
-rw-r-----. 1 root root 2972 6月  30 09:52 dev-data-rep-ws.yml
-rw-r-----. 1 root root 2926 6月  30 09:53 dev-doctor-ws.yml
-rw-r-----. 1 root root 2534 6月  30 09:54 dev-esb-ws.yml
-rw-r-----. 1 root root  401 6月  30 09:54 dev-eureka.yml
-rw-r-----. 1 root root 4474 6月  30 09:55 dev-job-web.yml
-rw-r-----. 1 root root 3126 6月  30 09:55 dev-message-ms.yml
-rw-r-----. 1 root root 2276 6月  30 09:56 dev-netty.yml
-rw-r-----. 1 root root 1116 6月  30 09:56 dev-oauth2.yml
-rw-r-----. 1 root root 1421 6月  30 09:57 dev-offline-registration-ms.yml
-rw-r-----. 1 root root 3529 6月  30 09:58 dev-online-registration-ms.yml
-rw-r-----. 1 root root 3250 6月  30 10:00 dev-recommender-ms.yml
-rw-r-----. 1 root root 3965 6月  30 10:00 dev-saas-ws.yml
-rw-r-----. 1 root root 2718 6月  30 10:01 dev-vasc-ms.yml
-rw-r-----. 1 root root 2192 6月  30 10:01 dev-zuul.yml

通过目录生成ConfigMap

[root@harbor configmap]# kubectl create configmap dev-config -n xzzyy-dev --from-file=/opt/config/java/dev/xzzyy/configmap/
configmap/dev-config created

查看

[root@harbor configmap]# kubectl get configmaps -n xzzyy-dev 
NAME         DATA   AGE
dev-config   17     56s

4.2 编写dockerfile文件

以eureka为例

FROM openjdk:8u252-slim-buster
EXPOSE 30000
WORKDIR /my-java
ADD eureka-sever-0.0.1.jar /my-java
CMD ["java","-Xms2048m","-Xmx4096m","-XX:PermSize=256m","-XX:MaxPermSize=512m","-XX:MaxNewSize=512m","-Dfile.encoding=UTF8","-Duser.timezone=GMT+08","-jar","eureka-sever-0.0.1.jar","--spring.config.location=/config/bootstrap.yml"]

4.3 编写deployment文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dev-eureka
  namespace: xzzyy-dev
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: dev-eureka-pod
  template:
    metadata:
      labels:
        app: dev-eureka-pod
    spec:
      restartPolicy: Always
      imagePullSecrets:
      - name: xzzyy-dev-secret
      containers:
      - name: dev-eureka-con
        image: dev-eureka:v1
        imagePullPolicy: Always
        ports:
        - name:
          containerPort: 30000
          protocol: TCP
        volumeMounts:
        - name: config-volume
          mountPath: /config
      volumes:
      - name: config-volume
        configMap:
          name: dev-config
          items:
          - key: dev-eureka.yml
            path: bootstrap.yml
---
apiVersion: v1
kind: Service
metadata:
  name: dev-eureka-svc
  namespace: xzzyy-dev
  labels:
    name: dev-eureka-svc
spec:
  type: NodePort
  selector:
    app: dev-eureka-pod
  ports:
    - protocol: TCP
      port: 30000
      targetPort: 30000
      nodePort: 30000
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39680564/article/details/107019601

智能推荐

已解决(selenium操作火狐浏览器报错)TypeError: __init__() got an unexpected keyword argument ‘firefox_options‘-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏18次。已解决(selenium操作火狐浏览器报错)TypeError: __init__() got an unexpected keyword argument ‘firefox_options‘_typeerror: __init__() got an unexpected keyword argument 'chrome_options

python方差_Python编程:方差、标准差、均方差、均方根值、均方误差、均方根误差...-程序员宅基地

文章浏览阅读315次。python实现代码# -*- coding: utf-8 -*-import mathdef get_average(records):"""平均值"""return sum(records) / len(records)def get_variance(records):"""方差 反映一个数据集的离散程度"""average = get_average(records)return sum(..._pycharm方差计算代码

jmeter接口测试实例(五)对cookies的自动管理,实现登录后修改用户信息_jmeter中post请求如何更改每次的用户名-程序员宅基地

文章浏览阅读902次。一、前提:cookie是保存在本地,用来记录用户信息,最典型的作用是判断用户是否已经登录。如果一个接口,需要用户登录后,才能进行操作,如下,修改用户信息那么这时候,就需要用到cookie去识别这个登录的用户,因为要修改的是这个登录的用户的信息。二、使用1、jmeter.properties 中 将CookieManager.save.cookies 设置为true。完成后重启jmet..._jmeter中post请求如何更改每次的用户名

python新建项目没有venv_pycharm配置venv虚拟环境-程序员宅基地

文章浏览阅读7.5k次,点赞2次,收藏2次。虚拟环境的好处:搭建独立的python运行环境,不与其他产生冲突虚拟环境有助于包的管理和防止版本冲突3.删除卸载方便虚拟环境的搭建:1.进入python的Scripts下,执行:pip3 install virtualenv2.选择建立虚拟环境的文件夹,我这边是直接在D盘software下面创建了一个virtualenv,如图:image.png3.创建虚拟环境:virtualenv --no-s..._pycharm没有venv怎么办

M1芯片的Mac在开发iOS项目时遇到的问题汇总(模拟器无法运行,Cocoapods错误等)_oc cocospods 安装依赖库之后不能使用模拟器了-程序员宅基地

文章浏览阅读2.3k次。--pod install时报错,且错误提示中有“ffi”字眼,提示错误:/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.3/lib/ffi/library.rb:275: [BUG] Bus Error at 0x00000001042fc000 ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.arm64e-darwin20]解决方案:juejin.cn/post/698064…--pod repo upd_oc cocospods 安装依赖库之后不能使用模拟器了

编辑器VSCode使用心得-程序员宅基地

文章浏览阅读540次。工欲善其事必先利其器,趁手的工具会使我们开发事半功倍。市面上的编辑器我用过许多,编辑器使用经历Notepad++,(开源)这个应该是最轻量级的吧,查看代码还好,编辑代码就算了官网地址:https://notepad-plus-plus.org/Brackets,(开源)这个也不错,github-star:30k了,上次发布版本是6月..._vscode nextick

随便推点

西部数码mysql怎么用织梦_[原创]织梦程序(DeDeCms)常见问题集锦-程序员宅基地

文章浏览阅读95次。前言:织梦程序是最知名的cms程序,使用广泛,但很多朋友对织梦还不太熟悉,通过工单分析得知,经常容易出现本文中的问题,本次统一整理出来,希望对新手朋友有帮助,本文写的非常详细,请仔细阅读,一、描述:“dedecms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错”如图:分析:用织梦程序制作的站点做迁移服务器后容易出现这个问题,原因是程序中设置的数据库连接信息有误连接不到数据库,解决方..._西部数码支不支持织梦的程序

免安装mysql启动3534错误处理_mysql 免安装版本启动时 3534出错_mysql-程序员宅基地

文章浏览阅读295次。上午在win7下安装MYSQL,只到“net start mysql”这一步报错:3534的错误:于是在百度中搜索关键字“mysql服务无法启动3534”。参考以下两个链接中的方法,解决了3534启动失败的问题:mysql服务无法启动3534错误。http://jingyan.baidu.com/article/219f4bf7e978fcde442d38a9.htmlhttp://blog.cs..._免安装mysql启动失败

评测了10款画流程图软件,这4款最好用!(完全免费)_好用的流程图软件免费-程序员宅基地

文章浏览阅读5.1w次,点赞58次,收藏295次。最近在做项目和复习的时候,用了不少流程图软件给我帮了大忙,所以今天就来分享分享你在网上搜索一下流程图软件,能找到很多很多:但这些软件多数并不是专门绘制流程图的软件,它可能是一些思维导图软件、或者说一些产品交互原型图软件,使用时或多或少有些麻烦。而且,普遍这些软件缺点也很多,比如:只有在线版:ProcessOn(https://www.processon.com)导出功能收费:迅捷流程图软件体积庞大:VISIO就没有一款简单易用、绿色免费的流程图软件吗?阿虚花了不少时间,挨着_好用的流程图软件免费

在CentOS6.9安装Azkaban3.50.0_centos6.9 azkaban-程序员宅基地

文章浏览阅读1.4k次。cd /data/install_pkgwget https://github.com/azkaban/azkaban/archive/3.50.0.tar.gztar -zxvf 3.50.0.tar.gzvi /data/install_pkg/azkaban-3.50.0/azkaban-common/src/main/java/azkaban/utils/EmailMessage..._centos6.9 azkaban

Java项目基于ssm+vue.js的学生宿舍维修服务平台附带文章和源代码设计说明文档ppt-程序员宅基地

文章浏览阅读586次,点赞23次,收藏30次。博主介绍:CSDN特邀作者、985计算机专业毕业、某互联网大厂高级全栈开发程序员、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序、前端、python等技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导、面试辅导、简历修改。精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐。

ultralytics的YOLOv8改为自用版本_from ultralytics.utils.plotting import annotator, -程序员宅基地

文章浏览阅读944次。由于需要用pyqt给yolov8做一个界面,而ultralytics一层嵌一层,不是很好用,所以对它的这个源码进行精简,具体代码我放到了这里,ultralytics使用的版本是8.0.54。具体代码如下,需要根据自己的情况来修改data的配置文件以及权值文件,在代码的49和50行。_from ultralytics.utils.plotting import annotator, colors, save_one_box modul

推荐文章

热门文章

相关标签