K8S实战-配置中心(一)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这个配置文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes中给Zookeeper集群设置登录密码,可以通过配置Kubernetes中的ConfigMap实现。具体步骤如下: 1. 创建一个ConfigMap,将Zookeeper的配置文件放入ConfigMap中,如: ``` apiVersion: v1 kind: ConfigMap metadata: name: zookeeper-config data: zoo.cfg: | tickTime=2000 dataDir=/data clientPort=2181 authProvider.1=org.apache.zookeeper.server.auth.DigestAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000 # 添加以下内容 authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider kerberos.removeHostFromPrincipal=true kerberos.removeRealmFromPrincipal=true ``` 2. 在Zookeeper的配置文件中添加以下内容: ``` authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider jaasLoginRenew=3600000 kerberos.removeHostFromPrincipal=true kerberos.removeRealmFromPrincipal=true ``` 3. 在Kubernetes的Secret中创建一个用户名和密码,如: ``` apiVersion: v1 kind: Secret metadata: name: zookeeper-auth type: Opaque data: username: YWRtaW4= password: MWYyZDFlMmU2N2Rm ``` 4. 在Zookeeper的配置文件中设置ACL,如: ``` setAcl /zookeeper digest:username:password:rwca ``` 其中,`username`和`password`是在步骤3中创建的用户名和密码。 5. 在Zookeeper的Pod的配置文件中设置环境变量,将用户名和密码传递给Zookeeper,如: ``` apiVersion: v1 kind: Pod metadata: name: zookeeper-0 spec: containers: - name: zookeeper image: zookeeper:3.5.8 env: - name: ZOO_MY_ID value: "0" - name: ZOO_SERVERS value: "server.0=zookeeper-0.zookeeper:2888:3888;server.1=zookeeper-1.zookeeper:2888:3888;server.2=zookeeper-2.zookeeper:2888:3888" - name: ZOO_ADMINSERVER_ENABLED value: "false" - name: ZOO_AUTH_PROVIDER_1 value: "org.apache.zookeeper.server.auth.SASLAuthenticationProvider" - name: ZOO_JAAS_LOGIN_RENEW value: "3600000" - name: ZOO_KERBEROS_REMOVE_HOST_FROM_PRINCIPAL value: "true" - name: ZOO_KERBEROS_REMOVE_REALM_FROM_PRINCIPAL value: "true" - name: ZOO_SERVER_PRINCIPAL value: "zookeeper/_HOST@EXAMPLE.COM" - name: ZOO_CLIENT_PRINCIPAL value: "zookeeper@EXAMPLE.COM" - name: ZOO_CLIENT_KEYTAB value: "/etc/security/keytabs/zookeeper.keytab" - name: ZOO_AUTHORIZATION value: "true" - name: ZOO_REQUIRES_AUTH value: "true" - name: ZOO_USERNAME valueFrom: secretKeyRef: name: zookeeper-auth key: username - name: ZOO_PASSWORD valueFrom: secretKeyRef: name: zookeeper-auth key: password ``` 其中,`ZOO_AUTH_PROVIDER_1`、`ZOO_JAAS_LOGIN_RENEW`、`ZOO_KERBEROS_REMOVE_HOST_FROM_PRINCIPAL`、`ZOO_KERBEROS_REMOVE_REALM_FROM_PRINCIPAL`、`ZOO_SERVER_PRINCIPAL`、`ZOO_CLIENT_PRINCIPAL`、`ZOO_CLIENT_KEYTAB`、`ZOO_AUTHORIZATION`和`ZOO_REQUIRES_AUTH`是为了启用Kerberos认证,如果不需要可以不配置。 这样就可以在Kubernetes中给Zookeeper集群设置登录密码了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值