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

拆分zk环境,模拟测试环境跟生产环境:

停止zookeeper:

# sh /opt/zookeeper/bin/zkServer.sh stop
# rm -rf /data/zookeeper/data/*
# rm -rf /data/zookeeper/logs/*
# vi /opt/zookeeper/conf/zoo.cfg

注释掉集群配置:

启动zookeeper:

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

创建资源配置清单:

1、cm.yaml  红色部分是配置文件的name,下面的是内容。

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=OldboyEdu
dubbo.registry.address=zookeeper://zk1.od.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

2、dp-cm.yaml

在dp里面如何使用configmap资源:

首先声明一个卷,卷的名字叫configmap-volume,然后指定这个卷使用的configmap

然后定义这个卷的挂载,挂载到哪里。

# vi dp-cm.yaml
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.od.com/infra/dubbo-monitor:latest
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 20880
protocol: TCP
imagePullPolicy: IfNotPresent
volumeMounts:
- name: configmap-volume
mountPath: /dubbo-monitor-simple/
conf
volumes:
- name: configmap-volume
configMap:
name: dubbo-monitor-
cm
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

应用资源配置清单:

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

去dashboard查看configmap资源:

我们可以创建多个configmap资源,然后在dp中去挂载应用这些configmap资源,达到修改配置的功能。

我们检查一下我们的容器:

# kubectl get pod -n infra

已经起来了

我们检查一下我们挂载的配置是不是我们定义的configmap资源中的配置:

# kubectl exec -it dubbo-monitor-6676dd74cc-pvf2f -n infra /bin/bash

我们把配置文件挂载到了/dubbo-monitor-simple/conf 这里,我们去看一下。(上面的dp-cm.yaml中声明的)

# cat /dubbo-monitor-simple/conf/dubbo.properties

跟我们定义的一模一样。

这里如果想更换配置,有两种方法:

  一、修改configmap 资源,然后apply一下更新资源,然后重启挂载这个configmap资源的dp。

  二、准备多个configmap资源,然后在dp中更改挂载的configmap,apply以后,dp自动重启。

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

连接的zk1.od.com,下面我们模拟更换configmap资源,来切换环境:

这里使用第二种方法,准备多个configmap,我们在准备一个configmap,就叫cm-pro.yaml:

# cp cm.yaml cm-pro.yaml
# vi cm-pro.yaml

然后我们把服务注册到zk2.od.com上:

把资源名字改成dubbo-monitor-cm-pro

把服务注册到zk2上:

应用一下cm-pro.yaml:

# kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/cm-pro.yaml

然后我们修改dp-cm.yaml:

然后apply这个dp-cm.yaml:

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

新的已经起来了,我们进去看看是不是应用的新的configmap配置:

# kubectl exec -it dubbo-monitor-5cb756cc6c-xtnrt -n infra /bin/bash
# cat /dubbo-monitor-simple/conf/dubbo.properties 

已经生效了。

更新configmap资源来更改配置需要更新(删除/apply/update)pod,否则无效。

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

但是注意,我们这里使用的是mountPath,这个是挂载整个目录,会使容器内的被挂载目录中原有的文件不可见,可以看见我们原来脚本中的命令已经无法对挂载的目录操作了。

查看我们pod容器启动的命令可以看见:如果想单独挂载一个配置配件,而不是整个目录,如何操作:

这里我使用之前的nginx:curl来做如何挂载单个的文件:

查看资源key的使用方法:

# kubectl explain pod.spec.containers.volumeMounts

这里有个挂载方法是:subPath,使用这个方法,可以挂载指定的文件,要结合mountPath来使用:

查看我们原来实验做的nginx:curl这个容器:在default命名空间里。

我们实验的需求,把dubbo.properties这个配置文件挂载到/usr/lib/目录下,并且保证原来容器内/usr/lib/目录下的文件都还在:

# kubectl get pod

进入容器查看容器内/usr/lib/下有哪些文件:

在default命名空间下创建configmap资源:

应用configmap资源配置清单:

# kubectl apply -f http://k8s-yaml.od.com/nginx-ds/cm.yaml

然后修改这个容器的资源配置清单:

# kubectl edit ds nginx-ds -n default

挂载configmap资源:一定要注意格式跟缩进~~~~

然后重启pod

登录进容器中,查看:

经过对比,我们原来/usr/lib/下的文件还在,并且新增了一个配置文件dubbo-properties这个配置文件。

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

  1. kubernetes实战-配置中心(四)分环境使用apollo配置中心

    要进行分环境,需要将现有实验环境进行拆分 portal服务,可以各个环境共用,但是apollo-adminservice和apollo-configservice必须要分开. 1.zk环境拆分为tes ...

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

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

  3. kubernetes实战-配置中心(三)配置服务使用apollo配置中心

    使用配置中心,需要开发对代码进行调整,将一些配置,通过变量的形式配置到apollo中,服务通过配置中心来获取具体的配置 在配置中心修改新增如下配置: 项目信息: 配置: 重新打包镜像,使用apollo ...

  4. Kubernetes 实战——配置应用(ConfigMap、Secret)

    配置容器化应用的方式:①命令行参数:②环境变量:③文件化配置 一.向容器传递命令行参数或环境变量 这两种方式在 Pod 创建后不可被修改 1. 在Docker中定义命令与参数 ENTRYPOINT:容 ...

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

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

  6. K8S(10)配置中心实战-configmap资源

    k8s配置中心实战-configmap资源 目录 k8s配置中心实战-configmap资源 0 configmap前置说明 0.1.1 configmap和secret 0.1.2 怎么使用conf ...

  7. (转)实验文档3:在kubernetes集群里集成Apollo配置中心

    使用ConfigMap管理应用配置 拆分环境 主机名 角色 ip HDSS7-11.host.com zk1.od.com(Test环境) 10.4.7.11 HDSS7-12.host.com zk ...

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

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

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

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

随机推荐

  1. Android 中使用 config.gradle

    各位同学大家好,当然了如果不是同学,那么大家也同好.哈哈. 大家知道config.gradle 是什么吗?我也不知道.开个完笑,其实config.gradle 就是我们为了统一gradle 中的各种配 ...

  2. 【Android】编译报错 Annotation processors must be explicitly declared now 解决方案

    问题 在网上下载一个demo,因为版本久远,里面添加了本地 Butter Knife 的jar包,在编译时报错 Annotation processors must be explicitly dec ...

  3. 将汉字取模软件中的汉字放到keil5中显示

    最近因为要使用STM32做毕业设计,需要用LCD显示中文,STM32开发板用的是原子的战舰STM32开发板,给的LCD显示例程里貌似没有中文显示,那么需要自己去编写中文显示程序. 软件编写对我来说并不 ...

  4. shell批量解压源码包

    有时候部署环境有很多安装包,如果一个一个地解压缩实在太麻烦了,可以用shell批量进行解压缩.命令如下: [root@localhost ~]# vi tar.sh #! /bin/bash #标称是 ...

  5. LiteOS调测利器:backtrace函数原理知多少

    摘要:本文将会和读者分享LiteOS 5.0版本中Cortex-M架构的backtrace软件原理及实现,供大家参考和学习交流. 原理介绍 汇编指令的执行流程 图 1 汇编指令的执行顺序 上图1所示, ...

  6. 借助 AppleScript 一键打开工作空间

    我有个小毛病:同时只能在一个工程里工作. 假如让我开四五个 Webstorm,在工程里 A 改个Bug,然后又到工程 B 里加个需求,再去工程 C 发个版,切来切去一会儿就懵了. 于是有了这个项目:m ...

  7. (Oracle)关于blob转到目标库报ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误解决方案

    在数据抽取时,开发需要clob类型的数据,但是目标库类型是blob类型的,于是抽取的时候报错: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值错误 可能有以下几种原因: 可能有以下 ...

  8. 函数式编程 偏函数 生成器 yield

    高阶函数 # 高阶函数def f(x): return x * x# map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Ite ...

  9. codevs3639

    题目描述 Description 给出一棵树,求出树的中心. 为了定义树的中心,首先给每个结点进行标号.对于一个结点K,如果把K从树中删除(连同与它相连的边一起),剩下的被分成了很多块,每一块显然又是 ...

  10. 反向传播(Back Propagation)

    反向传播(Back Propagation) 通常在设计好一个神经网络后,参数的数量可能会达到百万级别.而我们利用梯度下降去跟新参数的过程如(1).但是在计算百万级别的参数时,需要一种有效计算梯度的方 ...