zoukankan      html  css  js  c++  java
  • kubernetes实战-配置中心(一)configmap资源

    在我们的环境中测试使用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这个配置文件。

  • 相关阅读:
    https证书设置以及设置301跳转
    SVN服务器从windows迁移至Linux
    禅道从windows迁移到linux
    gitlab安装和迁移
    java 枚举类型enum 的使用
    java中的日期注意事项
    C# using 三种使用方式 zhuan
    设计路径测试覆盖率与代码测试覆盖率
    Selenium API (C#) 转
    Selenium 2.0 WebDriver with Visual Studio, C#, & IE
  • 原文地址:https://www.cnblogs.com/slim-liu/p/11996969.html
Copyright © 2011-2022 走看看