【K8s 精选】CKA - 使用 Configmap 和 Secret 配置 Application

1.使用 Configmap 配置 Application

1.2 创建 Configmap

利用 kubectl apply -f game-demo.yaml 创建 configmap

# game-demo.yaml 的内容如下
apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # 类属性键;每一个键都映射到一个简单的值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # 类文件键
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true 

1.3 Application 挂载 Configmap

利用 kubectl apply -f test-pod.yaml 创建 Pod。

# 方式 1:Configmap 数据定义 Pod 环境变量
# 方式 2:Configmap 数据添加到卷中的特定路径
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        # 方式 1:Configmap 数据定义 Pod 环境变量
        # 请注意这里和 ConfigMap 中的键名是不一样的
        - name: PLAYER_INITIAL_LIVES 
          valueFrom:
            configMapKeyRef:
              name: game-demo           # 这个值来自 ConfigMap
              key: player_initial_lives # 需要取值的键
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/opt/test/config"
        readOnly: true
  volumes:
    # 方式 2:Configmap 数据添加到卷中的特定路径
    - name: config
      configMap:
        # 挂载的 ConfigMap 的名字
        name: game-demo
        # 来自 ConfigMap 的一组键
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"

注意: 挂载 /opt/test/config 目录之前,会删除该目录下所有文件。

挂载的 ConfigMap 将自动更新kubelet 在每次定期同步时都会检查已挂载的 configmap 是否是最新的。 因为使用基于本地 TTL 的缓存来获取 configmap 的当前值,所以更新 configmap 的周期等于 kubelet 同步周期 + TTL。说明: 如果以方式挂载 configMap,则不会自动更新 configMap

2.使用 Secret 配置 Application

2.1 创建 Secret

secret 的使用场景是将敏感数据,例如密码、加密密钥,注入到容器中。

# 步骤一:使用 Base64 编码转换明文的用户名和密码
$echo -n 'my-app' | base64
bXktYXBw
$echo -n '39528$vdg7Jb' | base64
Mzk1MjgkdmRnN0pi

# 步骤二:创建 Secret
# test-secret.yaml 的内容如下
apiVersion: v1
kind: Secret
metadata:
  name: test-secret
data:
  username: bXktYXBw
  password: Mzk1MjgkdmRnN0pi
# 方式 1
$kubectl apply -f test-secret.yaml
# 方式 2
$kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
Name:       test-secret
Namespace:  default
Labels:     <none>
Annotations:    <none>

Type:   Opaque

Data
====
password:   13 bytes
username:   7  bytes

2.2 Application 挂载 Secret

# 方式 1:Secret 数据定义 Pod 环境变量
# 方式 2:Secret 数据添加到卷中的特定路径
apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
      # 方式 1:Secret 数据定义 Pod 环境变量
       - name: SECRET_USERNAME
         valueFrom:
            secretKeyRef:
                name: test-secret
                key: username
       - name: SECRET_PASSWORD
         valueFrom:
            secretKeyRef:
                name: test-secret
                key: password
      volumeMounts:
        # 方式 2:Secret 数据添加到卷中的特定路径
        - name: secret-volume
          mountPath: /opt/test/secret
 Volume.
  volumes:
    - name: secret-volume
      secret:
        secretName: test-secret
# 创建 Pod
$kubectl create -f secret-pod.yaml

# 确认 Pod 正在运行
$kubectl get pod secret-test-pod
NAME              READY     STATUS    RESTARTS   AGE
secret-test-pod   1/1       Running   0          42m

# 获取一个 shell 进入 Pod 中运行的容器
$kubectl exec -it secret-test-pod bash
$ls /etc/opt/secret
password username
$echo "$(cat /etc/opt/secret/username)"
my-app
$echo "$(cat /etc/opt/secret/password)"
39528$vdg7Jb
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容