k8s配置中心实战-configmap资源

0 configmap前置说明

0.1.1 configmap和secret

在K8S中,有两种方式管理资源的配置,分别是configmap和secret,他们的最大区别是:

  1. configmap用来管理明文配置
  2. secret用来管理密文配置

0.1.2 怎么使用configmap

  1. 创建configmap资源
  2. 在deploy中定义congfigmap类型的volumes
  3. 在deoloy的containers中挂载此volumes

0.1.3 更新configmap配置的方法

单配置更新法:

  1. 修改configmap资源清单并应用
  2. 重启使用该configmap资源的pod

多配置更换法:

  1. 准备多个configmap资源
  2. 修改dp中使用的configmap
  3. 重新apply该dp,pod会自动重启

1 configmap使用准备

使用configmap前,需要先做如下准备工作

1.1 清理资源

先将前面部署的3个dubbo服务的POD个数全部调整(scale)为0个,避免在应用configmap过程中可能的报错,也为了节省资源

直接在dashboard上操作即可,

1.2 拆分zk集群

将3个zk组成的集群,拆分成独立的zk单机服务,分别表示测试环境和开发环境(节约资源)

IP地址 ZK地址 角色
10.4.7.11 zk1.zq.com test测试环境
10.4.7.12 zk2.zq.com pro生产环境

停止3个zk服务

sh /opt/zookeeper/bin/zkServer.sh stop
rm -rf /data/zookeeper/data/*
rm -rf /data/zookeeper/logs/*

注释掉集群配置

sed -i 's@^server@#server@g' /opt/zookeeper/conf/zoo.cfg

启动zk单机

sh /opt/zookeeper/bin/zkServer.sh start
sh /opt/zookeeper/bin/zkServer.sh status

1.3 创建dubbo-monitor资源清单

老规矩,资源清单在7.200运维机上统一操作

cd /data/k8s-yaml/dubbo-monitor

1.3.1 创建comfigmap清单

cat >cm.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
name: dubbo-monitor-cm
namespace: infra
data:
dubbo.properties: |
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=zqkj
dubbo.registry.address=zookeeper://zk1.zq.com:2181
dubbo.protocol.port=20880
dubbo.jetty.port=8080
dubbo.jetty.directory=/dubbo-monitor-simple/monitor
dubbo.charts.directory=/dubbo-monitor-simple/charts
dubbo.statistics.directory=/dubbo-monitor-simple/statistics
dubbo.log4j.file=/dubbo-monitor-simple/logs/dubbo-monitor.log
dubbo.log4j.level=WARN
EOF

其实就是把dubbo-monitor配置文件中的内容用configmap语法展示出来了

当然最前面加上了相应的元数据信息

如果转换不来格式,也可以使用命令行工具直接将配置文件转换为configmap

kubectl create configmap <map-name> <data-source>
# <map-name> 是希望创建的ConfigMap的名称,<data-source>是一个目录、文件和具体值。

案例如下:

# 1.通过单个文件创建ConfigMap
kubectl create configmap game-config-1 --from-file=/xxx/xxx.properties # 2.通过多个文件创建ConfigMap
kubectl create configmap game-config-2 \
--from-file=/xxx/xxx.properties \
--from-file=/xxx/www.properties # 3.通过在一个目录下的多个文件创建ConfigMap
kubectl create configmap game-config-3 --from-file=/xxx/www/

1.3.2 修改deploy清单内容

为了和原来的dp.yaml对比,我们新建一个dp-cm.yaml

cat >dp-cm.yaml <<'EOF'
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: dubbo-monitor
namespace: infra
labels:
name: dubbo-monitor
spec:
replicas: 1
selector:
matchLabels:
name: dubbo-monitor
template:
metadata:
labels:
app: dubbo-monitor
name: dubbo-monitor
spec:
containers:
- name: dubbo-monitor
image: harbor.zq.com/infra/dubbo-monitor:latest
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 20880
protocol: TCP
imagePullPolicy: IfNotPresent
#----------------start---------------------------
volumeMounts:
- name: configmap-volume
mountPath: /dubbo-monitor-simple/conf
volumes:
- name: configmap-volume
configMap:
name: dubbo-monitor-cm
#----------------end-----------------------------
imagePullSecrets:
- name: harbor
restartPolicy: Always
terminationGracePeriodSeconds: 30
securityContext:
runAsUser: 0
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600
EOF

注释中的内容就是新增在原dp.yaml中增加的内容,解释如下:

  1. 申明一个卷,卷名为configmap-volume
  2. 指定这个卷使用名为dubbo-monitor-cm的configMap
  3. containers中挂载卷,卷名与申明的卷相同
  4. mountPath的方式挂载到指定目录

1.4 创建资源并检查

1.4.1 应用资源配置清单

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml

1.4.2 dashboard检查创建结果

在dashboard中查看infra名称空间中的configmap资源

然后检查容器中的配置

kubectl -n infra exec -it dubbo-monitor-5b7cdddbc5-xpft6 bash
# 容器内
bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=zqkj
dubbo.registry.address=zookeeper://zk1.zq.com:2181
....

1.4.3 检查dubbo-monitor页面的注册信息

2 更新configmap资源

2.1 多配置更新法

2.1.1 准备新configmap

再准备一个configmap叫cm-pro.yaml

cp cm.yaml cm-pro.yaml

# 把资源名字改成dubbo-monitor-cm-pro
sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' cm-pro.yaml # 把服务注册到zk2.zq.com上
sed -i 's#zk1#zk2#g' cm-pro.yaml

2.1.2 修改deploy配置

sed -i 's#dubbo-monitor-cm#dubbo-monitor-cm-pro#g' dp-cm.yaml

2.1.3 更新资源

# 应用新configmap
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/cm-pro.yaml # 更新deploy
kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml

2.1.4 检查配置是否更新

新的pod已经起来了

~]# kubectl -n infra get pod
NAME READY STATUS RESTARTS AGE
dubbo-monitor-c7fbf68b9-7nffj 1/1 Running 0 52s

进去看看是不是应用的新的configmap配置:

kubectl  -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash
# 容器内
bash-4.3# cat /dubbo-monitor-simple/conf/dubbo.properties |grep zook
dubbo.registry.address=zookeeper://zk2.zq.com:2181

看下dubbo-monitor的页面:已经是zk2了。

3 挂载方式探讨

3.1 monutPath挂载的问题

我们使用的是mountPath,这个是挂载整个目录,会使容器内的被挂载目录中原有的文件不可见,可以看见我们。

查看我们pod容器启动的命令可以看见原来脚本中的命令已经无法对挂载的目录操作了

如何单独挂载一个配置文件:

只挂载单独一个文件而不是整个目录,需要添加subPath方法

3.2 单独挂载文件演示

3.2.1 更新配置

dp-cm.yaml的配置中,将原来的volume配置做一下更改

#----------------start---------------------------
volumeMounts:
- name: configmap-volume
mountPath: /dubbo-monitor-simple/conf
volumes:
- name: configmap-volume
configMap:
name: dubbo-monitor-cm
#----------------end----------------------------- # 调整为 #----------------start---------------------------
volumeMounts:
- name: configmap-volume
mountPath: /dubbo-monitor-simple/conf
- name: configmap-volume
mountPath: /var/dubbo.properties
subPath: dubbo.properties
volumes:
- name: configmap-volume
configMap:
name: dubbo-monitor-cm
#----------------end-----------------------------

3.2.2 应用apply配置并验证

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp-cm.yaml
kubectl -n infra exec -it dubbo-monitor-5cb756cc6c-xtnrt bash
# 容器内操作
bash-4.3# ls -l /var/
total 4
drwxr-xr-x 1 root root 29 Apr 13 2016 cache
-rw-r--r-- 1 root root 459 May 10 10:02 dubbo.properties
drwxr-xr-x 2 root root 6 Apr 1 2016 empty
.....

K8S(10)配置中心实战-configmap资源的更多相关文章

  1. K8S(11)配置中心实战-单环境交付apollo三组件

    k8s配置中心实战-交付apollo三组件 目录 k8s配置中心实战-交付apollo三组件 1 apollo简单说明 1.1 apollo最简架构图: 1.2 apollo组件部署关系 2 为app ...

  2. K8S(12)配置中心实战-多环境交付apollo三组件

    k8s配置中心实战-多环境交付apollo三组件 目录 k8s配置中心实战-多环境交付apollo三组件 1.环境准备工作 1.1 zk环境拆分 1.2 namespace分环境 1.3 数据库拆分 ...

  3. SpringCloud配置中心实战

    SpringCloud配置中心实战 1.统一配置中心(Config) 1.1 Spring项目配置加载顺序 1.2 配置规则详解 1.3 Git仓库配置 1.3.1 使用占位符 1.3.2 模式匹配 ...

  4. 微服务配置中心实战:Spring + MyBatis + Druid + Nacos

    在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring ...

  5. zookeeper配置中心实战--solrcloud zookeeper配置中心原理及源码分析

    程序的发展,需要引入集中配置: 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境.分集群管理配 ...

  6. Spring Cloud Config 配置中心实践过程中,你需要了解这些细节!

    本文导读: Spring Cloud Config 基本概念 Spring Cloud Config 客户端加载流程 Spring Cloud Config 基于消息总线配置 Spring Cloud ...

  7. kubernetes实战-配置中心(一)configmap资源

    在我们的环境中测试使用configmap资源,需要先对我们的环境进行一些准备,首先将dubbo服务调整为0个pod ,然后把zookeeper进行拆分: 拆分zk环境,模拟测试环境跟生产环境: 停止z ...

  8. kubernetes实战-配置中心(二)交付apollo配置中心到k8s

    apollo官网:官方地址 apollo架构图: apollo需要使用数据库,这里使用mysql,注意版本需要在5.6以上: 本次环境mysql部署在10.4.7.11上,使用mariadb:10.1 ...

  9. SpringCloud Alibaba实战(10:分布式配置中心)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在我们前面介绍Nacos的时候,说到,Nacos除了可以作为注册中心,还可以作为配置 ...

随机推荐

  1. SVM 支持向量机算法-原理篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇来介绍SVM 算法,它的英文全称是 Support Vector Machine,中文翻译为支持向量机. ...

  2. 腾讯云COS对象存储占据数据容灾C位

    说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...

  3. 把vscode打造成技术写作神器

    作为技术开发,大家平时肯定需要记录技术笔记.甚至有的同学还开通可自己的技术博客或者技术公众号进行创作. 这个时候有套趁手的写作工具尤为重要,节省下时间好好休息一下,对于咱们程序员来说更加重要.因为最近 ...

  4. VKM5对应的BAPI或者函数

    在业务上,当一个交货单创建后,可能需要使用事物VKM5进行批准(解冻)才能做后续的捡配,发货过账等操作,通过搜索引擎发现,很多人也都会问是否有对应的bapi或者函数,替代VKM5,能够自开发程序进行批 ...

  5. 集成Redis缓存

    一.简介 1.场景 由于首页数据变化不是很频繁,而且首页访问量相对较大,所以我们有必要把首页数据缓存到redis中,减少数据库压力和提高访问速度. 2.RedisTemplate Jedis是Redi ...

  6. 倍增小结 ST 与 LCA

    倍增 倍增我是真滴不会 倍增法(英语:binary lifting),顾名思义就是翻倍. 能够使线性的处理转化为对数级的处理,大大地优化时间复杂度. (ps:上次学倍增LCA,没学会,老老实实为了严格 ...

  7. 微信小程序--使用云开发完成支付闭环

    微信小程序--使用云开发完成支付闭环 1.流程介绍 2. 代码实现和逻辑思想描述 云函数统一下单 对应云函数 unipay [CloudPay.unifiedOrder] 函数思路 : 调用云函数封装 ...

  8. ESRI,空间数据处理,WKT,GeoJson

    ESRI,空间数据处理,WKT,GeoJson 一.WKT 二.GeoJson 三.WKT转GeoJson 四.GeoJson 转 WKT 一.WKT WKT(well-known text)是一种文 ...

  9. Jenkins (1、自动化发布war包、2、自动化发布nodejs)

    1.持续集成javaweb 首先咱们需要安装一个 Jenkins,这个就不必多说了,晚上一搜索一大把,然后安装各种插件,配置各种环境变量, 今天我的实验环境是 使用Jenkins 拉取gitlap上项 ...

  10. 分布式理论 PACELC 了解么?

    PACELC 基于 CAP 理论演进而来. CAP 理论是一个分布式系统中老生常谈的理论了: C(Consistency):一致性,所有节点在同一时间的数据完全一致. A(Availability): ...