K8S ConfigMap使用
k8s系列文章:
configmap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下场景:
- 使用k8s部署应用,当你将应用配置写进代码中,就会存在一个问题,更新配置时也需要打包镜像,configmap可以将配置信息和docker镜像解耦。
- 使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。
其次,configmap可以用来保存单个属性,也可以用来保存配置文件。
创建
你可以通过命令kubectl create configmap -h帮助信息查看具体的创建。
configmap有三种常见创建方式:
**1. 通过yaml / json文件创建(推荐) **
这种是我比较推荐的方式,创建configmap.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-conf
namespace: test
data:
test-conf: |+
SESSION_LIFETIME: 3600
URL: "http://test-server:8080"
执行命令:
kubectl create -f configmap.yaml
若报错:"namespace 'test' not found",则需要先创建namespace:
kubectl create namespace test
2. 通过--from-file
分别指定单个文件和目录,指定目录可以创建一个包含该目录中所有文件的configmap:
kubectl create configmap *** --from-file=/path
将--from-file指定为单个文件就可以从单个文件中创建:
kubectl create configmap *** --from-file=file1
其中,--from-file可以使用多次,比如:
kubectl create configmap *** --from-file=file1 --from-file=file2
3. . 通过key-value字符串创建
kubectl create configmap *** --from-literal=config1=123 --from-literal=config2=234
4. 通过env文件创建
通过环境文件创建:
kubectl create configmap *** --from-env-file=env.txt
其中,env.txt的文件格式为:
config1=***
config2=***
当使用多个--from-env-file从多个数据源创建configmap时,仅最后一个env文件有效。
查看
可以使用以下命令查看创建成功的configmap:
| 命令 | 说明 |
|---|---|
| kubectl get configmaps | 查看所有configmap |
| kubectl get configmaps -n namespace1 | 查看命名空间为namespace1的所有configmap |
| kubectl describe configmaps configmap1 | 查看configmap1的详细信息 |
| kubectl get configmaps configmap1 -o yaml | 以yaml文件形式展示configmap详细信息 |
使用
configmap创建成功之后,如何在pod中使用呢?有以下几种方法:
注意
使用ConfigMap有以下几个限制条件:
- ConfigMap必须在pod之前创建
- configmap受namespace的限制,只能相同namespace的pod才可以引用
env
通过环境变量获取ConfigMap中的内容。
首先创建configmap:
kubectl create configmap test-config --from-literal=env_model=prd -n test
接下来用作环境变量,创建pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: test
spec:
containers:
- name: test-container
image: test:v0.1
env:
- name: TEST-CONF
valueFrom:
configMapKeyRef:
name: test-config
key: env_model
执行命令创建Pod:
kubectl create -f pod.yaml
创建成功之后,执行命令查看pod的详细信息,可以看到已经将configmap中的配置添加到环境变量:
kubectl describe pod test-pod -n test
同时,也支持多个configmap共同创建环境变量。
volume
通过Volume挂载的方式将ConfigMap中的内容挂载为容器内部的文件或目录,这是我平时用的较多的方式。
接下来使用最开始创建的test-conf为例说明,将configmap挂载到特定目录,并保存为指定文件:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: test
spec:
containers:
- name: test-container
image: test:v0.1
volumeMounts:
- name: test-volume
mountpath: /app/config
volumes:
- name: test-volume
configMap:
name:test-conf
items:
- key: test-conf
path: config.yaml
以上。
K8S ConfigMap使用的更多相关文章
- .NET Core 使用 K8S ConfigMap的正确姿势
背景 ASP.NET Core默认的配置文件定义在appsetings.json和appsettings.{Environment}.json文件中. 这里面有一个问题就是,在使用容器部署时,每次修改 ...
- K8s configMap原理介绍
给容器内应用程序传递参数的实现方式: 1. 将配置文件直接打包到镜像中,但这种方式不推荐使用,因为修改配置不够灵活. 2. 通过定义Pod清单时,指定自定义命令行参数,即设定 args:[" ...
- 5.1.k8s.ConfigMap
ConfigMap #ConfigMap用于保存配置数据的键值对,可用来保存单个属性,或配置文件 #ConfigMap创建 #使用yaml文件创建ConfigMap #cm-demo.yaml kin ...
- k8s configmap 挂载配置文件
转自https://blog.csdn.net/weixin_34102807/article/details/85965725 1.新建ConfigMap apiVersion: v1 kind: ...
- 深入探究 K8S ConfigMap 和 Secret
ConfigMap 1.什么是 ConfigMap? ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,配置对象存储在 Etcd 中,配置的形式可以是完整的配置文件.key/v ...
- ASP.NET Core on K8S深入学习(9)Secret & Configmap
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.Secret 1.1 关于Secret 在应用启动过程中需要一些敏感信息, ...
- 虚拟化原理到K8s实践经验路线总结
以下这些内容均为自行学习总结的内容,很多内容没有写概括介绍,看起来可能会有些突兀,但并不影响整体性,我自己的学习经验告诉我,这些内容还仅仅是最精简的核心部分,周边还有很多可扩展内容,主要是操作系统生态 ...
- K8S conul部署
官网有Helm方式的安装文档(https://www.consul.io/docs/platform/k8s/index.html) 一,准备工作: 1,k8s环境 2,nfs服务器 二,创建PV n ...
- configmap使用-完整的configmap文档
转发 https://www.jianshu.com/p/cf3e2218f283 转发 https://www.kubernetes.org.cn/3138.html 注意:configmap不用也 ...
随机推荐
- NOI4.6 最小新整数——切山游戏
描述 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0.n的位数为m. 现在从m位中删除k位(0<k < m),求生成的新整数最小为多少? ...
- NOI2.5 8465:马走日
描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点. 输入 第一行为整数T ...
- Linux测试环境简单使用教程
0. 本blog 简单说明一下 Linux测试环境尤其是 CentOS测试环境的开发测试使用, 教程可能不会很长, 主要是入门. 0.1 Linux简介: Linux 的历史基本上不用阐述, linu ...
- Git详解之分布式应用
前言 为了便于项目中的所有开发者分享代码,我们准备好了一台服务器存放远程 Git 仓库.经过前面几章的学习,我们已经学会了一些基本的本地工作流程中所需用到的命令.接下来,我们要学习下如何利用 Git ...
- Java8新特性一点通 | 回顾字符转日期&JoinArray使用
StringToDate日期转换 Join Array使用 StringToDate日期转换 Convert string to date in ISO8601 format 利用LocalDate. ...
- Official VirusTotal Plugin for IDA Pro 7
Official VirusTotal Plugin for IDA Pro 7 该插件在IDA Pro右键菜单(反汇编和字符串窗口)中添加了一个新的" VirusTotal"条目 ...
- Java中正确终止线程的方法
Thread类中有一个已经废弃的 stop() 方法,它可以终止线程,但由于它不管三七二十一,直接终止线程,所以被废弃了.比如,当线程被停止后还需要进行一些善后操作(如,关闭外部资源),使用这个方法就 ...
- TensorFlow中使用GPU
TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存:如果指定了某块GPU,也会默认一次性占用该GPU的所有显存.可以通过以下方式解决: 1 Python代码中设置环境变量,指定G ...
- 《N诺机试指南》(五)进制转化
进制转化类题目类型: 代码详解及注释解答: //进制转化问题 #include <bits/stdc++.h> using namespace std; int main(){ // 1 ...
- 【5min+】 巨大的争议?C# 8 中的接口
系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ...