当前位置: 首页 > news >正文

k8s中ConfigMap、Secret创建使用演示、配置文件存储介绍

目录

一.ConfigMap(cm)

1.适用场景

2.创建并验证configmap

(1)以yaml配置文件创建configmap,验证变化是是否同步

(2)--from-file以目录或文件

3.如何使用configmap

(1)使用env或envfrom来替代环境变量

(2)configmap与volume搭配使用

4.配置configmap触发deployment滚动更新

二.Secret

1.常用场景

2.创建secret

3.使用secret

(1)env变量

(2)volume挂载


 

一.ConfigMap(cm)

在Kubernetes中,ConfigMap是一种用于存储配置数据的对象,它提供了一种将配置数据与容器分离的方式,使得容器的配置可以独立于容器镜像进行管理和修改。ConfigMap可以在部署应用程序时,将配置信息注入到容器中,从而使得容器可以动态地适应不同的环境和需求。

1.适用场景

(1)容器化应用程序的配置管理:将应用程序的配置数据存储到ConfigMap中,从而使得容器可以在运行时根据需要获取这些配置数据,进而动态地适应不同的环境和需求。

(2)多个容器共享配置数据:将多个容器所需的公共配置数据存储到ConfigMap中,从而避免了重复存储和管理配置数据的问题,同时也方便了对配置的修改和更新。

(3)管理Kubernetes资源的配置数据:将Kubernetes资源的配置数据存储到ConfigMap中,从而可以通过修改ConfigMap来对资源进行配置和管理。

接下来介绍configmap的存储使用方式

2.创建并验证configmap

(1)以yaml配置文件创建configmap,验证变化是是否同步

[root@k8s-master volume]# cat mycm.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmapnamespace: myns
data:   #用data代替specusername: sulibaopasswd: slb317418 
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: nginximage: nginxports:- name: nginx-portcontainerPort: 80volumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:   #指定volume类型为configmapname: my-configmap 
​
​
[root@k8s-master volume]# kubectl apply -f mycm.yaml 
configmap/my-configmap created
pod/my-nginx-configmap created
​
[root@k8s-master volume]# kubectl get pods,cm -n myns   #pod创建成功
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          67s
​
NAME                         DATA   AGE
kube-root-ca.crt             1      40m
configmap/my-configmap       2      67s
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/username"   
#内容一致,创建成功
sulibao
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
slb317418
​
​
#接下来edit这个configmap中的内容,使passwd产生变化,再验证pod中是否变化,结果成功
[root@k8s-master volume]# kubectl edit cm my-configmap -n myns
[root@k8s-master volume]# kubectl get cm my-configmap -n myns -o yaml | grep passwdpasswd: num123456{"apiVersion":"v1","data":{"passwd":"slb317418","username":"sulibao"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"my-configmap","namespace":"myns"}}
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
num123456

(2)--from-file以目录或文件

#根据一个目录来创建configmap
[root@k8s-master volume]# kubectl create cm my-cm --from-file=/root/volume/a/ -n myns
configmap/my-cm created
[root@k8s-master volume]# kubeckubec get cm -n myns
-bash: kubeckubec: command not found
[root@k8s-master volume]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      33m
my-cm              2      16s
[root@k8s-master volume]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
​
username:
----
sulibao
​
​
BinaryData
====
​
Events:  <none>
​
​
​
#根据两个文件来创建configmap,和上面以目录创建效果一致
[root@k8s-master a]# ll
total 8
-rw-r--r-- 1 root root 10 Dec 16 16:54 passwd
-rw-r--r-- 1 root root  8 Dec 16 16:54 username
[root@k8s-master a]# kubectl create cm my-cm --from-file=/root/volume/a/username --from-file=/root/volume/a/passwd -n myns
configmap/my-cm created
[root@k8s-master a]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      36m
my-cm              2      8s
[root@k8s-master a]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
​
username:
----
sulibao
​
​
BinaryData
====
​
Events:  <none>
(3)以命令行传递信息创建configmap
[root@k8s-master volume]# kubectl create cm my-cm --from-literal=username=sulibao --from-literal=passwd=slb317418 -n myns
configmap/my-cm created
[root@k8s-master volume]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      40m
my-cm              2      10s
[root@k8s-master volume]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
username:
----
sulibao
​
BinaryData
====
​
Events:  <none>

3.如何使用configmap

(1)使用env或envfrom来替代环境变量

apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap1namespace: myns
data:username: sulibaopasswd: slb317418 
​
---
​
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap2namespace: myns
data:email: 123.qq.com
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh","-c","env;sleep 3000"]env:- name: name   #要被替代的名称,最终的变量名字是这个valueFrom:configMapKeyRef:name: my-configmap1    #指定configmap的名称key: username    #指定configmap中的某个键,该键的值会用来代替上面指定的name原本的值- name: passwdvalueFrom:configMapKeyRef:name: my-configmap1key: passwdenvFrom:- configMapRef:name: my-configmap2    #指定configmap的名称
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          4m52s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      123m
configmap/my-configmap1      2      4m52s
configmap/my-configmap2      1      4m52s
​
[root@k8s-master volume]# kubectl logs my-nginx-configmap -n myns | grep -E '(email|passwd|name)'
email=123.qq.com
name=sulibao
passwd=slb317418
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh    #进入pod进行验证
/ # 
/ # env
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=my-nginx-configmap
SHLVL=1
HOME=/root
TERM=xterm
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
email=123.qq.com
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
name=sulibao
passwd=slb317418
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # echo $name
sulibao
/ # echo $email
123.qq.com

(2)configmap与volume搭配使用

apiVersion: v1
kind: ConfigMap
metadata: name: my-configmapnamespace: myns
data:username: sulibaopasswd: slb317418
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh","-c","cd /root/mymsg;sleep 3000"]volumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:name: my-configmap
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          10s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      145m
configmap/my-configmap       2      10s
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
slb317418
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/username"
sulibao

4.配置configmap触发deployment滚动更新

apiVersion: v1
kind: ConfigMap
metadata: name: my-configmapnamespace: myns
data:username: sulibaopasswd: slb317418
​
---
​
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-deployname: my-deploynamespace: myns
spec:replicas: 3selector:matchLabels:app: my-deploytemplate:metadata:labels:app: my-deployspec:containers:- image: busyboxcommand: ["/bin/sh","-c","touch /root/a.txt;cat /root/mymsg/username > /root/a.txt;sleep 3000"]name: busyboxvolumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:name: my-configmap
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                             READY   STATUS    RESTARTS   AGE
pod/my-deploy-574476c4d9-85m78   1/1     Running   0          8s
pod/my-deploy-574476c4d9-fghm2   1/1     Running   0          8s
pod/my-deploy-574476c4d9-w4rrj   1/1     Running   0          8s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      11m
configmap/my-configmap       2      8s
[root@k8s-master volume]# kubectl exec -it my-deploy-574476c4d9-85m78 -n myns -- /bin/sh -c "cat /root/a.txt"
sulibao
​
[root@k8s-master volume]#  kubectl patch deployment my-deploy -n myns --patch '{"spec": {"template": {"metadata": {"annotations": {"update": "2" }}}}}'
deployment.apps/my-deploy patched
#此段命令更新deployment,去触发deployment的滚动更新
​
[root@k8s-master vokubectl edit cm my-configmap -n myns   #更改了配置内容
[root@k8s-master volume]# kubectl get pods -n myns -w  #对比上面的pod,此时已经全部更新完成
NAME                         READY   STATUS    RESTARTS   AGE
my-deploy-664d69c7cf-5zkwz   1/1     Running   0          2m9s
my-deploy-664d69c7cf-dsxkp   1/1     Running   0          2m13s
my-deploy-664d69c7cf-vslz4   1/1     Running   0          2m5s
[root@k8s-master volume]# kubectl exec -it my-deploy-664d69c7cf-5zkwz -n myns -- /bin/sh -c "cat /root/a.txt"
SLB

二.Secret

在Kubernetes中,Secret是一种用于存储和管理敏感数据的对象,它提供了一种安全地存储密码、令牌、证书等敏感信息的机制。Secret的内容是以Base64编码方式存储的,但需要注意的是,Base64编码并不等同于加密,因此使用Secret时要确保对敏感数据进行适当的加密和保护。

1.常用场景

(1)存储认证信息:Secret可以用于存储应用程序所需的用户名、密码、令牌等认证信息。这些认证信息可以被容器在运行时访问,并用于与外部服务进行安全通信。

(2)存储TLS/SSL证书:Secret可以用于存储TLS/SSL证书和私钥,以便在Kubernetes集群中启用加密的通信。这些证书可以被挂载到Pod中,并用于与其他服务进行安全的HTTPS通信。

(3)共享敏感数据:Secret可以用于共享敏感数据,例如API密钥、数据库连接字符串等。通过将Secret挂载到多个Pod中,可以方便且安全地共享这些敏感数据,而无需在每个Pod中手动配置。

(4)配置容器化应用程序:Secret可以用于存储应用程序的配置信息,例如数据库密码、第三方服务的API密钥等。将配置信息存储在Secret中,可以将容器镜像与配置数据分离,并在部署时注入到容器中,从而使容器的配置更加灵活和安全。

接下来介绍secret的存储使用方式

2.创建secret

可以通过yaml、--from-file、--from-literal进行创建,如下

[root@k8s-master volume]# kubectl create secret generic username --from-file=username -n myns
secret/username created
[root@k8s-master volume]# kubectl create secret generic passwd --from-file=passwd -n myns
secret/passwd created
[root@k8s-master volume]# kubectl get secrets -n myns
NAME       TYPE     DATA   AGE
passwd     Opaque   1      6s
username   Opaque   1      10s
​
[root@k8s-master volume]# kubectl create secret generic user --from-literal=user=SLB -n myns
secret/user created
[root@k8s-master volume]# kubectl create secret generic pass --from-literal=pass=123456 -n myns
secret/pass created
[root@k8s-master volume]# kubectl get secrets  -n myns
NAME       TYPE     DATA   AGE
pass       Opaque   1      8s
passwd     Opaque   1      93s
user       Opaque   1      29s
username   Opaque   1      97s
​
apiVersion: v1
kind: Secret
metadata:name: secret1namespace: myns
type: Opaque
data:user1: YWRtaW4=pass1: MWYyZDFlMmU2N2Rm
[root@k8s-master volume]# kubectl get secrets  -n myns
NAME       TYPE     DATA   AGE
pass       Opaque   1      2m31s
passwd     Opaque   1      3m56s
secret1    Opaque   2      5s
user       Opaque   1      2m52s
username   Opaque   1      4m
​
#这里演示如何进行base64的编码和解码
[root@k8s-master volume]# echo -n "freg" | base64
ZnJlZw==
[root@k8s-master volume]# echo -n "ZnJlZw==" | base64 --decode
freg

3.使用secret

(1)env变量

[root@k8s-master volume]# kubectl get pods -n myns
NAME              READY   STATUS    RESTARTS   AGE
my-nginx-secret   1/1     Running   0          10s
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns
error: you must specify at least one command for the container
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns -- /bin/sh
/ # 
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=my-nginx-secret
SHLVL=1
HOME=/root
TERM=xterm
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_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
name=sulibao
​
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # echo $name
sulibao
​
​
​
[root@k8s-master volume]# kubectl edit secrets username -n myns    #edit过后env没有同步
secret/username edited
[root@k8s-master volume]# kubectl get pods -n myns
NAME              READY   STATUS    RESTARTS   AGE
my-nginx-secret   1/1     Running   0          4m44s
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns -- /bin/sh
/ # 
/ # echo $name
sulibao

(2)volume挂载

apiVersion: v1
kind: Pod
metadata:name: my-nginxnamespace: myns
spec:containers:- name: nginximage: nginxports:- name: nginx-portcontainerPort: 80volumeMounts:- name: myvolumemountPath: /rootvolumes:- name: myvolumeprojected:sources:- secret:name: username- secret:name: passwd
​
[root@k8s-master volume]# kubectl get pods -n myns
NAME       READY   STATUS    RESTARTS   AGE
my-nginx   1/1     Running   0          5s
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/username"
sulibao
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/passwd"
slb317418
​
#edit过后通过volume挂载的secret同步了
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/username"
cenov

 

 

http://www.lryc.cn/news/262532.html

相关文章:

  • Linux服务器性能优化小结
  • ELF文件结构
  • 【C++】有关string迭代器的几道OJ题详解
  • 谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用
  • 软件测试用例经典方法 | 单元测试法案例
  • Leetcode 2967. Minimum Cost to Make Array Equalindromic
  • 【数据结构】什么是堆?
  • 生产环境_Spark处理轨迹中跨越本初子午线的经度列
  • Vue前端与后端放在一起的搭建方式
  • SI24R03国产自主可控RISC-V架构MCU低功耗2.4GHz收发芯片SoC
  • 基于FPGA的温度控制系统设计(论文+源码)
  • C语言训练:三个字符串比较大小,实现两个整数数的交换统计二进制中1的个数
  • module ‘tensorflow‘ has no attribute XXX 报错解决
  • MySQL数据库 DDL
  • 力扣二叉树--总结篇(2)
  • 小米移动端页面练习---重点:导航栏点击下箭头内容的切换以及样式,高亮显示的实现
  • 从零开始创建一个项目,springBoot+mybatisPlus+mysql+swagger+maven
  • 【视点合成】代码解读:生成demo视频
  • Process On在线绘制流程图
  • 【Hadoop-OBS-Hive】利用华为云存储对象 OBS 作为两个集群的中间栈 load 文件到 Hive
  • 直线检测算子
  • 如何在本地Docker中部署MinIO服务并实现远程访问管理界面
  • 逛商场。。。
  • RTrPPG
  • web应用开发技术的一些概念
  • 智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 超聚变服务器(原华为服务器)网站模拟器
  • Linux常见压缩指令小结
  • OpenSSL的源码在哪里下载?
  • 使用create-react-app脚手架创建react项目