【云驻共创】华为云云原生黄金课程08:Kubernetes应用配置管理

小鲍侃java 发表于 2022/01/24 11:34:49 2022/01/24
【摘要】 上节课我们介绍了kubernetes服务对外暴露的方式通过Service和ngress解决的是服务暴露问题,具体的服务实现还需要Pod来完成,Pod的运行通常需要为其提供配置接下来的课程我们将为大家介绍kubernetes ConfigMap和 Secret基本概念和使用场。

上节课我们介绍了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应用配置管理

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。