8.1 云原生要素-配置分离

杜宽老师k8s课程学习笔记

ConfigMap:存储明文配置

Secret:存储密文,敏感配置,各种密码;

配置更新直接同步容器,热加载,无需重启pod或者容器;镜像和配置分离,可单独修改发布;

8.2 创建ConfigMap的几种形式

01 基于目录去创建configmap

cd /root/configmap;
kubectl create  configmap  cmfromdir --from-file=conf/;

02 基于文件去创建configmap

kubectl create  cm cmfromfile --from-file=conf/redis.con 

创建时指定cm名称

kubectl create  cm cmspecial --from-file=game-conf-newname=conf/game.con

03  基于环境变量创建cm

kubectl create  cm gameenvcm --from-env-file=conf/game.con

pod中可以通过valueFrom,envfrom来引用

04 通过--from-literal创建cm

kubectl create  cm envfromliteral  --from-literal=level=info --from-literal=passwd=redis123

05 基于yaml文件创建cm

cat cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: game-demo
data:# 类属性键;每一个键都映射到一个简单的值player_initial_lives: "3"ui_properties_file_name: "user-interface.properties"# 类文件键game.properties: |enemy.types=aliens,monstersplayer.maximum-lives=5    user-interface.properties: |color.good=purplecolor.bad=yellowallow.textmode=true    
 kubectl create  -f cm.yaml 

8.3 使用valuefrom定义环境变量

configmap的使用:可以用作配置文件,也可用作环境变量;

 kubectl create deploy dp-cm --image=nginx  --dry-run=client  -oyaml >dp-cm.yaml

cd /root/configmap;cat dp-cm.yaml

[root@k8s-master01 configmap]# pwd
/root/configmap
[root@k8s-master01 configmap]# cat dp-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxenv:- name: TEST_ENVvalue: testenv- name: LIVESvalueFrom:configMapKeyRef:name: gameenvcmkey: lives
[root@k8s-master01 configmap]# 
kubectl create  -f dp-cm.yaml

注意点:deployment与configmap在同一namespace下面;

引用多个cm的key变量,valueFrom主要是配置较少的环境变量时引用,配置较多环境变量时

推荐使用envFrom方式。

[root@k8s-master01 configmap]# cat dp-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxenv:- name: TEST_ENVvalue: testenv- name: LIVESvalueFrom:configMapKeyRef:name: gameenvcmkey: lives- name: test_envvalueFrom:configMapKeyRef:name: gameenvcmkey: test_env
[root@k8s-master01 configmap]# 

测试结果

8.4 使用envFrom批量生成环境变量

官网配置参考:配置 Pod 使用 ConfigMap | Kubernetes

cat dp-envfrom-cm.yaml

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginx#cm gameenvcm里的变量全部输出envFrom:- configMapRef:name: gameenvcm env:- name: TEST_ENVvalue: testenv- name: LIVESvalueFrom:configMapKeyRef:name: gameenvcmkey: lives#- name: test_env#  valueFrom:#    configMapKeyRef:#     name: gameenvcm#      key: test_env
[root@k8s-master01 configmap]# 
kubectl create  -f dp-envfrom-cm.yaml 

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxenvFrom:- configMapRef:name: gameenvcm prefix: fromCmenv:- name: TEST_ENVvalue: testenv- name: LIVESvalueFrom:configMapKeyRef:name: gameenvcmkey: lives#- name: test_env#  valueFrom:#    configMapKeyRef:#     name: gameenvcm#      key: test_env
[root@k8s-master01 configmap]# 
kubectl replace -f   dp-envfrom-cm.yaml 

8.5 以文件的形式挂载ConfigMap

官网步骤参考:ConfigMap | Kubernetes

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: redis-conf-volumesmountPath: /etc/config# - image: registry.cn-beijing.aliyuncs.com/dotbalo/redis #   name: redisvolumes:- name: redis-conf-volumesconfigMap:name: redis-conf
[root@k8s-master01 configmap]# 
kubectl replace  -f dp-envfrom-cm.yaml 

 kubectl edit  cm redis-conf

挂载多个volumes实例

测试

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: redis-conf-volumesmountPath: /etc/config- name: cmfromdir-volumesmountPath: /etc/config2# - image: registry.cn-beijing.aliyuncs.com/dotbalo/redis #   name: redisvolumes:- name: redis-conf-volumesconfigMap:name: redis-conf- name: cmfromdir-volumesconfigMap:name: cmfromdir
[root@k8s-master01 configmap]# 
kubectl replace   -f dp-envfrom-cm.yaml

8.6 自定义挂载权限及名称

自定义文件名

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: redis-conf-volumesmountPath: /etc/config- name: cmfromdir-volumesmountPath: /etc/config2# - image: registry.cn-beijing.aliyuncs.com/dotbalo/redis #   name: redisvolumes:- name: redis-conf-volumesconfigMap:name: redis-confitems:- key: redis.conpath: redis-conf.bak- name: cmfromdir-volumesconfigMap:name: cmfromdir
[root@k8s-master01 configmap]# 

可以按照如下方式修改挂载到pod 容器中的文件名

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: cmfromfile-volumesmountPath: /etc/config- name: cmfromdir-volumesmountPath: /etc/config2# - image: registry.cn-beijing.aliyuncs.com/dotbalo/redis #   name: redisvolumes:- name: cmfromfile-volumesconfigMap:name: cmfromfileitems:- key: redis.conpath: redis-conf.new- name: cmfromdir-volumesconfigMap:name: cmfromdir
[root@k8s-master01 configmap]# 

修改挂载权限

[root@k8s-master01 configmap]# kubectl get cm  cmfromfile -oyaml
apiVersion: v1
data:redis.con: |passwd redis123`
kind: ConfigMap
metadata:creationTimestamp: "2022-11-30T01:56:08Z"managedFields:- apiVersion: v1fieldsType: FieldsV1fieldsV1:f:data:.: {}f:redis.con: {}manager: kubectl-createoperation: Updatetime: "2022-11-30T01:56:08Z"name: cmfromfilenamespace: defaultresourceVersion: "1370377"uid: a85dacd5-1f6f-4c43-baaa-c429c623495b
[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: cmfromfile-volumesmountPath: /etc/config- name: cmfromdir-volumesmountPath: /etc/config2# - image: registry.cn-beijing.aliyuncs.com/dotbalo/redis #   name: redisvolumes:- name: cmfromfile-volumesconfigMap:name: cmfromfileitems:- key: redis.conpath: redis-conf.newdefaultMode: 0666- name: cmfromdir-volumesconfigMap:name: cmfromdir
您在 /var/spool/mail/root 中有新邮

测试结果

8.7 Secret常用类型

8.8 创建Secret的几种形式

001    --from-file形式创建

kubectl create secret generic  db-user-pass \--from-file=/root/secret/username.txt \--from-file=/root/secret/passwd.txt 

002    --from-literal形式创建

kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb='

003 通过yaml文件创建

yaml中写铭文,通过stringdata加密

[root@k8s-master01 secret]# cat secret-stringdata.yaml
apiVersion: v1
kind: Secret
metadata:name: my-secret-stringdata
type: Opaque
stringData:username: admin      # kubernetes.io/basic-auth 类型的必需字段password: t0p-Secret # kubernetes.io/basic-auth 类型的必需字段
[root@k8s-master01 secret]# 

8.9 使用Secret拉取私有仓库镜像

修改yaml文件配置

8.10 Secret管理HTTPS证书

创建证书

openssl req -x509  -nodes  -days 365 -newkey rsa:2048  -keyout tls.key -out tls.crt -subj "/CN=test.com"

创建secret

kubectl -n default create secret tls nginx-test-tls  --key=tls.key  --cert=tls.crt

8.11 使用SubPath解决挂载覆盖

将容器里的nginx.con拷贝出并做如下修改

创建nginx-conf cm

kubectl create cm nginx-conf --from-file=/root/secret/nginx.conf 

[root@k8s-master01 configmap]# cat dp-envfrom-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: dp-cmname: dp-cm
spec:replicas: 1selector:matchLabels:app: dp-cmtemplate:metadata:labels:app: dp-cmspec:containers:- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginxname: nginxvolumeMounts:- name: confmountPath: /etc/nginx/nginx.confsubPath: nginx.confvolumes:- name: confconfigMap:name: nginx-conf
[root@k8s-master01 configmap]# 

8.12  ConfigMap&Secret热更新

edit修改的cm 服务出现乱码,修改复杂;

解决:通过yaml文件创建的cm,直接vim修改yaml文件,然后replace/apply一下;

通过文件形式创建的cm的热更新;通过yaml文件创建的cm,直接vim修改yaml文件,然后replace/apply一下;

将worker_connections修改为256;改为后如何导入到configmap中呢?

#热更新
[root@k8s-master01 secret]# kubectl  create  cm nginx-conf  --from-file=nginx.conf  --dry-run=client  -oyaml|kubectl  replace  -f  -
configmap/nginx-conf replaced
[root@k8s-master01 secret]# 

8.13 ConfigMap&Secret使用限制

第8章 K8s基础篇-配置管理相关推荐

  1. k9.第三章 K8s基础篇-必备Docker知识 (二)

    3.Dockerfile用法 FROM:继承基础镜像 MAINTAINER:镜像制作作者信息 LABEL:镜像制作作者信息,新版建议使用LABEL RUN:用来执行shell命令 EXPOSE:暴露端 ...

  2. 【面试宝典】软件测试工程师2021烫手精华版(第三章Mysql基础篇)

    第三章 Mysql 基础 一. 基础知识 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是由多张能 ...

  3. k22.第九章 K8s进阶篇-高级调度计划任务临时容器 (三)

    4.K8s污点和容忍 Taint&Toleration 4.1 Taint和Toleration设计理念 容忍和污点Taint和Toleration: 设计理念:Taint在一类服务器上打上污 ...

  4. 从零开始用snakemake搭建完整的甲基化生信分析流程(第一章)基础篇

    从零开始用snakemake搭建完整的甲基化生信分析流程 阅读文章后的收获:专业的snakemake编程技能:甲基化分析pipeline 作者生物信息学硕士,6年生信分析师从业经验,快速响应读者问题, ...

  5. k26.第十一章 K8s进阶篇-细粒度权限控制 (二)

    2. RBAC实践 创建一个名为deployment-clusterrole的clusterrole ​ a) 该clusterrole只允许创建Deployment.Daemonset.Statef ...

  6. ArcGIS 10.6 教程 第03章【基础篇】坐标系

    文章目录 坐标系 地理坐标系 椭球体 大地基准面 中国常用坐标系 投影坐标系 高斯克吕格投影GK 墨卡托投影UTM GIS操作 Gauss_Kruger 变为GCS_Xian_1980 GCS_Xia ...

  7. 【谷粒商城基础篇】仓储服务:仓库维护

    谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== 项目简介与分布式概念(第一.二章) 基础环境搭建(第三章) ===整合SpringCloud=== 整合 ...

  8. 游戏编程之四 diectxdarw基础篇

    视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介      Grubers的一个观点是Direc ...

  9. 【谷粒商城基础篇】基础环境搭建

    谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== 项目简介与分布式概念(第一.二章) 基础环境搭建(第三章) ===整合SpringCloud=== 整合 ...

最新文章

  1. 如何只训练网络中的全连接层
  2. android span的用法,Android Span的使用
  3. C#中gridView常用属性和技巧介绍
  4. 如何用jquery实现实时监控浏览器宽度
  5. 【Elasticsearch】elasticsearch bool 布尔 查询
  6. HDU2073 无限的路【数学】
  7. 大数据开发笔记(四):Hive数仓调优
  8. 手机电子词典_一个落榜生的醒悟:我的梦想,是手机夺走的!
  9. headfirstjava_1.BreakingTheSurface
  10. Python 每日一记248Java二叉树实现折纸问题
  11. 史上最全的PS快捷键大全
  12. win10虚拟机环境下运行驱动程序
  13. python unrar问题_python利用unrar实现rar文件解压缩
  14. macbook linux 双系统,mac安装linux双系统的吐槽
  15. 阿里矢量图标iconfont在微信小程序的使用
  16. 什么是真正的架构设计?某厂十年Java经验让我总结出了这些,不愧是我
  17. 关于android分支无法下载的问题,revision froyo in manifests not found
  18. 优宝库强势入围深圳创新创业大赛半决赛,珠宝行业仅此一家
  19. zoj 1377 Grandpa‘s Estate
  20. 2019最新《Python安全工具开发应用教程》

热门文章

  1. Qt编写地图综合应用19-地图服务
  2. 2022年唯品会年货节活动力度咋样?
  3. PHP仿百度网盘文件分享dzzoffice网盘系统源码
  4. 生物信息学技术在罕见病研究中的应用
  5. Arduino空气污染温湿度MQ135烟雾检测报警ESP8266 手机App socket
  6. DataTables warning: table id=tableEquipment - Cannot reinitialise DataTable配上代码解决
  7. 计算机虚拟空间怎么设置,虚拟内存怎么设置最好,教您电脑虚拟内存怎么设置最好...
  8. 开源的第三方支付系统
  9. 租车战场没有新故事,一嗨租车能否破局?
  10. 快来直播:“东方甄选”火爆影射直播新趋势——为知识买单