【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps

2024-06-02 06:52

本文主要是介绍【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Secrets

(一)Secrets概述

(二)Secrets类型

(三)Secrets使用方式

(四)创建Secrets

1.陈述式命令创建

1.1 定义用户与密码文件

1.2 使用陈述式命令创建

2.使用base64创建

2.1 获取加密信息

2.2 使用yaml文件创建

(五)使用Secrets

1.使用挂载的方式

2.使用环境变量的方式

(六)Secret的作用

(七)注意事项

二、ConfigMap

(一)ConfigMap概述

(二)为什么需要ConfigMap

(三)特点及用途

1.特点

2.用途

(四)ConfigMap的创建方式

1.命令行直接创建

2.通过文件/目录创建

2.1 使用文件创建

2.2 使用目录创建

2.3 YAML创建

(五)使用ConfigMap

1.替代环境变量

1.1 引用值

1.2 引用键值

2.文件挂载

2.1 准备挂载文件

2.2 创建configmap

2.3 数据挂载

3.热更新

4.pod更新


在Kubernetes(k8s)中,应用程序的配置和数据存储是一个重要且敏感的议题。Kubernetes提供了两种主要的资源类型来管理这些敏感信息和配置数据:Secrets和ConfigMaps。本文将深入探讨这两种资源类型,以及如何在Kubernetes集群中有效地使用它们。

一、Secrets

(一)Secrets概述

在Kubernetes(k8s)中,Secrets是一种用于存储敏感信息的对象,如密码、OAuth令牌、SSH密钥等。这些信息在部署应用程序时可能需要,但又不希望直接硬编码在应用程序的代码中或者公开暴露。通过使用Secrets,我们可以将敏感信息与应用程序代码解耦,从而提高安全性。

(二)Secrets类型

1.service-account-token:用于访问API的服务账户令牌。由 Kubernetes 自动创建,用来访问 APIServer 的 Secret,Pod 会默认使用这个 Secret 与 APIServer 通信, 并且会自动挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录中

[root@master01 ~]#kubectl run nginx --image=nginx:1.18.0
pod/nginx created
[root@master01 ~]#kubectl describe pod nginx |sed -n '/Mounts/{p;n;p}'Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-vgx6f (ro)
-------------------------------------------------------------------------------------
#新建立一个pod,它会自动以挂载的方式,使用serviceaccount来访问,并且权限是只读权限

2.Opaque:Base64 编码格式的Secret,用来存储用户自定义的密码、密钥等/Secrets中的敏感信息在存储之前会先被Base64编码。但是请注意,Base64编码并不提供安全性,它只是用来避免在YAML文件中直接暴露明文信息,是默认的Secret 类型

3.Docker Config:用于认证私有Docker仓库的凭据。存储私有 docker registry 的认证信息,搭建私有仓库时,使用该类型,在客户端登录私有仓库时,可以免密登录

4.TLS:用于存储TLS证书和私钥。

(三)Secrets使用方式

可挂载为卷:Secrets可以挂载到Pod中的容器,以文件的形式提供敏感信息。

可作为环境变量:Secrets中的信息也可以被设置为Pod中容器的环境变量。

(四)创建Secrets

1.陈述式命令创建

1.1 定义用户与密码文件
[root@master01 data]#mkdir -p /data/secret/pass
[root@master01 data]#cd /data/secret
[root@master01 secret]#echo -n 'china' >/data/secret/pass/user.txt
#创建用户名文件
[root@master01 secret]#echo -n '19491001' >/data/secret/pass/passwd.txt
#创建密码文件
1.2 使用陈述式命令创建
[root@master01 secret]#kubectl create secret generic secret01 --from-file=/data/secret/pass/user.txt --from-file=/data/secret/pass/passwd.txt
secret/secret01 created
[root@master01 secret]#kubectl get secrets secret01
NAME                     TYPE                                  DATA   AGE
secret01                 Opaque                                2      11s
[root@master01 secret]#kubectl describe secrets secret01
Name:         secret01
Namespace:    default
Labels:       <none>
Annotations:  <none>Type:  OpaqueData
====
user.txt:    5 bytes
passwd.txt:  8 bytes
---------------------------------------------------------------------------------
#kubectl create secret generic secret01
#这一部分命令告诉Kubernetes创建一个新的泛型(generic)类型的Secret对象,命名为secret01。
#使用generic子命令来标明要创建的是一个Opaque类型的Secret--from-file=/data/secret/pass/user.txt
#此选项指定了一个文件路径/data/secret/pass/user.txt,其内容将被用来创建Secret中的一个键值对。
#键(key)通常是文件名(即user.txt),值(value)是文件的内容。
#这意味着Secret将包含一个条目,其中键为user.txt,值为该文件中的文本内容。--from-file=/data/secret/pass/passwd.txt
#同理,此选项也指定了另一个文件路径/data/secret/pass/passwd.txt,
#其内容也会被加入到Secret中作为一个独立的条#不论是使用get命令还是describe查看,都不会显示实际的内容,而是以字节长度的信息显示

2.使用base64创建

上述创建方式,虽然可以创建Secrets,但是它还是属于一种明文创建的方式,可以使用base方式进行加密

2.1 获取加密信息
[root@master01 secret]#echo -n china |base64
Y2hpbmE=
[root@master01 secret]#echo -n 19491001 |base64
MTk0OTEwMDE=
2.2 使用yaml文件创建
[root@master01 secret]#vim secret.yaml
[root@master01 secret]#cat secret.yaml
apiVersion: v1
kind: Secret                   #指定资源的类型为Secret
metadata:name: secret-v1              #Secret资源的名称
type: Opaque                   #指定Secret的类型
data:                          #包含实际存储的秘密数据,以base64编码格式给出的键值对username: Y2hpbmE=           #base64编码后的“chance”字符串,表示用户名password: MTk0OTEwMDE=       #base64编码后的密码
[root@master01 secret]#kubectl apply -f secret.yaml
secret/secret-v1 created
[root@master01 secret]#kubectl get secrets secret-v1 
NAME        TYPE     DATA   AGE
secret-v1   Opaque   2      10s
--------------------------------------------------------------------------------
#使用这个Secret时,Kubernetes会自动处理这些值的base64解码,
#使Pod内的应用程序能够直接使用解码后的原始数据。

(五)使用Secrets

1.使用挂载的方式

1.1 定义文件

在yaml文件中,通过挂载的方式,将指定的Secret资源,挂载到pod的指定目录下

[root@master01 secret]#vim secret-pod01.yaml 
[root@master01 secret]#cat secret-pod01.yaml 
apiVersion: v1
kind: Pod
metadata:name: secret-pod01
spec:containers:- name: nginximage: nginx:1.18.0volumeMounts:                 #定义挂载Volume到容器内部的配置- name: secrets               #引用了在volumes部分定义的Volume名称mountPath: "/etc/secrets"   #容器内挂载点的路径,即Volume将在这个路径下可见readOnly: true              #以只读方式挂载,不能修改secret-v1的内容volumes:- name: secrets                 #secrets Volume的名称,需与volumeMounts中的name相匹配secret:secretName: secret-v1       #指定此Volume将挂载的Secret的名称

1.2 创建pod

[root@master01 secret]#kubectl apply -f secret-pod01.yaml 
pod/secret-pod01 created
[root@master01 secret]#kubectl get pod secret-pod01
NAME                          READY   STATUS              RESTARTS   AGE
secret-pod01                  1/1     Running             0          7s[root@master01 secret]#kubectl exec -it secret-pod01 bash                      
root@secret-pod01:/# cat /etc/secrets/username 
china
root@secret-pod01:/# cat /etc/secrets/password 
19491001
root@secret-pod01:/# rm -rf /etc/secrets/password 
rm: cannot remove '/etc/secrets/password': Read-only file system
root@secret-pod01:/# echo 1111 > /etc/secrets/password 
bash: /etc/secrets/password: Read-only file system
root@secret-pod01:/# 
#无法进行删除和重写,它是以只读的方式进行挂载的

2.使用环境变量的方式

2.1 定义文件

在yaml文件中定义环境变量的键值信息,其键值可以从Secret中获取

[root@master01 secret]#vim secret-pod02.yaml 
[root@master01 secret]#cat secret-pod02.yaml 
apiVersion: v1
kind: Pod
metadata:name: secret-pod02
spec:containers:- name: nginximage: nginx:1.18.0env:- name: USER_SCT         #环境变量的名称valueFrom:secretKeyRef:        #指定环境变量的值来自于Secret中的某个键name: secret-v1    #使用的Secret名称,需要与之前创建的Secret相匹配key: username      #从Secret中提取的键名,对应的值将会被设置为环境变量USER_SCT的值- name: PASSWD_SCT       #另一个环境变量的名称valueFrom:secretKeyRef:name: secret-v1key: password      #从Secret中提取的另一个键名,其值被设置为环境变量PASSWD_SCT的值

2.2 创建pod

[root@master01 secret]#kubectl apply -f secret-pod02.yaml 
pod/secret-pod02 created
[root@master01 secret]#kubectl get pod secret-pod02 
NAME           READY   STATUS    RESTARTS   AGE
secret-pod02   1/1     Running   0          14s
[root@master01 secret]#kubectl exec -it secret-pod02 bash
root@secret-pod02:/# echo "$USER_SCT"     #查看USER_SCT的值
china
root@secret-pod02:/# echo "$PASSWD_SCT"   #查看PASSWD_SCT的值
19491001
root@secret-pod02:/# env |grep SCT   #使用env指令查看系统所有内置变量,并进行过滤
USER_SCT=china
PASSWD_SCT=19491001

(六)Secret的作用

安全性提升:避免明文存储敏感信息,减少因不当配置导致的数据泄露风险。

简化配置管理:集中管理Pod或服务账户所需的敏感信息,便于更新和复用。

灵活性:支持多种方式使用Secret,包括环境变量、文件挂载或作为命令行参数,满足不同应用的需求。

权限控制:通过RBAC(Role-Based Access Control)限制对Secret的访问,确保只有授权的用户和服务账户能访问敏感数据。

(七)注意事项

保护Secrets:确保你的Secrets在传输和存储过程中都是安全的。避免在不受信任的环境中暴露Secrets。

定期轮换:对于重要的Secrets,如数据库密码或API密钥,定期轮换是一个好的安全实践。

最小权限原则:只将必要的Secrets暴露给需要它们的Pod。避免在不需要的地方暴露Secrets。

不要将Secrets硬编码在代码中:这是非常不安全的做法,因为一旦代码被泄露,Secrets也会被泄露。

使用RBAC:通过Kubernetes的角色和角色绑定(RBAC)来控制对Secrets的访问权限。

二、ConfigMap

(一)ConfigMap概述

ConfigMap 是 Kubernetes 中的一种资源对象,用于将非敏感的配置数据注入 Pod 或其他 Kubernetes 对象。与 Secret 相似,它提供了一种在不直接硬编码配置信息到容器镜像或 Pod 定义中的方式,从而使得配置易于管理和更新。ConfigMap 允许您将配置数据以键值对的形式存储,并可以在 Pod 运行时将这些配置映射为环境变量、命令行参数或是直接挂载为容器内的文件

(二)为什么需要ConfigMap

传统配置管理的问题:在传统架构中,配置文件往往被保存在宿主机上,容器化部署时,由于容器所在的节点不固定,这种方式不再适用。同时,如果配置文件被打包在容器镜像中,那么一旦配置更改,就需要重新构建镜像,这非常不便。

ConfigMap的作用:ConfigMap将环境配置信息和容器镜像解耦,使得在不重新构建镜像的情况下,可以方便地修改和更新配置。ConfigMap也是按Namespace隔离的,不同的Namespace之间ConfigMap的名称可以相同,但不能跨Namespace进行访问。

(三)特点及用途

1.特点

非机密性数据存储:ConfigMap主要用于存储非机密性的配置信息,如数据库连接信息、环境变量等。

键值对形式:ConfigMap的数据可以用key/value键值对的形式保存,也可以通过文件的形式保存。

资源对象:ConfigMap是k8s中的资源对象,可以通过kubectl命令行工具或Kubernetes API进行创建、更新和删除。

与Pod的交互:Pods可以将ConfigMap用作环境变量、命令行参数或存储卷中的配置文件。

动态更新:ConfigMap支持热更新,即在不重启Pods的情况下,可以动态地修改ConfigMap中的数据,Pods会实时地读取新的配置

2.用途

环境变量:将 ConfigMap 中的配置作为环境变量传递给容器中的应用程序。

命令行参数:使用 ConfigMap 中的值填充容器启动命令的参数。

文件挂载:将ConfigMap 数据作为文件或目录挂载到容器的文件系统中,方便应用程序按文件形式读取配置。

(四)ConfigMap的创建方式

1.命令行直接创建

通过kubectl命令行工具,使用--from-literal参数指定键值对来创建ConfigMap。

[root@master01 data]#kubectl create configmap configmap-01 --from-literal=id=001 --from-literal=user=zhangshan
configmap/configmap-01 created
[root@master01 data]#kubectl get configmaps configmap-01
NAME           DATA   AGE
configmap-01   2      19s
[root@master01 data]#kubectl describe configmaps configmap-01
Name:         configmap-01
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
id:         #键名称
----
001         #值
user:       #键名称
----
zhangshan   #值
Events:  <none>

2.通过文件/目录创建

将配置文件放在指定的目录中,然后通过kubectl命令行工具或YAML文件来创建ConfigMap。

2.1 使用文件创建
[root@master01 data]#mkdir /data/configmap
[root@master01 data]#cd  /data/configmap/
[root@master01 configmap]#echo "this is configmap" >index.html
[root@master01 configmap]#kubectl create configmap configmap-02 --from-file=index.html 
configmap/configmap-02 created
[root@master01 configmap]#kubectl get configmaps configmap-02
NAME           DATA   AGE
configmap-02   1      24s
[root@master01 configmap]#kubectl describe configmaps configmap-02
Name:         configmap-02
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
index.html:
----
this is configmapEvents:  <none>
2.2 使用目录创建
[root@master01 configmap]#mkdir /data/test
[root@master01 configmap]#echo "this is test01" >/data/test/test01.txt
[root@master01 configmap]#echo "this is test02" >/data/test/test02.txt
[root@master01 configmap]#kubectl create configmap configmap-03 --from-file=/data/test/
configmap/configmap-03 created
[root@master01 configmap]#kubectl describe configmaps configmap-03
Name:         configmap-03
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
test01.txt:
----
this is test01test02.txt:
----
this is test02Events:  <none>
[root@master01 configmap]#kubectl get configmaps configmap-03
NAME           DATA   AGE
configmap-03   2      11s
2.3 YAML创建

编写YAML文件定义ConfigMap,然后使用kubectl apply命令来创建。

[root@master01 configmap]#vim configmap.yaml 
[root@master01 configmap]#cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: configmap-04
data:APP_SETTING_1: value1              #第一个键:值APP_SETTING_2: value2              #第二个键:值
[root@master01 configmap]#kubectl apply -f configmap.yaml 
configmap/configmap-04 created
[root@master01 configmap]#kubectl describe configmaps configmap-04
Name:         configmap-04
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
APP_SETTING_1:
----
value1
APP_SETTING_2:
----
value2
Events:  <none>
[root@master01 configmap]#kubectl get configmaps configmap-04
NAME           DATA   AGE
configmap-04   2      25s

(五)使用ConfigMap

删除之前创建的示例

[root@master01 configmap]#kubectl delete configmaps --all
configmap "configmap-01" deleted
configmap "configmap-02" deleted
configmap "configmap-03" deleted
configmap "configmap-04" deleted
configmap "kube-root-ca.crt" deleted

1.替代环境变量

1.1 引用值

将configmap中定义的值,设置为自定义变量名称的值

首先使用yaml文件,定义configmaps

[root@master01 configmap]#vim configmap.yaml 
[root@master01 configmap]#cat configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: configmap01
data:FROM: china        #键名为FROM,值为chinaNAME: ZG           #键名为NAME,值为ZG
[root@master01 configmap]#kubectl apply -f configmap.yaml 
configmap/configmap01 created
[root@master01 configmap]#kubectl describe configmaps configmap01 
Name:         configmap01
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
FROM:
----
china
NAME:
----
ZG
Events:  <none>

定义yaml文件,创建pod,并应用文件configmap对象中的值为自定义变量的值

[root@master01 configmap]#vim pod-cm01.yaml
[root@master01 configmap]#cat pod-cm01.yaml
apiVersion: v1
kind: Pod
metadata:name: pod-cm01
spec:containers:- name: busyboximage: busybox:1.28command: [ "/bin/sh", "-c", "env" ]  #指令让容器启动时执行env命令,打印所有的环境变量。env:- name: WHERE_ARE_YOU              #定义变量名称valueFrom:                       #指定值的来源configMapKeyRef:               #从ConfigMap中引用键的值name: configmap01            #指定ConfigMap的名称key: FROM                    #指定从configmap01中的FROM键来获取值,即china- name: YOU_NAME                   #同上valueFrom:configMapKeyRef:name: configmap01key: NAME

创建pod之后,通过查看日志信息,来查看自定的变量

[root@master01 configmap]#kubectl apply -f pod-cm01.yaml 
pod/pod-cm01 created
[root@master01 configmap]#kubectl logs pod-cm01 
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod-cm01
SHLVL=1
HOME=/root
WHERE_ARE_YOU=china           #变量值为configmap01对象中FROM的值,即china
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
YOU_NAME=ZG                   #变量值为configmap01对象中NAME的值,即ZG
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
1.2 引用键值

可以将configmap中的键值同时引用

[root@master01 configmap]#vim config-pod.yaml
[root@master01 configmap]#cat config-pod.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: configmap02
data:PASSWORD_TEST: abc123     #键值
---                        #第一部分为设置configmap对象
apiVersion: v1
kind: Pod
metadata:name: pod-cm02
spec:containers:- name: busyboximage: busybox:1.28command: [ "/bin/sh", "-c", "env" ]envFrom:                   #从整个ConfigMap中导入环境变量- configMapRef:            #指定ConfigMap的名称。name: configmap02restartPolicy: Never

使用kubectl apply 命令创建之后查看日志信息

[root@master01 configmap]#kubectl apply -f config-pod.yaml 
configmap/configmap02 created
pod/pod-cm02 created
[root@master01 configmap]#kubectl logs pod-cm02 
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod-cm02
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PASSWORD_TEST=abc123               #引用指定configmap中的所有键值
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

2.文件挂载

将ConfigMap 数据作为文件或目录挂载到容器的文件系统中,在这个文件中,键就是文件名,键值就是文件内容

2.1 准备挂载文件
[root@master01 configmap]#echo "this is configmap-pod" >/mnt/index.html
[root@master01 configmap]#cat /mnt/index.html 
this is configmap-pod
2.2 创建configmap
[root@master01 configmap]#kubectl create configmap config03 --from-file=/mnt/index.html
configmap/config03 created
[root@master01 configmap]#kubectl describe configmaps config03 
Name:         config03
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
index.html:
----
this is configmap-podEvents:  <none>
2.3 数据挂载
[root@master01 configmap]#vim deployment-cm.yaml
[root@master01 configmap]#cat deployment-cm.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-pod
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.18.0ports:- containerPort: 80volumeMounts:- name: config-mountmountPath: /usr/share/nginx/html/volumes:- name: config-mountconfigMap:              #表明这个卷的内容来源于一个ConfigMapname: config03        #指定了ConfigMap的名称为config03

创建pod并进行访问

[root@master01 configmap]#kubectl apply -f deployment-cm.yaml 
deployment.apps/nginx-pod created
[root@master01 configmap]#kubectl get pod -owide
NAME                         READY   STATUS      RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
nginx-pod-6f67db4865-ljsx4   1/1     Running     0          12s   10.244.2.246   node02   <none>           <none>
[root@master01 configmap]#vim deployment-cm.yaml 
[root@master01 configmap]#curl 10.244.2.246
this is configmap-pod

3.热更新

直接修改configmap的信息,保存退出后,就可等待十秒钟左右,使用该ConfigMap挂载的 Volume 中的数据同步更新

[root@master01 configmap]#kubectl edit configmap config03 
configmap/config03 edited    #修改值的信息

[root@master01 configmap]#curl 10.244.2.246
this is configmap-pod-new
[root@master01 configmap]#kubectl exec -it nginx-pod-6f67db4865-ljsx4 -- cat /usr/share/nginx/html/index.html
this is configmap-pod-new
#同时,容器内的文件也同样会修改
[root@master01 configmap]#cat /mnt/index.html 
this is configmap-pod
#宿主机的文件不会更改,它只是将宿主机的文件当作键(文件名)值(文件内容),设置为configmap,
#而后通过挂载的方式,将键值同步到容器当中 ,只有修改configmap的键值,容器中的内容才会同步更新

可以将配置文件等信息,使用陈述式命令指定文件,创建ConfigMap,可以做到在宿主机上,实时更新pod的配置信息以及其它有关信息

4.pod更新

当ConfigMap更新后,Kubernetes默认情况下不会自动触发Pod的滚动更新。但可以通过手动的方式触发更新,比如在.spec.template.metadata.annotations 中添加 version/config ,每次通过修改 version/config 来触发滚动更新

[root@master01 configmap]#kubectl patch deployment nginx-pod --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "202401" }}}}}'
[root@master01 configmap]#kubectl get pod -w
NAME                         READY   STATUS      RESTARTS   AGE
nginx-pod-6f67db4865-ljsx4   1/1     Running     0          4m43s
nginx-pod-69d77c47d-hhlqf    0/1     Pending     0          0s
nginx-pod-69d77c47d-hhlqf    0/1     Pending     0          0s
nginx-pod-69d77c47d-hhlqf    0/1     ContainerCreating   0          0s
nginx-pod-69d77c47d-hhlqf    1/1     Running             0          3s
nginx-pod-6f67db4865-ljsx4   1/1     Terminating         0          5m6s
nginx-pod-6f67db4865-ljsx4   0/1     Terminating         0          5m8s
nginx-pod-6f67db4865-ljsx4   0/1     Terminating         0          5m9s
nginx-pod-6f67db4865-ljsx4   0/1     Terminating         0          5m9s
[root@master01 configmap]#kubectl get pod -owide
NAME                        READY   STATUS      RESTARTS   AGE   IP             NODE     NOMINATED NODE   READINESS GATES
nginx-pod-69d77c47d-hhlqf   1/1     Running     0          88s   10.244.1.199   node01   <none>           <none>
------------------------------------------------------------------------------
patch: kubectl 的一个子命令,用于部分更新资源对象。
deployment nginx-pod: 指定要更新的资源类型和资源的名称
--patch: 指定要应用的补丁(patch)内容。
'{...}': JSON 格式的补丁内容。添加了一个新的注解到 Pod 模板的元数据(metadata)中。补丁内容的具体解释:
"spec": Deployment 的规范(specification),描述了 Deployment 的期望状态。
"template": 用于创建新 Pod 的模板。
"metadata": Pod 模板的元数据。
"annotations": Pod 模板的注解字段。注解是附加到对象的键值对,可以用来存储非标识信息。
"version/config": "202401": 这是一个新的注解,其中键是version/config,值是202401

同样的,再次更新数据的时候,需要再次修改注解信息触发pod更新

[root@master01 configmap]#kubectl edit configmap config03 
configmap/config03 edited    #修改值的信息

再次手动更新pod

[root@master01 configmap]#kubectl patch deployment nginx-pod --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "202402" }}}}}'
#更换注解信息202401为202402
[root@master01 configmap]#kubectl get pod -w -owide
NAME                        READY   STATUS      RESTARTS   AGE     IP             NODE     NOMINATED NODE   READINESS GATES
nginx-pod-69d77c47d-hhlqf   1/1     Running     0          2m28s   10.244.1.199   node01   <none>           <none>
nginx-pod-5c5cb76b99-86n42   0/1     Pending     0          0s      <none>         <none>   <none>           <none>
nginx-pod-5c5cb76b99-86n42   0/1     Pending     0          0s      <none>         node02   <none>           <none>
nginx-pod-5c5cb76b99-86n42   0/1     ContainerCreating   0          0s      <none>         node02   <none>           <none>
nginx-pod-5c5cb76b99-86n42   1/1     Running             0          3s      10.244.2.247   node02   <none>           <none>
[root@master01 configmap]#curl 10.244.2.247
this is configmap-pod-new-01

更新 ConfigMap 后

使用该 ConfigMap 挂载的 Env 不会同步更新。

使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新。

这篇关于【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023246

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。