k8s入门:配置 ConfigMap & Secret

系列文章

第一章:✨ k8s入门:裸机部署 k8s 集群
第二章:✨ k8s入门:部署应用到 k8s 集群
第三章:✨ k8s入门:service 简单使用
第四章:✨ k8s入门:StatefulSet 简单使用
第五章:✨ k8s入门:存储(storage)
第六章:✨ K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间
第七章:✨ k8s入门:配置 ConfigMap & Secret
第八章:✨ k8s入门:k8s入门:Helm 构建 MySQL
第九章:✨ k8s入门:kubernetes-dashboard 安装
第十章:✨ k8s入门:kube-prometheus-stack 全家桶搭建(Grafana + Prometheus)



一、ConfigMap
1、概念
  • ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。

  • ConfigMap 将你的环境配置信息和容器镜像 解耦,便于应用配置的修改。

  • 很多应用在其初始化或运行期间要依赖一些配置信息, 存在要调整配置参数所设置的数值的需求,ConfigMap 可以向 Pod 中注入配置数据。

  • ConfigMap 不提供保密或者加密功能,加密数据可以使用 Secret 或其他第三方工具。

  • ConfigMap 中保存的数据不可超过 1 MiB。

  • ConfigMap 使用 data 和 binaryData 字段。这些字段能够接收键-值对作为其取值。data 和 binaryData 字段都是可选的。data 字段设计用来保存 UTF-8 字符串,而 binaryData 则被设计用来保存二进制数据作为 base64 编码的字串。

详细用法参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/

2、通过命令行创建
使用 `kubectl create configmap --help` 查看命令行详细参数

例子:

  • 通过文件夹创建:其中文件名为 key,文件内容为 value
# /root/configmap/dir 为文件夹
kubectl create configmap dir-config --from-file=/root/configmap/dir
# /root/configmap/file/test.txt 为文件名
kubectl create configmap file-config --from-file=/root/configmap/file/test.txt
  • 通过文件创建:其中 key 为 key1、key2,value 为文件内容
kubectl create configmap file-config --from-file=key1=/root/configmap/file/file1.txt --from-file=key2=/root/configmap/file/file2.txt
  • 通过键值对创建:key1=config1 、 key2=config2,特殊字符($,\,* 等)需要转义,最简单方法使用单引号
kubectl create configmap key-config --from-literal=key1=config1 --from-literal=key2=config2
  • env 文件本身就是键值对形式文件,所以 configmap 的 key 对应 env 文件的 key,value 对应 env 文件的 value
kubectl create configmap env-config --from-env-file=/root/configmap/file/config1.env --from-env-file=/root/configmap/file/config2.env

简单测试:利用 env 创建 configmap

[root@master configmap]# cat file/config1.env
id=1
name=admin
[root@master configmap]# cat file/config2.env
password=123456
[root@master configmap]# kubectl create configmap env-config --from-env-file=/root/configmap/file/config1.env --from-env-file=/root/configmap/file/config2.env
configmap/env-config created
[root@master configmap]# kubectl get cm
NAME               DATA   AGE
env-config         3      25s
[root@master configmap]# kubectl describe cm/env-config
Name:         env-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
name:
----
admin
password:
----
123456
id:
----
1

BinaryData
====

Events:  <none>

3、通过 yaml 文件创建

配置文件 /root/configmap/yaml/config.yaml注意: data 字段类型 UTF-8 字符串, binaryData 二进制数据作为 base64 编码的字串

apiVersion: v1
kind: ConfigMap
metadata:
 name: yaml-config
data:
 id: "001"
 name: admin
 password: "123456"

binaryData:
 address: 6KW/5a6J # 西安
 date: MjAyMi82LzIx # 2022/6/21

部署 configmap

[root@master configmap]# kubectl apply -f yaml/config.yaml 
configmap/yaml-config created
[root@master configmap]# kubectl describe cm/yaml-config
Name:         yaml-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
id:
----
001
name:
----
admin
password:
----
123456

BinaryData
====
address: 6 bytes
date: 9 bytes

Events:  <none>

4、不可变更的 ConfigMap

Kubernetes v1.21 新增特性 Immutable=true 设置 Secret 和 ConfigMap 为不可变更的选项,禁止更改 ConfigMap 的数据有以下好处

  • 保护应用,使之免受意外(不想要的)更新所带来的负面影响。
  • 通过大幅降低对 kube-apiserver 的压力提升集群性能, 这是因为系统会关闭对已标记为不可变更的 ConfigMap 的监视操作。

配置文件 /root/configmap/yaml/immutable-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: immutable-config
data:
  id: "002"
  name: admin
  password: "123456"
immutable: true

创建 configmap

[root@master configmap]# vi yaml/immutable-config.yaml
[root@master configmap]# kubectl apply -f yaml/immutable-config.yaml 
configmap/immutable-config created
[root@master configmap]# kubectl get cm
NAME               DATA   AGE
immutable-config   3      11s
[root@master configmap]# vi yaml/immutable-config.yaml # 修改配置文件的值
[root@master configmap]# kubectl apply -f yaml/immutable-config.yaml # 重新创建包如下错误,保证不可变更
The ConfigMap "immutable-config" is invalid: data: Forbidden: field is immutable when `immutable` is set

一旦 ConfigMap 被标记为不可变更,则无法逆转这一变化,也无法更改 data 或 binaryData 字段的内容,只能删除并重建 ConfigMap。

5、 Pod 使用 ConfigMap

有以下四种方式来使用 ConfigMap 配置 Pod 中的容器:

  • 在容器命令行参数内
  • 容器的环境变量
  • 使用 volume 挂载
  • 编写代码在 Pod 中运行,使用 Kubernetes API 来读取 ConfigMap

前三个方法,kubelet 使用 ConfigMap 中的数据在 Pod 中启动容器。第四种方法意味着你必须编写代码才能读取 ConfigMap 和它的数据,只要 ConfigMap 发生更改, 你的应用就能够通过订阅来获取更新。

①、命令行参数(容器环境变量)

/root/configmap/yaml/alpine-config.yaml

apiVersion: v1
kind: Pod
metadata:
  name: alpine-configmap-pod
spec:
  containers:
    - name: alpine-configmap-pod-container
      image: alpine
      # linux 获取某个环境变量值 echo ${环境变量}
      # sleep 20 保证存活 20 s
      command: [ "/bin/sh","-c","echo $(KEY1) $(KEY2) && sleep 20"] 
      env:
        # 定义环境变量
        - name: KEY1 # 请注意这里和 ConfigMap 中的键名是不一样的
          valueFrom:
            configMapKeyRef:
              name: alpine-config           # 这个值来自 ConfigMap
              key: text1 # 需要取值的键
        - name: KEY2
          valueFrom:
            configMapKeyRef:
              name: alpine-config
              key: text2
  restartPolicy: Never # 重启策略(restartPolicy)

三个重启策略(restartPolicy)

  • 1、Always:当容器终止退出后,总是重启容器,默认策略
  • 2、OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  • 3、Never:当容器终止退出,从不重启容器。

查看上面 pod/alpine-configmap-pod 指定的 ConfigMap/alpine-config

[root@master configmap]# kubectl describe cm/alpine-config
Name:         alpine-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
text1:
----
1.在容器命令行参数内
text2:
----
2.容器的环境变量

BinaryData
====

Events:  <none>

查看结果

[root@master configmap]# kubectl apply -f yaml/alpine-config.yaml 
pod/alpine-configmap-pod created
[root@master configmap]# kubectl get pod -o wide
NAME                                      READY   STATUS    RESTARTS       AGE     IP            NODE    NOMINATED NODE   READINESS GATES
alpine-configmap-pod                      1/1     Running   0              12s     10.244.2.51   node2   <none>           <none>
[root@master configmap]# kubectl logs -f pod/alpine-configmap-pod
1.在容器命令行参数内 2.容器的环境变量
②、volume 挂载

新建配置文件 /root/configmap/yaml/redis.yaml,volume 挂载 configmap,会将 configmap 的每个 key 新建文件,value 为文件内容,可通过 items 将 Secret 键投射到特定目录

apiVersion: v1
kind: Pod
metadata:
  name: redis-configmap-pod
spec:
  containers:
    - name: redis-configmap-pod-container
      image: redis:latest
      volumeMounts:
        - name: redis-configmap-storage
          mountPath: "/etc/foo" # 容器内部目录
          readOnly: true
  volumes:
    - name: redis-configmap-storage
      configMap:
        name: yaml-config # 对应 configmap 名字
        # 来自 ConfigMap 的一组键,如果不指定则 items ,则将 configmap 每个 key 新建文件存放在容器内部目录 /etc/foo,value 为文件内容 
        #items:
        #- key: "id"
        #  path: "/root"  将 configmap 中的 id 键,存放在文件 /root/id
        #- key: "name"
        #  path: "name"  将 configmap 中的 name 键,存放在文件 /etc/foo/name  
        

创建 pod

[root@master configmap]# kubectl describe cm/yaml-config # 查看上面 pod 中指定的 configmap
Name:         yaml-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
id:
----
001
name:
----
admin
password:
----
123456

BinaryData
====
address: 6 bytes
date: 9 bytes

Events:  <none>

[root@master configmap]# kubectl apply -f yaml/redis.yaml 
pod/redis-configmap-pod created
[root@master configmap]# kubectl get pod -o wide
NAME                                      READY   STATUS      RESTARTS       AGE     IP            NODE    NOMINATED NODE   READINESS GATES
redis-configmap-pod                       1/1     Running     0              9s      10.244.2.53   node2   <none>           <none>
[root@master configmap]# kubectl exec -it pod/redis-configmap-pod /bin/bash # 进入 pod
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@redis-configmap-pod:/data# cd /etc/foo/
root@redis-configmap-pod:/etc/foo# ls
address  date  id  name  password
root@redis-configmap-pod:/etc/foo# cat address 
西安

通过 Volume 将 configmap 挂载到容器内部时,当该 configmap 发生变化时,容器内部同步更新,但是通过环境变量设置到容器内部该值不具备自动更新的能力。

二、Secret
1、概念

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 Secret 类似于 ConfigMap 但专门用于保存机密数据。

为了安全地使用 Secret,请至少执行以下步骤:

  • 为 Secret 启用静态加密;
  • 启用或配置 RBAC 规则来限制读取和写入 Secret 的数据(包括通过间接方式)。需要注意的是,被准许创建 Pod 的人也隐式地被授权获取 Secret 内容。
  • 在适当的情况下,还可以使用 RBAC 等机制来限制允许哪些主体创建新 Secret 或替换现有 Secret。

详细介绍参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/

2、命令行创建 Secret

参考官方文档:https://kubernetes.io/zh-cn/docs/tasks/configmap-secret/managing-secret-using-kubectl/

-n 标志确保生成的文件在文本末尾不包含额外的换行符,当 kubectl 读取文件并将内容编码为 base64 字符串时,多余的换行符也会被编码。

echo -n 'admin' > ./username.txt
echo -n '123456' > ./password.txt

kubectl create secret 创建对象 Secret,命令行创建可以指定三种类型的 Secret

  • docker-registry 创建一个给 Docker registry 使用的 secret
  • generic 使用文件,文件夹,键值对创建公共的 secret,注意:不支持 env 文件类型
  • tls 创建一个 TLS secret
[root@master secret]# kubectl create secret generic db-user-pass \
  --from-file=./username.txt \
  --from-file=./password.txt
secret/db-user-pass created 
[root@master secret]# kubectl get secret
NAME                                 TYPE                                  DATA   AGE
db-user-pass                         Opaque                                2      50s
[root@master secret]# kubectl describe secret/db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  6 bytes
username.txt:  5 bytes

命令 kubectl get 和 kubectl describe 默认不显示 Secret 的内容,如果要查看数据实际内容,使用 base64 解码即可,实际解码数据后面不带换行,换行为了美观

[root@master secret]# kubectl get secret db-user-pass -o jsonpath='{.data}' # 要查看创建的 Secret 的内容
{"password.txt":"MTIzNDU2","username.txt":"YWRtaW4="}
[root@master secret]# echo "MTIzNDU2" | base64 -d # 解码 password 的数据
123456
[root@master secret]# echo "YWRtaW4=" | base64 -d # 解码 username 的数据
admin

上面是使用文件创建 generic 类型的 secret,键值对方法如下

[root@master secret]# kubectl create secret generic db --from-literal=mysql-username=root --from-literal=mysql-password=123456
secret/db created
[root@master secret]# kubectl get secret db -o jsonpath='{.data}'
{"mysql-password":"MTIzNDU2","mysql-username":"cm9vdA=="}
3、配置文件创建 Secret

参考官方文档:https://kubernetes.io/zh-cn/docs/tasks/configmap-secret/managing-secret-using-config-file/

Secret 资源包含2个键值对: data 和 stringData,data 和 stringData 的键必须由字母、数字、-,_ 或 . 组成

  • data 字段用来存储 base64 编码的任意数据。
  • stringData 字段是为了方便,它允许 Secret 使用未编码的字符串。

如果在 data 和 stringData 中都指定了一个字段,比如 host,字段值来自 stringData

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  username: cm9vdA== # root
  password: MTIzNDU2 # 123456
  host: MTkyLjE2OC4xLjE= # 192.168.1.1  
stringData:
  host: 127.0.0.1
  dbName: test 
[root@master secret]# kubectl apply -f mysql.yaml 
secret/mysql-secret created
[root@master secret]# kubectl get secret
NAME                                 TYPE                                  DATA   AGE
mysql-secret                         Opaque                                4      11s
[root@master secret]# kubectl describe secret/mysql-secret
Name:         mysql-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
dbName:    4 bytes
host:      9 bytes
password:  6 bytes
username:  4 bytes

命令 kubectl get 和 kubectl describe 默认不显示 Secret 的内容,如果要查看数据实际内容,使用 base64 解码即可,实际解码数据后面不带换行,换行为了美观

[root@master secret]# kubectl get secret mysql-secret -o jsonpath='{.data}'
{"dbName":"dGVzdA==","host":"MTI3LjAuMC4x","password":"MTIzNDU2","username":"cm9vdA=="}
[root@master secret]# echo "MTI3LjAuMC4x"|base64 -d
127.0.0.1
[root@master secret]# echo "cm9vdA=="|base64 -d
root
4、pod 使用 Secret

Pod 可以用三种方式之一来使用 Secret:

  • 作为挂载到一个或多个容器上的卷中的文件。
  • 作为容器的环境变量。
  • 由 kubelet 在为 Pod 拉取镜像时使用。

Kubernetes 控制面也使用 Secret; 例如,引导令牌 Secret 是一种帮助自动化节点注册的机制

下面用得到 secret/mysql-secret 对应上面

①、以环境变量的方式使用 Secret

env-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
    - name: secret-env-pod-container
      image: alpine
      # sleep 120 保证存活 120 s,打印 /config 目录下的文件
      command: [ "/bin/sh","-c","echo ${SECRET_USERNAME} ${SECRET_PASSWORD}" ]
      env:
        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: username
              optional: false # 此值为默认值;mysql-secret必须存在且名为 username 的值
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
              optional: false # 此值为默认值;mysql-secret必须存在且名为 password的键
  restartPolicy: Never

创建 pod,可以看到值已解码

[root@master secret]# kubectl apply -f env-pod.yaml 
pod/secret-env-pod created
[root@master secret]# kubectl logs -f pod/secret-env-pod
root 123456
②、volume 挂载方式使用 Secret
apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
  - name: secret-pod
    image: alpine
    # sleep 120 保证存活 120 s,打印 /config 目录下的文件
    command: [ "/bin/sh","-c","ls -lah /config && sleep 120" ]
    volumeMounts:
    - name: config
      mountPath: "/config"
  volumes:
  - name: config
    secret:
      secretName: mysql-secret
      defaultMode: 0644 # 默认访问权限
③、Secret 为 Pod 拉取镜像时使用

可以参考我的另一篇文章,https://blog.csdn.net/qq_41538097/article/details/124884400 中的:六、私人镜像部署

四、kustomize 来创建 ConfigMap & SecretSecret

参考官方文档:https://kubernetes.io/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization/

从 kubernetes v1.14 开始,kubectl 支持使用 Kustomize 管理对象。 Kustomize 提供了资源生成器(Generators)来创建 Secret 和 ConfigMap。 Kustomize 生成器应该在某个目录的 kustomization.yaml 文件中指定。

  • 查看目录中的 kustomization 资源,执行下面的命令:
kubectl kustomize <kustomization_directory>
  • 创建这些资源,使用参数 --kustomize 或 -k 标志来执行 kubectl apply:
kubectl apply -k <kustomization_directory>
1、概述

Kustomize 是一个用来定制 Kubernetes 配置的工具。它提供以下功能特性来管理 应用配置文件:

  • 从其他来源生成资源
  • 为资源设置贯穿性(Cross-Cutting)字段
  • 组织和定制资源集合

Kustomize 提供 secretGenerator 和 configMapGenerator,可以基于文件或字面 值来生成 Secret 和 ConfigMap。

2、configMapGenerator
①、创建 ConfigMap

configMapGenerator 可以基于文件、.env、键值对创建 ConfigMap

application.properties
server.port=8080
spring.application.name=k8s

config.env

OS=Window
Type=ConfigMap

kustomization.yaml,生成的 ConfigMap 和 Secret 都会包含内容哈希值后缀,这是为了确保内容发生变化时,所生成的是新的 ConfigMap 或 Secret,要禁止自动添加后缀的行为,可以使用 generatorOptions。

configMapGenerator:
  - name: kustomize-configmap-1
    files: # 基于文件来生成 ConfigMap
      - application.properties
    envs: # .env 文件的数据生成 ConfigMap
      - config.env
    literals: # 基于键值偶对来生成 ConfigMap
      - name=admin
      - phone="123456"
  - name: kustomize-configmap-2
    literals:
      - name=root
      - phone="654321"
# 禁止自动添加后缀
#generatorOptions:
#  disableNameSuffixHash: true

创建 kustomize

[root@master configMap]# kubectl apply -k /root/kustomize/configMap/
configmap/kustomize-configmap-1-mtbhb7gftg created
configmap/kustomize-configmap-2-2tdm525ftc created
[root@master configMap]# kubectl describe configmap/kustomize-configmap-2-2tdm525ftc
Name:         kustomize-configmap-2-2tdm525ftc
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
name:
----
root
phone:
----
654321

BinaryData
====

Events:  <none>

查看目录中的 kustomization 资源,注意:通过 files 创建,则 key 为文件名,value 对应文件内容

[root@master configMap]# kubectl kustomize /root/kustomize/configMap/
apiVersion: v1
data:
  OS: Window
  Type: ConfigMap
  application.properties: "server.port=8080\r\nspring.application.name=k8s"
  name: admin
  phone: "123456"
kind: ConfigMap
metadata:
  name: kustomize-configmap-1-mtbhb7gftg
---
apiVersion: v1
data:
  name: root
  phone: "654321"
kind: ConfigMap
metadata:
  name: kustomize-configmap-2-2tdm525ftc
②、pod 使用 kustomize 生成的 ConfigMap

要在 Pod 中使用生成的 ConfigMap,使用 configMapGenerator 的名称对其进行引用。 Kustomize 将自动使用生成的名称替换该名称。

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kustomize-configmap-pod
spec:
  containers:
    - name: kustomize-configmap-pod-container
      image: alpine
      # sleep 120 保证存活 120 s,打印 /config 目录下的文件
      command: [ "/bin/sh","-c","ls -lah /config && sleep 120" ]
      volumeMounts:
        - name: config
          mountPath: /config
  volumes:
    - name: config
      configMap:
        name: kustomize-configmap-1

kustomization.yaml ,application.properties、config.env 文件内容和上面相同
注意

  • 如果你的 configmap 没有禁止自动添加后缀(默认),则必须在 kustomization.yaml 文件添加 resources ,使用 kubectl apply -k ./ 命令创建
  • 如果你禁止自动添加后缀(disableNameSuffixHash: true),则可以使用 kubectl apply -k ./ 先创建 configmap,再使用 kubectl apply -f pod.yaml 创建 pod
resources:
  - pod.yaml # 上面 pod 文件名
configMapGenerator:
  - name: kustomize-configmap-1
    files: # 基于文件来生成 ConfigMap
      - application.properties
    envs: # .env 文件的数据生成 ConfigMap
      - config.env
    literals: # 基于键值偶对来生成 ConfigMap
      - name=admin
      - phone="123456"
  - name: kustomize-configmap-2
    literals:
      - name=root
      - phone="654321"
#禁止自动添加后缀
generatorOptions:
  disableNameSuffixHash: true

创建 pod 和 configmap,configmap 挂载到容器内是以文件形式存在,如下可以看到 /config 目录下生成的文件

[root@master configMap]# kubectl apply -k ./
configmap/kustomize-configmap-1 created
configmap/kustomize-configmap-2 created
pod/kustomize-configmap-pod created
[root@master configMap]# kubectl get pod -o wide
NAME                                      READY   STATUS      RESTARTS        AGE     IP            NODE    NOMINATED NODE   READINESS GATES
kustomize-configmap-pod                   0/1     Completed   4 (3m21s ago)   12m     10.244.2.76   node2   <none>           <none>
[root@master configMap]# kubectl get cm
NAME                    DATA   AGE
kustomize-configmap-1   5      13s
kustomize-configmap-2   2      13s
[root@master configMap]# kubectl logs -f pod/kustomize-configmap-pod
total 0      
drwxrwxrwx    3 root     root         137 Jun 23 08:17 .
drwxr-xr-x    1 root     root          31 Jun 23 08:17 ..
drwxr-xr-x    2 root     root          83 Jun 23 08:17 ..2022_06_23_08_17_19.2013437377
lrwxrwxrwx    1 root     root          32 Jun 23 08:17 ..data -> ..2022_06_23_08_17_19.2013437377
lrwxrwxrwx    1 root     root           9 Jun 23 08:17 OS -> ..data/OS
lrwxrwxrwx    1 root     root          11 Jun 23 08:17 Type -> ..data/Type
lrwxrwxrwx    1 root     root          29 Jun 23 08:17 application.properties -> ..data/application.properties
lrwxrwxrwx    1 root     root          11 Jun 23 08:17 name -> ..data/name
lrwxrwxrwx    1 root     root          12 Jun 23 08:17 phone -> ..data/phone
3、secretGenerator

基于文件或者键值偶对来生成 Secret。

cat <<EOF >./password.txt
username=admin
password=123456
EOF

cat <<EOF >./kustomization.yaml
secretGenerator:
  - name: kustomize-secret-1
    files:
      - password.txt
    literals:
      - id=1
  - name: kustomize-secret-2
    literals:
      - address=xian
      - phone=12581
#禁止自动添加后缀
generatorOptions:
  disableNameSuffixHash: true
EOF

查看资源:kubectl kustomize ./
创建资源:kubectl apply -k ./

pod 中使用 kustomize 生成的 secret 和使用 configmap 类似,都是通过 volume 形式实现,只需要改挂载部分

apiVersion: v1
kind: Pod
metadata:
  name: kustomize-secret-pod
spec:
  containers:
    - name: kustomize-secret-pod-container
      image: alpine
      # sleep 120 保证存活 120 s,打印 /config 目录下的文件
      command: [ "/bin/sh","-c","ls -lah /config && sleep 120" ]
      volumeMounts:
        - name: config
          mountPath: /config
  volumes:
    - name: config
    # 主要修改下面两行
      secret:    
        secretName: kustomize-secret-1

查看 secret 数据

[root@master secret]# kubectl get secret kustomize-secret-1 -o jsonpath='{.data}'
{"id":"MQ==","password.txt":"dXNlcm5hbWU9YWRtaW4KcGFzc3dvcmQ9MTIzNDU2Cg=="}[root@master secret]# echo "dXNlcm5hbWU9YWRtaW4KcGFzc3dvcmQ9MTIzNDU2Cg=="|base64 -d
username=admin
password=123456
4、修改已存在的 ConfigMap & Secret
kubectl edit configmap my-config
kubectl edit secrets my-config

这一命令会启动你的默认编辑器,允许你更新 data 字段中的值,secrets 中存放的是 base64 编码的值

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值