二十一. Kubernetes 配置的创建与使用

文章介绍了Kubernetes(K8s)中的两种重要配置管理工具:Secret和ConfigMap。Secret主要用于存储敏感信息如密码,可作为环境变量或通过卷挂载使用;ConfigMap则用于保存非敏感配置,支持多种使用方式,如环境变量、命令行参数或存储卷中的配置文件。文章提供了详细的创建和使用示例。
摘要由CSDN通过智能技术生成

一. 配置基础

  1. 先说一下k8s中配置相关的一些推荐点
  1. 配置分离,也就是不跟服务放在一起
  2. 涉及到版本回滚等问题,配置也推荐使用版本控制
  3. 推荐使用yaml类型配置文件
  4. 同一应用的不同配置,推荐根据环境分组,并且多个配置放到一个文件中方便管理
  1. k8s中的配置比较重要的就是两种:
  1. Secret: 通常用来保存敏感信息
  2. ConfigMap: 应用级别相关配置,非加密

二. Secret 配置介绍与使用示例

  1. 官方文档
  2. Secret通常用来保存敏感信息,例如密码、OAuth 令牌和 SSH 密钥,用户可以创建 Secret,同时k8s系统也会创建Secret

可以理解为将敏感信息存储为Secret配置,需要该配置的应用通过挂载引用即可,不再对外暴露,更安全

  1. Secret配置也分为不同类型:(可以执行"kubectl create secret --help" 命令查看解释)
  1. Opaque: 用户自定义的任意kv数据(例如服务应用需要的数据)
  2. docker-register: 下载私有镜像,连接私库的秘钥
  3. generic:
  4. tls: 证书相关
  5. 其它:
    在这里插入图片描述

Secret 的创建

  1. 通命令行创建 Secret 示例
//创建Secret ,名为 dev-db-secret, 内部存储了username值为devuser与password值为aaabbb
kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password=aaabbb
  1. yaml创建示例,注意在自己编写Secret的yaml时,data内部的数据key值不变,对应的value要使用base64编码后的
apiVersion: v1
kind: Secret
metadata:
  name: dev-db-secret  
data: 
  password: aaabbb  #base64
  username: ZGV2dXNlcg==
  sss: sss
  1. 也可以根据文件创建Secret
kubectl create secret generic db-user-pass \
  --from-file=./username.txt \
  --from-file=./password.txt

Secret 的使用

  1. Secret 创建完毕后会保存到etcd,有两种使用方式
  1. 作为pod.env环境变量获取,注意该方式不会热更新
  2. 以挂载的方式使用Secret
  1. 首先执行命令查看需要的secret配置文件是否存在
kubectl get secret 文件名 -oyaml

1. pod.env 中作为环境变量获取使用 Secret

  1. 注意该方式不支持热更新,示例解释:
  1. containers中通过env设置环境变量,
  2. 在设置环境变量时,通过name属性,指定环境变量的key值为"SECRET_USERNAME",通过valueFrom中的secretKeyRef设置"SECRET_USERNAME"这个key对应的value来自一个Secret
  3. secretKeyRef.name: 指定使用哪个Secret,
  4. secretKeyRef.key:指定使对应Secret中哪个key的value
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env: #设置环境变量
      - name: SECRET_USERNAME #指定环境变量中的key
        valueFrom: #设置对应key的value
          secretKeyRef: #指定value来自secret
            name: mysecret #指定使用的secret的名字
            key: username #指定使用secret中哪个key的value
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
  restartPolicy: Never

2. 以卷挂载的方式使用 Secret

  1. 在使用挂载方式时,获取secret中的key会以文件的形式挂载到对应需要的容器中
  2. 卷挂载的方式使用Secret 时,支持热更新,示例解释:
  1. mypod容器设置对外挂载目录为"/etc/foo", 名为foo
  2. pod中使用volumes对foo挂载点设置挂载了一个名为mysecret 的secret
  3. secret中的key会以文件的形式挂载,如果mysecret 中存在password这个key,那么挂载时,会把password作为"password.txt"文件挂载到容器的"/etc/foo"目录下
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts: #设置挂载
    - name: foo 
      mountPath: "/etc/foo" #设置挂载路径,也就是当前容器内部的路径
      readOnly: true #设置当前通过此处挂载的外部文件的模式,true时不允许通过此处修改挂载的文件
  volumes: #设置挂载
  - name: foo #与指定容器设置的挂载名对应,也就指定设置哪个容器的挂载
    secret: #指定挂载类型,当前挂载secret
      secretName: mysecret #对应secret的名字,该方式是挂载该secret下的所有key
  - name: foo2
    secret:
      secretName: mysecret2
      items:
      - key: password.txt #也就是获取mysecret2 这个secret中key为password数据
        path: pwd.md #可以理解为获取password.txt数据文件,设置为pwd.md

三. ConfigMap 介绍与使用示例

  1. 通常情况下ConfigMap用来保存配置,将配置数据和应用程序代码分开,与Secret 不同的是,Secret 中保存的数据value是经过base64编码后的,读取Secret时会自动解码,而ConfigMap不会编码,读取时也不会解码官方文档
  2. ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中,可以将其用作环境变量、命令行参数或者存储卷中的配置文件, 例如使用配置中心时,不同环境通过配置中心引用不同的配置文件, 现在将配置文件改为ConfigMap,不同环境引用不同的ConfigMap 即可

ConfigMap 创建

  1. yaml方式创建ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data: # 存储的kv键值对
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"
  #类文件设置示例,可以简单理解为设置game.properties配置文件,添加key为enemy.types对应value为aliens,monsters...
  game.properties: | #"|"表示有多个kv
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true

ConfigMap 的使用

  1. 可以通过四种方式来使用 ConfigMap 配置 Pod 中的容器
  1. 在容器命令和参数内
  2. 容器的环境变量
  3. 在只读卷里面添加一个文件,让应用来读取
  4. 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap
apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env: #定义环境变量
        - name: PLAYER_INITIAL_LIVES # 请注意这里和 ConfigMap 中的键名是不一样的
          valueFrom:
            configMapKeyRef: #通过该属性值指定使用configMap配置
              name: game-demo #指定使用的ConfigMap名字
              key: player_initial_lives #指定要取对应configMap中的哪个key
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config #挂载名
        mountPath: "/config" #挂载路径
        readOnly: true
  volumes: #设置挂载
    - name: config
      configMap: #指定挂载configMap配置
        name: game-demo #需要挂载的configMap名字
        items:
        - key: "game.properties" #在挂载时configMap中的每一个key都会挂载为一个properties配置文件,指定使用哪个
          path: "game.properties" #将获取到key.properties设置为当前需要的key
        - key: "user-interface.properties"
          path: "user-interface.properties"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值