第17关 深入理解K8s配置管理:ConfigMap和Secret的终极指南

------> 课程视频同步分享在今日头条和B站

大家好,我是博哥爱运维,K8s是如何来进行服务配置管理的呢?

对于容器而言,如果我们想修改一个容器镜像里面的配置,可以在Dockerfile这一步,将修改好的配置复制到镜像里面再重新打包,对于不用变动配置的镜像而言,这样做属于硬编码当然也可以,但一旦我们的镜像服务需要修改配置,那么就需要重新重新打包非常麻烦,对于K8s而言,对于配置这么重要的一个环节,自然有它的解决方案,那就是configmap(通常普通配置使用)和secret(对于一些机密配置信息使用),在上面的部分章节里面,有提前涉及到这部分内容,但没有进行仔细的讲解,这里就对它们作下详细的实践。

我这里会准备一个deployment的yaml配置,用busybox来作为服务镜像,通过一个完整的yaml就可以快速带大家理解并能熟练在K8s上使用configmap和secret,如果一下子理解不了,后面可以保存这份yaml来作来生产配置参考也是没问题的,用多了自然就熟了,yaml配置如下:

configmap-secret-example-simple.yaml
---
# configmap
# kubectl create configmap localconfig-env --from-literal=log_level_test=TEST --from-literal=log_level_produce=PRODUCE
apiVersion: v1
kind: ConfigMap
metadata:name: localconfig-env
data:log_level_test: TESTlog_level_produce: PRODUCE---
# configmap
# kubectl create configmap localconfig-file --from-file=localconfig-test=localconfig-test.conf --from-file=localconfig-produce=localconfig-produce.conf
apiVersion: v1
kind: ConfigMap
metadata:name: localconfig-file
data:localconfig-produce: |TEST_RELEASE = FalsePORT = 80PROCESSES = 0MESSAGE = Producelocalconfig-test: |TEST_RELEASE = TruePORT = 8080PROCESSES = 1MESSAGE = Test---
# secret
# kubectl create secret generic mysecret --from-literal=mysql-root-password='BogeMysqlPassword' --from-literal=redis-root-password='BogeRedisPassword' --from-file=my_id_rsa=/root/.ssh/id_rsa --from-file=my_id_rsa_pub=/root/.ssh/id_rsa.pub
apiVersion: v1
kind: Secret
metadata:name: mysecretnamespace: default
type: Opaque
data:my_id_rsa: bXlfaWRfcnNhCg==my_id_rsa_pub: bXlfaWRfcnNhX3B1Ygo=mysql-root-password: Qm9nZU15c3FsUGFzc3dvcmQ=redis-root-password: Qm9nZVJlZGlzUGFzc3dvcmQ=---
apiVersion: apps/v1
kind: Deployment
metadata:labels:run: test-busyboxname: test-busyboxnamespace: default
spec:replicas: 1selector:matchLabels:run: test-busyboxtemplate:metadata:labels:run: test-busyboxspec:containers:- name: test-busyboximage: registry.cn-shanghai.aliyuncs.com/acs/busybox:v1.29.2args:- /bin/sh- -c- >echo "-------------------------------------------------";echo "TEST_ENV is:$(TEST_ENV)";echo "-------------------------------------------------";echo "PRODUCE_ENV is:$(PRODUCE_ENV)";echo "-------------------------------------------------";echo "secret MYSQL_ROOT_PASSWORD is:$(MYSQL_ROOT_PASSWORD)";echo "-------------------------------------------------";echo "secret REDIS_ROOT_PASSWORD is:$(REDIS_ROOT_PASSWORD)";echo "-------------------------------------------------";echo "/etc/local_config_test.py body is:";cat /etc/local_config_test.py;echo "-------------------------------------------------";echo "/etc/local_config_produce.py body is:";cat /etc/local_config_produce.py;echo "-------------------------------------------------";echo "/etc/id_rsa body is:";cat /etc/id_rsa;echo "-------------------------------------------------";echo "/etc/id_rsa.pub body is:";cat /etc/id_rsa.pub;echo "-------------------------------------------------";ls -ltr /etc;sleep 30000;env:- name: TEST_ENVvalueFrom:configMapKeyRef:name: localconfig-envkey: log_level_test- name: PRODUCE_ENVvalueFrom:configMapKeyRef:name: localconfig-envkey: log_level_produce- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: mysql-root-password- name: REDIS_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: redis-root-passwordvolumeMounts:- name: testconfigmountPath: "/etc/local_config_test.py"subPath: localconfig-test- name: testconfigmountPath: "/etc/local_config_produce.py"subPath: localconfig-producereadOnly: true- name: testsecretmountPath: "/etc/id_rsa"subPath: my_id_rsareadOnly: true- name: testsecretmountPath: "/etc/id_rsa.pub"subPath: my_id_rsa_pubreadOnly: truevolumes:- name: testconfigconfigMap:name: localconfig-filedefaultMode: 0660- name: testsecretsecret:secretName: mysecretdefaultMode: 0600
配置自动更新器 reloader

https://github.com/stakater/Reloader

what is reloader
A Kubernetes controller to watch changes in ConfigMap and Secrets and then restart pods for Deployment, StatefulSet and DaemonSet

How to use Reloader

## kind: Deployment
## metadata:
##   annotations:
##     #------ all(ConfigMap and/or Secret)
##     reloader.stakater.com/auto: "true"
##     #------ only configmap for name: "foo-configmap"
##     configmap.reloader.stakater.com/reload: "foo-configmap"
##     #------ many configmaps
##     configmap.reloader.stakater.com/reload: "foo-configmap,bar-configmap,baz-configmap"
##     #------ only secret for name: "foo-secret"
##     secret.reloader.stakater.com/reload: "foo-secret"
##     #------ many secrets
##     secret.reloader.stakater.com/reload: "foo-secret,bar-secret,baz-secret"
## spec:
##   template:
##     metadata:

部署yaml配置

---
# Source: reloader/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:annotations:meta.helm.sh/release-namespace: "default"meta.helm.sh/release-name: "reloader"labels:app: reloader-reloaderchart: "reloader-1.0.51"release: "reloader"heritage: "Helm"app.kubernetes.io/managed-by: "Helm"name: reloader-reloadernamespace: default
---
# Source: reloader/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRole
metadata:annotations:meta.helm.sh/release-namespace: "default"meta.helm.sh/release-name: "reloader"labels:app: reloader-reloaderchart: "reloader-1.0.51"release: "reloader"heritage: "Helm"app.kubernetes.io/managed-by: "Helm"name: reloader-reloader-role
rules:- apiGroups:- ""resources:- secrets- configmapsverbs:- list- get- watch- apiGroups:- "apps"resources:- deployments- daemonsets- statefulsetsverbs:- list- get- update- patch- apiGroups:- "extensions"resources:- deployments- daemonsetsverbs:- list- get- update- patch- apiGroups:- "batch"resources:- cronjobsverbs:- list- get- apiGroups:- "batch"resources:- jobsverbs:- create- apiGroups:- ""resources:- eventsverbs:- create- patch
---
# Source: reloader/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBinding
metadata:annotations:meta.helm.sh/release-namespace: "default"meta.helm.sh/release-name: "reloader"labels:app: reloader-reloaderchart: "reloader-1.0.51"release: "reloader"heritage: "Helm"app.kubernetes.io/managed-by: "Helm"name: reloader-reloader-role-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: reloader-reloader-role
subjects:- kind: ServiceAccountname: reloader-reloadernamespace: default
---
# Source: reloader/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:annotations:meta.helm.sh/release-namespace: "default"meta.helm.sh/release-name: "reloader"labels:app: reloader-reloaderchart: "reloader-1.0.51"release: "reloader"heritage: "Helm"app.kubernetes.io/managed-by: "Helm"group: com.stakater.platformprovider: stakaterversion: v1.0.51name: reloader-reloadernamespace: default
spec:replicas: 1revisionHistoryLimit: 2selector:matchLabels:app: reloader-reloaderrelease: "reloader"template:metadata:labels:app: reloader-reloaderchart: "reloader-1.0.51"release: "reloader"heritage: "Helm"app.kubernetes.io/managed-by: "Helm"group: com.stakater.platformprovider: stakaterversion: v1.0.51spec:containers:- image: "ghcr.io/stakater/reloader:v1.0.51"imagePullPolicy: IfNotPresentname: reloader-reloaderports:- name: httpcontainerPort: 9090livenessProbe:httpGet:path: /liveport: httptimeoutSeconds: 5failureThreshold: 5periodSeconds: 10successThreshold: 1initialDelaySeconds: 10readinessProbe:httpGet:path: /metricsport: httptimeoutSeconds: 5failureThreshold: 5periodSeconds: 10successThreshold: 1initialDelaySeconds: 10securityContext:{}securityContext: runAsNonRoot: truerunAsUser: 65534serviceAccountName: reloader-reloader

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

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

相关文章

出口贸易媒体发稿7种方法提升转化率的秘密武器解析-华媒舍

出口贸易成为了许多企业发展的重要方向。在这个竞争激烈的市场中,如何让自己的产品脱颖而出,吸引更多客户并提高转化率,成为了每个企业家都面临的挑战。本文将向大家介绍7种提升转化率的秘密武器:出口贸易媒体发稿方法。 1. 出口贸…

LeetCode刷题---合并两个有序链表

个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏:http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的 我讲述…

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍: 任务…

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发,数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈:phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …

C语言KR圣经笔记 4.2返回非整数的函数

4.2 返回非整数的函数 到目前为止,我们给出的函数样例,不是不返回值(void)就是返回 int。如果函数必须要返回其他类型呢?许多的数值函数如 sqrt,sin 和 cos 返回 double;其他特定的函数返回其他…

【个人记录】NGINX反向代理支持同端口HTTP与HTTPS协议访问

监听4000端口,反向代理127.0.0.1:9090的Web网页 NGINX配置如下 server {listen 4000 ssl http2 ; server_name www.http.com,www.https.com; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forw…

Vue3【Set Up】语法糖 + TS快速上手

文章目录 script setup基本语法顶层的绑定会被暴露给模板响应式监听与计算使用组件父子组件传参(变化较大)父 -> 子 defineProps()子 -> 父 defineEmits()子组件暴露给父组件内部属性 defineExpose() defineOptions() 【很少用】 script setup &l…

人工智能时代:AIGC的横空出世

🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…

蓝桥杯第198题 人物相关性分析 C++ 模拟 字符串 双指针

题目 思路和解题方法 程序首先定义了一个函数check,用于判断一个字符是否为字母。接下来,程序读取输入的整数k和一行字符串str。定义了两个空的向量a和b,用于存储满足条件的子串的起始位置。使用for循环遍历字符串str的每个字符,检…

string的模拟

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:能手撕模拟string类 > 毒鸡汤:时间…

MySQL-视图

一、?看一个需求 emp表的列信息很多,有些信息是个人重要信息(比如 sal,comm,mgr,hiredate),如果我们希望某个用户只能查询emp表的(empno、ename,job和deptno)信息,有什么办法? 》视图 二、基本概念 视图 视图是一个虚拟表,其内容由查…

complex rsa

复数rsa,没遇到过这种类型的题,可以记录一下相关知识 先来看一段 from gmpy2 import invert,lcm,is_prime import sys sys.setrecursionlimit(2047)f (3781223486422146909054116838073773962793625267340680342971864932558735632642532480951976591…

IDEA常用快捷键

快捷键功能tab接受选择–选择的名称将覆盖带插入符号右侧的其它名称–而如果按shift或者enter,光标右边的内容会保留Ctrlshift空格智能匹配–查找当前上下文的方法和变量Ctrld对比文件–选中需要对比的文件shift滚动水平滚动Ctrlaltl格式化Ctrlk提交Ctrlaltz回滚类C…

Linux基础项目开发1:量产工具——UI系统(五)

前言: 前面我们已经把显示系统、输入系统、文字系统搭建好了,现在我们就要给它实现按钮操作了,也就是搭建UI系统,下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…

YUM 问题解决步骤

YUM 问题解决步骤 当使用 yum 进行安装软件包或者更新时,如果遇到卡在加载插件阶段或其他相关问题,如下 [rootVM-12-2-centos ~]# sudo yum update Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the config…

linux shell编程

Linux shell编程 一、常用功能1. 比较图片差异2. 截屏2.1 起X情况下(X window起桌面)2.2 没有起X或没有X系统环境下 3. 自动输入密码 一、常用功能 1. 比较图片差异 if compare -metric AE p1.png p2.png null: 2>&1 | grep -v "0$";…

查找算法及哈希表

1 二分查找 1.1 重要概念 拟解决的问题:判断某个区间是否包含某个元素,无法确定区间中包含重复元素的具体位置;使用条件:查找的区间必须符合单调性;本质:采用分治思想,将某个单调区间一分为二…

12.2_黑马Redis实战篇附近商铺用户签到UV统计

实战篇11 实战篇12 要先用test的方式把商铺的数据导入到idea当中,才可以进行查询噢。 代码: 实战篇13 thinking:插件mavenhelper? 方便处理pom文件。 实战篇15 实战篇16 thinking:XX.format(DateTimeFormatter.ofP…

【网络安全技术】实体认证技术Kerberos

一、什么是Kerberos Kerberos解决的是客户端与服务器通信场景中,确保客户端服务器双方的身份可信,并提供对称密钥的分发来加密传输。是一个应用层的协议。 二、一个简单的模型 1.看这个基础的模型,客户端要和服务器通信,他先将自…

《堆》的模拟实现

目录 前言: 模拟实现《堆》: 1.自定义数据类型 2.初始化“堆” 3.销毁“堆” 4.进“堆” 关于AdjustUp() 5.删除堆顶元素 关于AdjustDown() 6.判断“堆”是否为空 7.求“堆”中的数据个数 8.求“堆”顶元素 总结: 前言&#xf…