(五)k8s实战-配置管理

news/2025/2/18 11:22:29/

一、ConfigMap

使用 kubectl create configmap -h 查看示例,构建 configmap 对象

1) 基于文件夹,加载文件夹下所有配置文件,创建
kubectl create configmap <configmapName> --from-file=<dirPath>2) 指定配置文件,创建(常用)
kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt
--from-file=key2=/path/to/bar/file2.txt查看
kubectl get cm
查看内容
kubectl describe cm test-env-config 

案例1:使用键值对类型的ConfigMap 添加到env文件内

# 创建键值对类型的ConfigMap
kubectl create configmap test-env-config --from-literal=JAVA_OPTS_TEST='-Xms512m -Xmx512m' --from-literal=APP_NAME=springboot-env-test
# 查看键值对内容
kubectl describe cm test-env-config 
Name:         test-env-config
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
APP_NAME:
----
springboot-env-test
JAVA_OPTS_TEST:
----
-Xms512m -Xmx512mBinaryData
====Events:  <none>

使用:
在这里插入图片描述

案例2:使用文件类型的ConfigMap 添加到指定目录内

在这里插入图片描述
使用:
在这里插入图片描述

二、加密数据配置 Secret

与 ConfigMap 类似,用于存储配置信息,但是主要用于存储敏感信息、需要加密的信息,Secret 可以提供数据加密、解密功能。

在创建 Secret 时,要注意如果要加密的字符中,包含了有特殊字符,需要使用转义符转移,例如 $ 转移后为 $,也可以对特殊字符使用单引号描述,这样就不需要转移例如 1$289*-! 转换为 ‘1$289*-!’

[root@k8s-master config]# kubectl create secret docker-registry harbor-secret --docker-username=admin --docker-password=wolfcode --docker-email=liugang@wolfcode.cn --docker-server=192.168.100.100:8858
secret/harbor-secret created
[root@k8s-master config]# kubectl describe secret harbor-secretName:         harbor-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  kubernetes.io/dockerconfigjsonData
====
.dockerconfigjson:  137 bytes
[root@k8s-master config]# kubectl edit secret harbor-secret
# 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:.dockerconfigjson: eyJhdXRocyI6eyIxOTIuMTY4LjEwMC4xMDA6ODg1OCI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJ3b2xmY29kZSIsImVtYWlsIjoibGl1Z2FuZ0B3b2xmY29kZS5jbiIsImF1dGgiOiJZV1J0YVc0NmQyOXNabU52WkdVPSJ9fX0=
kind: Secret
metadata:creationTimestamp: "2023-08-24T00:09:20Z"name: harbor-secretnamespace: defaultresourceVersion: "302170"uid: 28fa824f-34c7-4b40-a472-01e0e33bfcbd
type: kubernetes.io/dockerconfigjson

使用
拉取私有仓库镜像,需要登录用户密码,使用Secret配置
在这里插入图片描述

三、SubPath 的使用

使用 ConfigMap 或 Secret 挂载到目录的时候,会将容器中源目录给覆盖掉,此时我们可能只想覆盖目录中的某一个文件,但是这样的操作会覆盖整个文件,因此需要使用到 SubPath

配置方式:
定义 volumes 时需要增加 items 属性,配置 key 和 path,且 path 的值不能从 / 开始
在容器内的 volumeMounts 中增加 subPath 属性,该值与 volumes 中 items.path 的值相同

containers:......volumeMounts:- mountPath: /etc/nginx/nginx.conf # 挂载到哪里name: nginx-conf # 使用哪个 configmap 或 secretsubPath: etc/nginx/nginx.conf # 与 volumes.[0].items.path 相同
volumes:
- configMap:name: nginx-conf # configMap 名字items: # subPath 配置key: nginx.conf # configMap 中的文件名path: etc/nginx/nginx.conf # subPath 路径

四、配置的热更新

我们通常会将项目的配置文件作为 configmap 然后挂载到 pod,那么如果更新 configmap 中的配置,会不会更新到 pod 中呢?

这得分成几种情况:
1)默认方式:会更新,更新周期是更新时间 + 缓存时间
2)subPath:不会更新
3)变量形式:如果 pod 中的一个变量是从 configmap 或 secret 中得到,同样也是不会更新的

对于 subPath 的方式,我们可以取消 subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的覆盖,然后再利用软连接的形式,将该文件链接到目标位置。但是如果目标位置原本就有文件,可能无法创建软链接,此时可以基于前面讲过的 postStart 操作执行删除命令,将默认的文件删除即可

热更新的方式
1)通过 edit 命令直接修改 configmap

kubectl edit cm <configmapName>

2)通过 replace 替换

kubectl create cm --from-file=nginx.conf --dry-run -o yaml | kubectl replace -f-

由于 configmap 我们创建通常都是基于文件创建,并不会编写 yaml 配置文件,因此修改时我们也是直接修改配置文件,而 replace 是没有 --from-file 参数的,因此无法实现基于源配置文件的替换,此时我们可以利用下方的命令实现

该命令的重点在于 --dry-run 参数,该参数的意思打印 yaml 文件,但不会将该文件发送给 apiserver,再结合 -oyaml 输出 yaml 文件就可以得到一个配置好但是没有发给 apiserver 的文件,然后再结合 replace 监听控制台输出得到 yaml 数据即可实现替换

五、不可变的 Secret 和 ConfigMap

对于一些敏感服务的配置文件,在线上有时是不允许修改的,此时在配置 configmap 时可以设置 immutable: true 来禁止修改


http://www.ppmy.cn/news/1061591.html

相关文章

Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1

参考的博文&#xff1a;《在 Ubuntu 上使用源码安装 OpenResty》 《OpenResty 安装安装详解-Ubuntu》 《Linux学习之CentOS 7源码安装openresty》 https://openresty.org/en/download.html是官网下载网址&#xff0c;页面往下拉有下载的链接。 https://github.com/openresty…

如何在React中进行动画处理和过渡效果实现?列举并简述一下几种常见的动画库和工具。

1、在React中如何进行国际化(i18n)和本地化(l10n)的实现和应用&#xff1f;列举并简述一下几种常见的国际化库和工具。 React中的国际化(i18n)和本地化(l10n)可以通过以下几种方式实现&#xff1a; 使用React-Intl库&#xff1a;React-Intl是一个基于JavaScript的国际化库&…

cuda11.1和cuDNN v8.8.1的安装目录问题

cuda的不同版本文件路径是不一致的&#xff0c;在cuda10.1中&#xff0c;配置cudnn的文件路径是&#xff1a; sudo cp cuda/include/cudnn.h /usr/local/cuda-10.1/include/ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib64/但是在cuda11.1中&#xff0c;文件路径…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API&#xff08;http请求形式&#xff09;以及 transportClient API两种。相比来说transportClient API效率更高&#xff0c;transportClient 是通过Elasticsearch内部RPC的形式进行请求…

MyBatis与Spring整合以及AOP和PageHelper分页插件整合

目录 前言 一、MyBatis与Spring整合的好处以及两者之间的关系 1.好处 2.关系 二、MyBatis和Spring集成 1.导入pom.xml 2.编写配置文件 3.利用mybatis逆向工程生成模型层代码 三、常用注解 四、AOP整合pageHelper分页插件 创建一个切面 测试 前言 MyBatis是一个开源的…

论文阅读_模型结构_LoRA

name_en: LoRA: Low-Rank Adaptation of Large Language Models name_ch: LORA&#xff1a;大语言模型的低阶自适应 paper_addr: http://arxiv.org/abs/2106.09685 date_read: 2023-08-17 date_publish: 2021-10-16 tags: [‘深度学习’,‘大模型’] author: Edward J. Hu cita…

人工智能技术的主要类别

人工智能技术主要类别&#xff1a; 机器学习&#xff1a; 监督学习&#xff1a;使用带有标签的训练数据来训练模型&#xff0c;使其能够预测未知数据的标签。常见任务包括分类和回归。无监督学习&#xff1a;使用无标签的训练数据&#xff0c;模型通过发现数据中的模式、聚类或…

【洛谷】P2440 木材加工

原题链接&#xff1a;https://www.luogu.com.cn/problem/P2440 1. 题目描述 2. 思路分析 整体思路&#xff1a;二分答案 设置一个变量longest来记录最长木头的长度&#xff0c;sum记录切成的小段数量之和。 令左边界l0&#xff0c;右边界llongest。 写一个bool类型的check…