第8章 K8s基础篇-配置管理
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基础篇-配置管理相关推荐
- k9.第三章 K8s基础篇-必备Docker知识 (二)
3.Dockerfile用法 FROM:继承基础镜像 MAINTAINER:镜像制作作者信息 LABEL:镜像制作作者信息,新版建议使用LABEL RUN:用来执行shell命令 EXPOSE:暴露端 ...
- 【面试宝典】软件测试工程师2021烫手精华版(第三章Mysql基础篇)
第三章 Mysql 基础 一. 基础知识 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库 什么是关系型数据库,主键,外键,索引分别是什么? 关系型数据库是由多张能 ...
- k22.第九章 K8s进阶篇-高级调度计划任务临时容器 (三)
4.K8s污点和容忍 Taint&Toleration 4.1 Taint和Toleration设计理念 容忍和污点Taint和Toleration: 设计理念:Taint在一类服务器上打上污 ...
- 从零开始用snakemake搭建完整的甲基化生信分析流程(第一章)基础篇
从零开始用snakemake搭建完整的甲基化生信分析流程 阅读文章后的收获:专业的snakemake编程技能:甲基化分析pipeline 作者生物信息学硕士,6年生信分析师从业经验,快速响应读者问题, ...
- k26.第十一章 K8s进阶篇-细粒度权限控制 (二)
2. RBAC实践 创建一个名为deployment-clusterrole的clusterrole a) 该clusterrole只允许创建Deployment.Daemonset.Statef ...
- ArcGIS 10.6 教程 第03章【基础篇】坐标系
文章目录 坐标系 地理坐标系 椭球体 大地基准面 中国常用坐标系 投影坐标系 高斯克吕格投影GK 墨卡托投影UTM GIS操作 Gauss_Kruger 变为GCS_Xian_1980 GCS_Xia ...
- 【谷粒商城基础篇】仓储服务:仓库维护
谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== 项目简介与分布式概念(第一.二章) 基础环境搭建(第三章) ===整合SpringCloud=== 整合 ...
- 游戏编程之四 diectxdarw基础篇
视频课:https://edu.csdn.net/course/play/7621 第四章 diectxdarw基础篇 第一节 DirectDraw简介 Grubers的一个观点是Direc ...
- 【谷粒商城基础篇】基础环境搭建
谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== 项目简介与分布式概念(第一.二章) 基础环境搭建(第三章) ===整合SpringCloud=== 整合 ...
最新文章
- 如何只训练网络中的全连接层
- android span的用法,Android Span的使用
- C#中gridView常用属性和技巧介绍
- 如何用jquery实现实时监控浏览器宽度
- 【Elasticsearch】elasticsearch bool 布尔 查询
- HDU2073 无限的路【数学】
- 大数据开发笔记(四):Hive数仓调优
- 手机电子词典_一个落榜生的醒悟:我的梦想,是手机夺走的!
- headfirstjava_1.BreakingTheSurface
- Python 每日一记248Java二叉树实现折纸问题
- 史上最全的PS快捷键大全
- win10虚拟机环境下运行驱动程序
- python unrar问题_python利用unrar实现rar文件解压缩
- macbook linux 双系统,mac安装linux双系统的吐槽
- 阿里矢量图标iconfont在微信小程序的使用
- 什么是真正的架构设计?某厂十年Java经验让我总结出了这些,不愧是我
- 关于android分支无法下载的问题,revision froyo in manifests not found
- 优宝库强势入围深圳创新创业大赛半决赛,珠宝行业仅此一家
- zoj 1377 Grandpa‘s Estate
- 2019最新《Python安全工具开发应用教程》
热门文章
- Qt编写地图综合应用19-地图服务
- 2022年唯品会年货节活动力度咋样?
- PHP仿百度网盘文件分享dzzoffice网盘系统源码
- 生物信息学技术在罕见病研究中的应用
- Arduino空气污染温湿度MQ135烟雾检测报警ESP8266 手机App socket
- DataTables warning: table id=tableEquipment - Cannot reinitialise DataTable配上代码解决
- 计算机虚拟空间怎么设置,虚拟内存怎么设置最好,教您电脑虚拟内存怎么设置最好...
- 开源的第三方支付系统
- 租车战场没有新故事,一嗨租车能否破局?
- 快来直播:“东方甄选”火爆影射直播新趋势——为知识买单