k8s 配置管理

文章目录

  • k8s 配置管理
    • ConfigMap
      • pod 中使用
    • Secret
      • docker-registry
    • SubPath
    • 配置热更新
      • 使用方案
    • 不可变Secret 和 ConfigMap

k8s 配置管理

ConfigMap

一般用于去存储 Pod 中应用所需的一些配置信息,或者环境变量,将配置于 Pod 分开,避免应为修改配置导致还需要重新构建 镜像与容器。

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

常用创建configmap 方式

  # Create a new config map named my-config based on folder bar# 基于文件夹创建一个名为 my-config 的配置kubectl create configmap my-config --from-file=path/to/bar# Create a new config map named my-config with specified keys instead of file basenames on disk# 指定对应文件创建 --from-file=key1=/path/to/bar/file1.txt  key1 是重命名配置名kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt --from-file=key2=/path/to/bar/file2.txt# Create a new config map named my-config with key1=config1 and key2=config2# 使用key1=config1 方式配置   这种很少用kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2# Create a new config map named my-config from the key=value pairs in the file# 从文件中的 key=value 方式创建配置 kubectl create configmap my-config --from-file=path/to/bar# Create a new config map named my-config from an env file# 从env文件创建一个名为my-config的新配置映射  kubectl create configmap my-config --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env
kubectl get cm  # 查看configmap 配置
kubectl describe cm config_name # 查看 config_name 的配置信息

pod 中使用

需要先创建 configmap 直接用上述命令创建或者通过yaml文件都行

apiVersion: v1  
kind: ConfigMap  
metadata:  name: my-configmap  
data:  app_config.yml: |  database:  host: db.example.com  port: 5432  username: myuser  password: mypassword  other_setting: some_value  log_level: INFO

pod 中配置

# pod-using-configmap.yaml  
apiVersion: v1  
kind: Pod  
metadata:  name: my-pod  
spec:  containers:  - name: my-container  image: my-app-image  env:  # 使用 ConfigMap 中的单个值作为环境变量  - name: LOG_LEVEL  valueFrom:  configMapKeyRef:    name: my-configmap  key: log_level  volumeMounts:  # 将 ConfigMap 挂载为文件  - name: config-volume  mountPath: /etc/config  # 可以在命令中使用环境变量,或在应用中读取 /etc/config/app_config.yml  command: ["/bin/sh", "-c", "echo $LOG_LEVEL && cat /etc/config/app_config.yml"]  volumes:  - name: config-volume  configMap:  name: my-configmap  # 默认情况下,ConfigMap 中的所有 key 都会被挂载为文件,文件名与 key 相同  # 如果只想挂载部分 key,可以使用 items 字段来指定  # items:  #   - key: app_config.yml  #     path: app_config.yml

Secret

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

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

使用 kubectl create secret -h 查看

Available Commands:docker-registry Create a secret for use with a Docker registry # 使用最多generic         Create a secret from a local file, directory, or literal valuetls             Create a TLS secret   # 配置 https 加密

其中 kubectl create secret generic --help 查看示例,构建 secret 对象, 和configmap 几乎没啥区别, 只是value 是 base64 编码后的数据而已

Examples:# Create a new secret named my-secret with keys for each file in folder barkubectl create secret generic my-secret --from-file=path/to/bar# Create a new secret named my-secret with specified keys instead of names on diskkubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa
--from-file=ssh-publickey=path/to/id_rsa.pub# Create a new secret named my-secret with key1=supersecret and key2=topsecretkubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret# Create a new secret named my-secret using a combination of a file and a literalkubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret# Create a new secret named my-secret from env fileskubectl create secret generic my-secret --from-env-file=path/to/foo.env --from-env-file=path/to/bar.env

docker-registry

通过docker-registry 来配置docker harbor 的账户密码, ip port 等信息

 # If you don't already have a .dockercfg file, you can create a dockercfg secret directly by using:
kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER
--docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL# Create a new secret named my-secret from ~/.docker/config.jsonkubectl create secret docker-registry my-secret --from-file=.dockerconfigjson=path/to/.docker/config.json

SubPath

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

配置方式:

  1. 定义 volumes 时需要增加 items 属性,配置 key 和 path,且 path 的值不能从 / 开始
  2. 在容器内的 volumeMounts 中增加 subPath 属性,该值与 volumes 中 items.path 的值相同
containers:......volumeMounts:- mountPath: /etc/nginx/nginx.conf # 挂载到哪里name: config-volume # 使用哪个 configmap 或 secretsubPath: etc/nginx/nginx.conf # 与 volumes.[0].items.path 相同
volumes:
- configMap:name: nginx-conf # configMap 名字items: # subPath 配置key: nginx.conf # configMap 中的文件名

配置热更新

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

这得分成几种情况:

  • 默认方式:会更新,更新周期是更新时间 + 缓存时间
  • subPath:不会更新
  • 变量形式:如果 pod 中的一个变量是从 configmap 或 secret 中得到,同样也是不会更新的

对于 subPath 的方式,我们可以取消 subPath 的使用,将配置文件挂载到一个不存在的目录,避免目录的覆盖,然后再利用软连接的形式,将该文件链接到目标位置

但是如果目标位置原本就有文件,可能无法创建软链接,此时可以基于前面讲过的 postStart 操作执行删除命令,将默认的文件删除即可

使用方案

使用edit 修改

kubectl edit cm  configmap_name   # 修改后需要一定时间更新

通过replace替换

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

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

# 修改原配置文件后执行
kubectl create cm --from-file=nginx.conf --dry-run -o yaml | kubectl replace -f-   

不可变Secret 和 ConfigMap

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

apiVersion: v1
data:application.yaml: "spring:\n  application:\n    name: test-app\nserver:\n  port:8080\n  \n"
kind: ConfigMap
metadata:creationTimestamp: "2024-05-13T02:27:22Z"name: app-confignamespace: default
immutable: true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么跨境电商大佬都在自养号测评?看完你就懂了!

在跨境电商的激烈竞争中,各大平台如亚马逊、拼多多Temu、shopee、Lazada、wish、速卖通、煤炉、敦煌、独立站、雅虎、eBay、TikTok、Newegg、Allegro、乐天、美客多、阿里国际、沃尔玛、Nike、OZON、Target以及Joom等,纷纷成为商家们竞相角逐市场份额的焦…

【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景实体类参数API接口不可空参数可空参数参数类型MVC历程相关文章 背…

LeetCode例题讲解:45.跳跃游戏Ⅱ

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL(已更新)

1.一直以来想写下基于kettle的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下FTP服务器相关知识体系 3.欢迎批评指正,跪谢一键三连! kettle访问FTP服务器文件并处理数据至PostgreS…

南京中科微Ci24R1(DFN8)无线收发射频芯片性能介绍

Ci24R1是南京中科微研发的低成本高性能2.4GHz GFSK 无线收发芯片&#xff08;支持蓝牙版&#xff09;&#xff0c;专为低功耗无限场合设计&#xff0c;集成嵌入式ARQ基带协议引擎的无线收发器芯片。 工作频率为2400MHz-2525MHz&#xff0c;共有126个1MHz带宽的信道&#xff0c…

PAN2025 2.4GHz无线接收SoC芯片

PAN2025是一款内嵌32位MCU和2.4GHz收发器的SoC芯片。该收发器适用于2.400~2.483GHz**ISM频段。它集成了射频&#xff08;RF&#xff09;发射器和接收器&#xff0c;频率合成器&#xff0c;晶体振荡器&#xff0c;基带GFSK调制解调器等。PAN2025支持一对多网络和ACK通信。TX功率…

美股开户,你需要知道这些!

想投资美股&#xff0c;却不知道开户需要多少钱&#xff1f; 别担心&#xff0c;这篇专栏将告诉你美股开户的资金要求以及相关注意事项。 1. 美股开户需要多少钱&#xff1f; 答案是&#xff1a;有的&#xff0c;但门槛并不高。不同平台对开户资金的要求有所不同&#xff0c;一…

WEB基础--数据库事务与连接池

数据库事务 什么是事务 事务(Transaction,简写为tx): 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元: 当每个逻辑操作单元全部完成时,数据的一致性可以保持, 而当这个单…

elasticsearch搭建教程

主要参看这里就行,需要特别注意其中报错的解决方案&#xff1a;搭建elasticsearch 单机节点里&#xff0c;按照上述教程搭建只能开放本地访问&#xff0c;如果需要其他机器访问&#xff0c;需要在elasticsearch.yml里新增几个配置&#xff1a; node.name: node-1 network.host…

APP反抓包 - 服务端证书验证

案例引入: app:泡泡聊天 版本:v1.7.4 发送登录请求,抓包发现提示:403 Forbidden 这里就是使用了服务端证书校验,因为charles没有安装证书,所以到达服务器的响应没有通过验证,返回异常。 美之图: 一,校验逻辑 在安卓开发时,在客户端预设证书(p12/bks),客户端…

flink cdc,读取datetime类型

:flink cdc&#xff0c;读取datetime类型&#xff0c;全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题&#xff0c;可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说&#xff0c;可以在MySQL数据源的debezium.source.converter配置项中指…

AI仿站源码教程

AI仿站源码教程 随着AI技术的不断发展&#xff0c;仿站技术已经越来越成熟&#xff0c;通过AI一键仿站&#xff0c;开发者们可以更快速、更高效地搭建网站。传统的前端开发过程中&#xff0c;需要大量的手工编码和设计&#xff0c;而AI仿站技术可以通过截图或视频&#xff0c;…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分&#xff0c;对于城市居民的生活质量和城市形象有着不可忽视的影响。然而&#xff0c;传统的公共厕所管理模式存在诸多问题&#xff0c;如设施老化、卫生状况不佳等&#xff0c;严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

计算机毕业设计系列~~~基于SSM的宠物销售网站

目录 一、项目介绍 二、开题报告 三、项目截图 一、项目介绍 本项目是一款基于SSM的宠物销售网站&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2. …

【笔记】从零开始做一个男性人体的流程/躯干篇(补充)

1.做手臂和腿部都记着【关键节点】的重要性

day5.12 leetcode80 删除有序数组重复项

删除有序数组重复项 给你一个有序数组 nums &#xff0c;请你** 原地** 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间…

2024年得物搬砖项目:轻松上手的高利润副业选择

越来越多的人都开始将目光转向互联网&#xff0c;无论是商家还是消费者&#xff0c;都已经习惯网上卖货和购买 其实&#xff0c;其主要原因还是因为如今的生活节奏快&#xff0c;现在的消费主力军转移到了90、00后身上。他们往往忙于工作或者是家庭&#xff0c;无暇去逛商场&a…

webpack压缩css代码示例:压缩css

css-loader用来解析.css文件&#xff0c;将之转换成commjs模块 style-loader用来将css注入到dom中 尽管css-loader和style-loader提供将css导入到js并注入到dom的功能&#xff0c;但webpack默认并不负责压缩css&#xff0c; css-minimizer-webpack-plugin只处理分离出来的CSS文…

jQuery-2.鼠标焦点事件、节点操作、遍历元素、效果

鼠标事件 鼠标事件是当用户在文档上移动或单击鼠标时而产生的事件&#xff0c;常用的鼠标事件&#xff1a; 方法 描述 执行时机 click() 触发或将函数绑定到指定元素的click事件 单击鼠标时 mouseover() 触发或将函数绑定到指定元素的mouse over事件 鼠标移过时 mous…

《一“企”谈》∣企企通走进『鹏辉能源』,探索百亿储能上市企业如何实现供应链数字化转型

随着运营模式的升级和市场竞争的加剧&#xff0c;采购数字化已成为企业提升竞争力的关键。通过整合人工智能、大数据、云计算和物联网等先进技术&#xff0c;采购流程正逐步实现智能化、协同化和绿色化&#xff0c;大幅提升采购效率和决策质量。 广州鹏辉能源科技股份有限公司&…