kubernetes存储之ConfigMap、Volume

本文详细介绍了Kubernetes中的配置管理工具,包括ConfigMap的三种创建方式,如何在Pod中使用ConfigMap数据卷,以及ConfigMap的热更新。此外,还讨论了Secret的类型和用途,如存储密码、密钥等敏感信息。同时,讲解了Volume的不同类型,如emptyDir、hostPath和NFS,以及它们在Pod数据持久化中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ConfigMap

创建的三种方式

1、使用目录创建
$ ls /opt/k8s/config
game.properties  ui.properties
$ cat game.properties 
enemies=aliens
lives=3
$ cat ui.properties 
color.good=purple
color.bad=yellow
$ kubectl create configmap game-config(cm名称) --from-file=../config/
#查看详细信息
$ kubectl get cm
NAME          DATA   AGE
game-config   2      4m42s
[root@master config]# kubectl get cm -o yaml 或者  kubectl describe cm game-config

–from-file 指定在目录下的所有文件都会被用在 ConfigMap 里面创建一个键值对,键的名字就是文件名,值就是文件的内容

2、指定单个文件创建
$ kubectl create configmap game-config-2 --from-file=../config/game.properties
$ kubectl  get cm
NAME            DATA   AGE
game-config     2      9m26s
game-config-2   1      15s

–from-file 这个参数可以使用多次,你可以使用两次分别指定上个实例中的那两个配置文件,效果就跟指定整个目录是一样的

3、命令行创建
$ kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
$ kubectl get cm
NAME             DATA   AGE
game-config      2      11m
game-config-2    1      2m47s
special-config   2      28s
$ kubectl describe cm special-config
Name:         special-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
special.how:
----
very
special.type:
----
charm
Events:  <none>

利用 --from-literal 参数传递配置信息,该参数可以使用多次

pod中通过数据卷插件使用configMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: |
    very
  special.type: |
    charm
---
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
    - name: test-container
      image: mynginx:v1
      command: [ "/bin/sh", "-c","cat /etc/config/special.how" ]
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
          name: special-config
  restartPolicy: Never

在数据卷里面使用这个 ConfigMap,有不同的选项。最基本的就是将文件填入数据卷,键就是文件名,键值就是文件内容,所以在容器/etc/config目录下会生成special.how与special.type两个文件

configMap热更新

$ kubectl edit configmap special-config

Secret

类型

  • Service Account :用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的
    /run/secrets/kubernetes.io/serviceaccount 目录中。
  • Opaque :base64编码格式的Secret,用来存储密码、密钥等。
  • kubernetes.io/dockerconfigjson :用来存储私有 docker registry 的认证信息,节点无需每次docker login登录拉取镜像。

kubernetes.io/dockerconfigjson

$ kubectl create secret docker-registry myregistrykey --docker-server=registry.sudytech.com:35000 -- docker-username=admin --docker-password=admin --docker-email=DOCKER_EMAIL

#在创建 Pod 的时候,通过 imagePullSecrets 来引用刚创建的 `myregistrykey`
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: mynginx:v1
  imagePullSecrets:
    - name: myregistrykey

Volume

背景

Kubernetes 中的卷有明确的寿命 —— 与封装它的 Pod 相同。所以,卷的生命比 Pod 中的所有容器都长,当这个容器重启时数据仍然得以保存。当然,当 Pod 不再存在时,卷也将不复存在。也许更重要的是,Kubernetes支持多种类型的卷,Pod 可以同时使用任意数量的卷。

Pod被创建时,会默认创建Pause的底层容器,Pod中的其他所有容器共享Pause的网站栈与共享卷,Volume与Pause进行挂载,当容器重启时,并不影响Pause容器,所以Volume也不会收到影响,但是当Pod不复存在时,Pause容器也不复存在,所以Volume也不复存在。

类型

emptyDir

当 Pod 被分配给节点时,首先创建 emptyDir 卷,并且只要该 Pod 在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入 emptyDir 卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时, emptyDir 中的数据将被永久删除(换句话说,emptyDir类型只存在与pod内部)。

apiVersion: v1
kind: Pod
metadata:
   name: mynginx
spec:
  containers:
    - name: mynginxcon1
      image: mynginx:v1 
      volumeMounts:
        - name: cache-volume
          mountPath: /cache
    - name: mynginxcon2
      image: mynginx:v2 
      volumeMounts:
        - name: cache-volume
          mountPath: /test 
  volumes:
    - name: cache-volume
      emptyDir: {}
$ kubectl apply -f empty.yaml 
pod/mynginx created
$ kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
mynginx   2/2     Running   0          4s
$ kubectl exec -it mynginx -c mynginxcon1 -- touch /cache/aaaaa
$ kubectl exec -it mynginx -c mynginxcon2 -- ls /test
aaaaa
hostPath

hostPath 卷将宿主机节点的文件系统中的文件或目录挂载到集群。除了所需的 path 属性之外,用户还可以为 hostPath 卷指定 type
type类型:

行为
空字符串(默认)用于向后兼容,这意味着在挂载 hostPath 卷之前不会执行任何检查
DirectoryOrCreate如果在给定的路径上没有任何东西存在,那么将根据需要在那里创建一个空目录,
权限设置为 0755,与 Kubelet 具有相同的组和所有权
Directory给定的路径下必须存在目录
FileOrCreate如果在给定的路径上没有任何东西存在,那么会根据需要创建一个空文件,权限设
置为 0644,与 Kubelet 具有相同的组和所有权。
File给定的路径下必须存在文件
Socket给定的路径下必须存在 UNIX 套接字
CharDevice给定的路径下必须存在字符设备
BlockDevice给定的路径下必须存在块设备
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
spec:
  containers:
    - image: mynginx:v1
      name: mynginxcon
      volumeMounts:
        - name: test-volume
          mountPath: /test-pd
    - image: mynginx:v2
      name: mynginxcon2
      volumeMounts:
        - name: test-volume2
          mountPath: /test-pd2
  volumes:
    - name: test-volume
      hostPath:
        path: /data
        type: Directory
    - name: test-volume2
      hostPath:
        path: /data2
        type: File                
$ kubectl apply -f hostpath.yaml 
pod/mynginx created
$ kubectl get  pod -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
mynginx   2/2     Running   0          20s   241.255.1.31   node1   <none>           <none>


#运行在node1节点上,所以需要node1节点需要存在data目录与data2的文件
[root@node1 /]# ll /data data2
-rw-r--r-- 1 root root  0 422 15:48 data2

/data:
总用量 0
-rw-r--r-- 1 root root 0 422 15:29 test
#容器内mynginxcon挂载了data目录,mynginxcon2挂载了data2文件
$ kubectl exec -it mynginx -c mynginxcon --  ls /test-pd
test
$ kubectl exec -it mynginx -c mynginxcon2 --  ls /test-pd2
/test-pd2

nfs
apiVersion: v1
kind: Pod
metadata:
  name: mynginx
spec:
  containers:
    - image: mynginx:v1
      name: mynginxcon
      volumeMounts:
        - name: test-volume
          mountPath: /test-pd
  volumes:
    - name: test-volume
      nfs:
        server: 170.18.9.140       #nfs服务端所在ip  
        path: /data        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值