k8s入门:配置 ConfigMap & Secret
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。ConfigMap 将你的环境配置信息和容器镜像 解耦,便于应用配置的修改。很多应用在其初始化或运行期间要依赖一些配置信息, 存在要调整配置参数所设置的数值的需求,ConfigMap 可以向 Pod 中注入配置数据。ConfigMap 不提供保密或者加密功能,加密数据可以使用 Secret 或其他第三方工具。Config
系列文章
第一章:✨ 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.propertiesserver.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 编码的值
更多推荐
所有评论(0)