zoukankan      html  css  js  c++  java
  • 第10章:管理应用程序配置

    10.1 secret

    secret加密数据并存放Etcd中,让Pod的容器以挂载Volume方式访问。

    应用场景:凭据、https证书、secret存放docker registry认证信息、存放文件内容或者字符串,例如用户名密码

    Pod使用secret两种方式:

    • 变量注入

    • 挂载

    1 创建一个secret用于保存应用程序用到的用户名和密码

    创建用户名和密码:

    # echo -n 'admin' | base64
    YWRtaW4=
    # echo -n '1f2d1e2e67df' | base64
    MWYyZDFlMmU2N2Rm

    创建secret:

    apiVersion: v1
    kind: Secret
    metadata:
    name: mysecret
    type: Opaque
    data:
    username: YWRtaW4=
    password: MWYyZDFlMmU2N2Rm

    2 变量注入方式在pod中使用secret

    创建pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - name: nginx
        image: nginx
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: username
          - name: SECRET_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: password

    进入到Pod中测试是否传入变量:

    # kubectl exec -it mypod bash
    # echo $SECRET_USERNAME
    admin
    # echo $SECRET_PASSWORD
    1f2d1e2e67df

    2 数据挂载方式在Pod中使用secret

    创建pod:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: foo
          mountPath: "/etc/foo"
          readOnly: true
      volumes:
      - name: foo
        secret:
          secretName: mysecret

    进入到Pod中测试是否写入文件:

    # kubectl exec -it mypod bash
    # cat /etc/foo/username
    admin
    # cat /etc/foo/password
    1f2d1e2e67df

    如果你的应用程序使用secret,应遵循Pod获取该数据的方式。

    10.2 configmap

    与Secret类似,区别在于ConfigMap保存的是不需要加密配置信息。

    应用场景:应用配置文件

    1 创建一个configmap用于保存应用程序用到的字段值

    创建字段

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: myconfig
    namespace: default
    data:
    special.level: info
    special.type: hello

    2 变量注入方式在Pod中使用configmap:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: busybox
          image: busybox
          command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
          env:
            - name: LEVEL
              valueFrom:
                configMapKeyRef:
                  name: myconfig
                  key: special.level
            - name: TYPE
              valueFrom:
                configMapKeyRef:
                  name: myconfig
                  key: special.type
      restartPolicy: Never

    查看Pod日志就可以看到容器里打印的键值了:

    # kubectl logs mypod 
    info hello

    2 数据挂载方式在pod中使用configmp

    举一个常见的用法,例如将应用程序的配置文件保存到configmap中,这里以redis为例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: redis-config
    data:
      redis.properties: |
        redis.host=127.0.0.1
        redis.port=6379
        redis.password=123456
    ---
    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      containers:
        - name: busybox
          image: busybox
          command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: redis-config
      restartPolicy: Never

    查看Pod日志就可以看到容器里打印的文件了:

    # kubectl logs mypod 
    redis.host=127.0.0.1
    redis.port=6379
    redis.password=123456

    10.3 应用程序如何动态更新配置?

    ConfigMap更新时,动态让应用生效方案: 1、重建pod 2、应用程序本身实现监听本地配置文件,如果发生变化触发配置热更新 3、使用sidecar容器监听配置文件是否更新,如果发生变化触发socket、http通知应用热更新 4、采用配置中心,例如nacos、apollo

  • 相关阅读:
    LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods
    LINQ to SQL语句(8)之Concat/Union/Intersect/Except
    LINQ to SQL语句(7)之Exists/In/Any/All/Contains
    LINQ to SQL语句(6)之Group By/Having
    LINQ to SQL语句(5)之Order By
    LINQ to SQL语句(4)之Join
    LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg
    LINQ to SQL语句(2)之Select/Distinct
    java 开发工具记录
    H5播放器内置播放视频(兼容绝大多数安卓和ios)
  • 原文地址:https://www.cnblogs.com/LiuChang-blog/p/14747278.html
Copyright © 2011-2022 走看看