玩转Configmap配置应用的各种姿势
在 k8s 中使用配置主要可以有以下几种方式来实现:
1. 向容器传递命令行参数
2. 为每个容器指定自定义的环境变量
3. 通过特殊类型的卷将配置文件挂载到容器中
在 k8s 中覆盖命令行参数
和 docker 内一样,可以定义容器启动中的执行程序和参数,并且镜像的 ENTRYPOINT 和 CMD 会被 k8s 中的 command 和 args 覆盖。
| Docker | K8s | 描述 |
| ENTRYPOINT | command | 容器中运行可执行文件 |
| CMD | args | 传给可执行文件的参数 |
在pod定义中可以这样子声明 command 和 args
kind: Pod
spec:
containers:
- image: some/image
command: ["/bin/command"]
args: ["args1", "args2", "args3"]
在容器中指定环境变量
在 k8s 中声明环境变量,在容器中可以通过环境变量来进行配置,但是需要注意的是,在每个容器中,k8s 会自动暴露相同命名空间下每个 service 对应的环境变量。虽然环境变量是被设置在 pod 的容器定义中,但是并非是 pod 级别的,比如说运维需要在容器中声明一些运维中特殊声明的环境变量。比如集群中的dns域名解析,当前宿主ip,当前pod的ip等等。
kind: Pod
spec:
containers:
- image: xxx/image
env:
- name: INTERVAL
value: "30"
name: env-config-name
...
在环境变量中引用另一个环境变量
env:
- name: OTHER_VAR
value: "foo"
- name: THIS_VAR
value: "$(OTHER_VAR)_change"
利用 config 配置
上面的两种配置方式更适合运维和 k8s 工程师在配置集群的时候进行硬编码的配置,对于服务开发来说,这两种配置方式不太合适。
使用指令 kubectl 创建 ConfigMap
$ kubectl create configmap set-config --from-literal=keyname=config-key-value --from-literal=one=two $ kubectl describe configmap set-config
Name: set-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
keyname:
----
config-key-value
one:
----
two
Events: <none>
configmap可以混合使用不同的自选选项:完整文件夹、单独文件、自定义键名条目下的文件以及字面量等等。
$ kubectl create configmap my-config
--from-file=foo.json ## 单独文件
--from-file=var=foobar.conf ## 自定义键名条目下的文件
--from-file=config-opts/ ## 完整的文件夹
--from-literral=some=thing ## 字面量
在实际应用中,我们一般这样子使用 configmap,利用 configmap 配置不同环境下的配置文件,然后利用 volume 来挂载到 pod 容器文件夹内。
例如,先声明两个configmap,一个代表正式环境,一个代表测试环境
$ vim config-learn-test.xml
<conf>
<env>test</env>
<service>
<servicename></servicname>
<host></host>
<port></port>
</service>
<conf> $ vim config-learn-prod.xml
<conf>
<env>prod</env>
<service>
<servicename></servicname>
<host></host>
<port></port>
</service>
<conf>
生成 configmap
$ kubectl create configmap config-learn-prod --from-file=config-learn.xml=/path/configmap-learn/config-learn-prod.xml
$ kubectl create configmap config-learn-test --from-file=config-learn.xml=/path/configmap-learn/config-learn-test.xml
注意这里两个都使用的配置名称为 config-learn.xml,这样方便统一配置名
创建 pod,并且声明需要的配置,如果环境是测试则选择 config-learn-test,如果环境为正式则选择 config-learn-prod
$ vim ./configmap-learn.yaml
apiVersion: v1
kind: Pod
metadata:
name: configmap-learn
spec:
containers:
- image: luksa/kubia
name: kubia
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- name: configname
mountPath: /data/service/conf
readOnly: true
volumes:
- name: configname
configMap:
name: config-learn-test
在生成的 pod 中去检验对应目录下的配置文件如下:
$ kubectl exec configmap-learn cat /data/service/conf/config-learn.xml
<conf>
<env>test</env>
<service>
<servicename></servicname>
<host></host>
<port></port>
</service>
<conf>
可以看到确实是采取的测试环境配置,而且如果此目录下有相同名字的配置文件,此文件会被覆盖。
编辑修改configmap
$ kubectl edit configmap config-learn-prod
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
config-learn.xml: |
<conf>
<env>prod</env>
<service>
<servicename></servicname>
<host></host>
<port></port>
</service>
<conf>
kind: ConfigMap
metadata:
creationTimestamp: "2022-09-11T10:59:28Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:config-learn.xml: {}
manager: kubectl
operation: Update
time: "2022-09-11T10:59:28Z"
name: config-learn-prod
namespace: default
resourceVersion: "23045374"
selfLink: /api/v1/namespaces/default/configmaps/config-learn-prod
uid: 79663144-2b5e-4e29-8c94-0469d5906e19
保存文件后关闭编辑器,configmap 会在不久后更新对应的文件,文件更新过程需要一些时间,最后会看到配置文件的变化。但是一般容器进程并不会监控文件的变化在载入之后,所以一般都是重启容器并载入配置的。
玩转Configmap配置应用的各种姿势的更多相关文章
- IdentityServer4 4.x版本 配置Scope的正确姿势
前言 IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证的框架 IdentityServer4官方文档:ht ...
- visual studio 2013 中配置OpenCV2.4.13 姿势
首先在path中添加 “C:\OpenCV\opencv\build\x64\vc12\bin” (地址随实际变化) 注:添加的都是*86不使用*64 在visualstudio 2013中配置 ...
- 使用ConfigMap配置您的应用程序
转载自:https://kuboard.cn/learning/k8s-intermediate/config/config-map.html ConfigMap 作为 Kubernetes API ...
- Android玩转百度地图Sha1获取正确姿势?
场景一 由于近期项目钟要用到定位功能因此肯定须要用到地图以及地位功能,相信大家也知道眼下国内比較出名的地图像百度.高德.腾讯等这些还是用到比較多的.于是思考了一下决定还是用百度,相信老司机们都知道的哈 ...
- [置顶]
Android玩转百度地图Sha1获取正确姿势?
场景一 由于最近项目钟要用到定位功能因此肯定需要用到地图以及地位功能,相信大家也知道目前国内比较出名的地图像百度.高德.腾讯等这些还是用到比较多的,于是思考了一下决定还是用百度,相信老司机们都知道的哈 ...
- k8s之configmap配置中心
记录在石墨笔记中,懒得再粘贴了,大家直接移步下面地址 https://shimo.im/docs/ktNM72QPweEEkcWg/
- SpringBoot基础系列之自定义配置源使用姿势实例演示
[SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...
- kubernetes 的configMap和sercet配置信息
简介: 启动pod,pod启动时可以将configMap资源关联到当前pod上来,从中读一个数据c传递给pod内的容器的一个变量.任然是变量注入的方式来给容器传配置信息. 把每一个configMap当 ...
- K8S(10)配置中心实战-configmap资源
k8s配置中心实战-configmap资源 目录 k8s配置中心实战-configmap资源 0 configmap前置说明 0.1.1 configmap和secret 0.1.2 怎么使用conf ...
随机推荐
- leetcode教程系列——Binary Tree
tree是一种常用的数据结构用来模拟真实物理世界里树的层级结构.每个tree有一个根(root)节点和指向其他节点的叶子(leaf)节点.从graph的角度看,tree也可以看作是有N个节点和N-1个 ...
- error: cannot open .git/FETCH_HEAD: Permission denied
可能原因:该操作的执行者对该目录没有写权限 解决:1.类Unix平台,使用chown将目录改为自己: 2.Windows平台,取消只读选项,给everyone用户所有权限:
- JUC源码学习笔记3——AQS等待队列和CyclicBarrier,BlockingQueue
一丶Condition 1.概述 任何一个java对象都拥有一组定义在Object中的监视器方法--wait(),wait(long timeout),notify(),和notifyAll()方法, ...
- srec_cat 常用参数的使用
前言 下面介绍映像文件工具 srec_cat 的使用,如何通过相关参数实现自己需要的功能. 下载链接:SRecord 使用方式 文件类型 在输入文件和输出文件文件时要指明文件类型,常用的如: test ...
- TCP通信的客户端代码实现和TCP通信的服务器代码实现
TCP通信的客户端代码实现 package com.yang.Test.ServerStudy; import java.io.*; import java.net.Socket; /** * TCP ...
- 记一次Linux server偶发CPU飙升问题的跟进与解决
背景 进入6月后,随着一个主要功能版本api的上线,服务端的QPS翻了一倍,平时服务器的CPU使用稳定在30%上下,高峰期则在60%上下,但是偶尔会有单台机器出现持续数分钟突然飙到90%以上,导致大量 ...
- css基础05
无关浏览器,只想对于原来的位置.而且下面的盒子也不会升上去. 没有父亲的时候就是以浏览器为标准的. 父亲没定位,爷爷有定位,就按照爷爷的,不管父亲了. 绝对定位飘起来比浮动还要高.飘起来了它的位置就会 ...
- javascript 原生class操作
<script type="text/javascript"> function hasClass(elements, cName) { return elements ...
- odoo 14 Debug 调试
1 # PDB的用法 2 # PDB是用来调试运行代码的. 3 # 如何启动PDB(启动之后你可以调用odoo任何模块中的方法) 4 # ./odoo-bin shell --log-level=de ...
- HDFS基础入门
HDFS简介 HDFS(全称:Hadoop Distribute File System)分布式文件系统,是Hadoop核心组成. HDFS中的重要概念 分块存储 HDFS中的文件在物理上是分块存储的 ...