【云驻共创】华为云云原生黄金课程08:Kubernetes应用配置管理
上节课我们介绍了kubernetes服务对外暴露的方式通过Service和ngress解决的是服务暴露问题,具体的服务实现还需要Pod来完成,Pod的运行通常需要为其提供配置接下来的课程我们将为大家介绍kubernetes ConfigMap和 Secret基本概念和使用场。
1.课程目标
学完本课程后,您将能够:
- 了解 ConfigMap概念及使用场景
- 了解 Secret概念及使用场景
- 了解华为云CCE服务应用配置操作方法
2.应用配置管理概述
ConfigMap、Secret都服务于pod。为Kubernetes的pod提供配置,可以参看springBoot中的yml文件。
 
 应用配置
- 数据库配置
- 证书配置
- 应用自定义配置
Kubernetes应用配置
- ConfigMap:一般性配置
- Secret:敏感信息配置
2.1 ConfigMap介绍
ConfigMap是一种存储非敏感数据的资源对象
- 以<key- value>形式存储配置数据
Config Map设计要素
- 解耦应用程序(镜像)和配置参数
- 不用于存储大块数据(<=1MB)
Config Map主要服务于Pod
- 为容器提供环境变量
- 为容器提供命令行参数
- 为容器提供配置文件

2.1.1 ConfigMap资源对象
API设计
- 没有Spec字段
Data字段
- 用来保存UTF-8字节序列
- 键名不能与 Binary Data重叠
Binary Data
- 用来保存二进制数据(base64编码
- 键名不能与Data重叠
mutable(v1.19版本)
- 不可变更(禁止修改)
- 保护应用,兔受意外更新带来负面影响
- 提升性能(减轻监视负担)
  
2.1.2 ConfigMap的创建
可以通过命令行创建ConfigMap。
kubectl create configmap my-config --from-literal=key1=config1 --literal=key2=config2
apiVersion: v1
data
  key1:config1
  key2:config2
kind:ConfigMap
metadata
name:my-config
namespace:default
kubectl create configmap my-config--from-file=config=/root/class/config1
api Version:V1
data
config1: 
  This is file content of config1
kind: ConfigMap
metadata
  name:my-config
  namespace:default
2.1.3 Pod中使用ConfigMap
使用 Config Map配置环境变量:
apiVersion:v1
kind:Pod
metadata:
  name: configmap-demo-pod
spec:
containers:
  -name:demo
  mage: alpine
  command: [sleep,3600]
  env:
    -name: PLAYER_INITIAL_LIVES //环境名
     valueFrom: //来源
     configMapKeyRef:
       name:my-config
       ey:player_initial_lives
    -name:UI_PROPERTIES_FILE_NAME
     ValueFrom
       configMapkeyref:
         name:my-config
         key:ul_properties_tlle_name
使用 ContfigMap挂载配置文件:
apiversion:V1
kind:Pod
metadata:
  name:conTigmap-demo-poa
spec:
containers:
  -name:demo
   image:alpine
   command:["sleep","3600"]
   volumeMounts:
     name:config
     mountRath: "/config" //挂载的目录
     readOnly:true
volumes:
  -name:config
   configMap:
     name: my-contig 
     items
       -key:"game.properties"
        path: "game.properties"
2.1.4 Configmap使用小节
- ConfigMap用于存储非敏感应用配置
- 每个 ConfigMap大小限制为1MB
- Config Map必须先于Pod创建,否则Pod无法启动
- Pod只能使用同 Namespace下的 ConfigMap
- 使用 Config map挂载配置文件,会自动更新
- 使用Conη fig Mapi配置环境变量时,不会自动更新
2.2 Secre概述
Secret是一种资源对象
- 以<key-vaue>形式存储敏感数据(密码, token等
Secre设计要素
- 数据采用base-64编码保存(非加密)
- 通常结合 RBAC rules来加强安全性
Secret主要服务于Pod
- 为容器提供环境变量
- 为容器提供镜像仓库密钥(由 kubelet使用
- 为容器提供配置文件
  
2.2.1 Secre资源对象
API设计
- 没有Spec字段
Data字段
- 用来保存UTF-8字节序列
Stringdata
- 任意字符串( write-only)
Immutable(v1.19版本)
- 不可变更(禁止修改)
- 保护应用,兔受意外更新带来负面影响
- 提升kube- pserver性能(减轻监视负担
Secret类型(检查和限制有所区别)
- Opaque:任意数据
- kubernetes io/service-account-token
  
2.2.2 Secre创建
通过命令行创建:
kubectl create secret generic my-secret--from-literal=key1=supersecret --from-literal=key 2=topsecre
apiVersion:V1
data:
  key1:C3VWZXJZZWNyZXQ=
  key2:dG9wc2VicmVO
kind:secret
metadata:
  name:my-secre
  namespace:default
type:Opaque
kubectl create secret generic my-secret--from-file=mykey=/root/class/secretcon
apiVersion:v1
data:
  mykey:VGhpcyBpcyBjb250ZW50IG9mIHNIY3JIdCBjb25maWcuCg
kind:Secret
metadata:
  name:my-secret
  namespace:default
type:Opaque
2.2.3 Pod中使用Secret
使用Secret配置环境变量:
apiVersion:v1
kind:Pod
metadata:
  name:mypod
spec:
containers:
  -name: mycontainer
   image: redis
   env:
     -name: SECRET_USERNAME
     valueFrom:
      secretKeyRef:
        name: mysecre
        key:username
     -name: SECRET PASSWORD
    valueFrom:
      secretKeyRef:
        name:mysecre
        key:password
使用 Secret挂载配置文件:
apiVersion:v1
kind:Pod
metadata:
  name:mypod
spec:
  containers:
    -name: mypod
    image: redis
    volumeMounts:
    -name foo
    mountRath: "/etc/foo"
    readOnly: true
volumes:
-name:foo
 secret:
   secretName: mysecret
2.2.4 Secret使用小节
- Secret用于存储敏感配置(区别于 Config Map)
- 每个 Secret大小限制为1MB
- Pod只能使用同 Namespace下的 Secret
- Secret数据使用Base64编码,本身不提供数据加密 
   - 由于 Secret会以纯文本方式存储在ETCD,需要限制ETCD的访问权限
- 为 Secret设置严格的RBAC规则,限制资源访问
 
3.实验-天气预报简介

 
 共有4个服务模块:
- frontend:前台服务,展示整个应用的页面,使用 React. js开发而成;
- advertisement:广告服务,返回静态的广告图片,使用 Galang开发而成
- forecast:天气预报服务,返回相应城市的天气数据,使用 Node. js开发而成
- recommendation:推荐服务,根据天气情况冋用户推荐穿衣和运动等信息,使用Java
 开发而成。
3.1 实验具体内容
本课实验
 基于CCE集群使用 Config Map和 Secret配置数据库环境变量
实验目标
 使用 ConfigMap和 Secret配置 advertisement服务的 mySQL数据库环境变量
实验前置条件
 已经在CCE集群上部署好了 advertisement服务和 my sQL数据库服务
实验关键步骤
- 通过页面创建 Secret配置
- 通过页面创建 ConfigMap配置
- 通过页面升级为 advertisement应用配置环境变量
- 查看天气预报访问页面观察配置环境变量之后的效果
3.2 具体操作
创建ConfigMap,这里有两个键值。
 
 创建Secret,这里指定有一个键值。
 
 修改Deployment的配置。并挂载上文的Secret、ConfigMap配置。
 
 本文整理自华为云社区【内容共创】活动第12期。
 查看活动详情:https://bbs.huaweicloud.com/blogs/325315
 相关任务详情:任务36. 华为云云原生黄金课程08:Kubernetes应用配置管理
- 点赞
- 收藏
- 关注作者
 
            


 
           
评论(0)