configMap

为了在K8S中存储配置文件。许多应用程序会从配置文件,命令行参数或环境变量中读取配置信息。configMap API 给我们提供了 向容器中注入配置信息的机制。ConfigMap 可以被用来保存单个属性,也可以用来保存正规配置文件或者JSON 大对象

configMap 创建方式

  1. 使用目录创建
cat ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true

cat game.properties
enemies=allies
lives=3
enemies.cheat=true
enemies.cheat.level=nogoos
enemies.code.passpath=UUIDLSD

创建了两个文件之后执行命令. --from-file表示这两个文件的目录

kubectl create configmap game-config --from-file=/root/haha

在这里插入图片描述

  1. 使用资源清单的方式创建
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

创建好之后 kubectl apply -f ***.yaml

Pod 中使用 ConfigMap

  1. 使用ConfigMap来替代环境变量
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

创建一个pod来读取configMap作为环境变量

apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
spec:
  containers:
    - name: test-container
      image: zhucheng1992/myboot:4.0
      envFrom:
        - configMapRef:
            name: env-config
  1. 使用数据卷插件使用ConfigMap
apiVersion: apps/v1
kind: Pod
metadata:
  name: my-test-pod
spec:
  containers:
    - name: test-container
      image: zhucheng1992/myboot:4.0
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config

这个pod 创建了一个volume 是读取 configMap 的special-config,然后在自己的container中引用了这个volume
进入pod之后就可以看到可以在etc/config里面看到configmap的配置
在这里插入图片描述

secret

存储加密信息

volume

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

卷的类型

emptyDir

当pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的,Pod中的容器可以读取和写入 emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同的路径上。当pod被删除的时候,emptyDir数据将被永久删除
用法:

  1. 暂存空间,例如用于基于磁盘的合并排序
  2. 用作长时间爱你计算崩溃恢复时的检查点
  3. web服务器容器提供数据时,把偶才能内容管理容器提取的文件
apiVersion: v1
kind: Pod
metadata:
  name: empty-dir-pod
spec:
  containers:
    - name: test-container
      image: zhucheng1992/myboot:4.0
      volumeMounts:
        - name: cache-volume
          mountPath: /cache
  volumes:
    - name: cache-volume
      emptyDir: {}

hostPath

hostPath卷将主机节点的文件系统中的文件或目录挂载到集群中。

除了所需path之外,用户还可以为hostPath指定type

行为
空字符串(默认)用于向后兼容,这意味着在挂载hostPath卷之前不会执行任何检查
DirectoryOrCreate如果在给定的路径上没有任何东西存在,那么将根据需要在那里创建一个空目录,权限设置为0755,与kubectl具有相同的组合所有权
Directory给定的路径下必须存在目录
FireOrCreate如果给定的路径没有东西,则创建一个空文件,权限设置为0644,与kubectl 具有相同的组和所有权
File给定的路径下必须存在文件
socket给定的路径下必须存在 unix套接字
charDevice给定的路径下必须存在字符设备
BlockDevice给定的路径下必须存在块设备
apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
spec:
  containers:
    - name: test-container
      image: zhucheng1992/myboot:4.0
      volumeMounts:
        - name: test-volume
          mountPath: /cache
  volumes:
    - name: test-volume
      hostPath:
        path: /data
        type: Directory

PV

是由管理员设置的存储,是集群的一部分,就像 节点是集群的资源一样,pv也是集群的资源。 pv具有独立于pod的生命周期封装了存储细节

PVC
master中的监视环路监视新的PVC,并将他们绑定在一起,一旦绑定在一起,PVC是排他性的

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accssModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

访问模式 accssModes

每个pv都有一套自己的用来描述特定功能的访问模式

  1. ReadWriteOnce 该卷可以被单个节点以读写的模式挂载
  2. ReadOnlyMany 该卷可以被多个节点以只读模式挂载
  3. ReadWriteMany 该卷可以被多个节点以读写模式挂载

回收策略 persistentVolumeReclaimPolicy

  1. retain(保留) 手动回收
  2. Recycle (回收) 基本擦除 (rm -rf /volume/*)
  3. delete(删除) 关联的存储资产将被删除

状态 pv的多种状态

  1. available 一块空闲资源还没有被任何声明绑定
  2. bound 卷已经被绑定了
  3. released 声明被删除,但是资源还未被集群重新声明
  4. failed 自动回收失败

持久化演示说明-NFS

  1. 安装NFS服务器
yum install -y nfs-common nfs-utils rpcbind
mkdir /nfsdata
chmod 666 /nfsdata
chown nfsnobody /nfsdata
cat /etc/exports
     /nfsdata *(rw,no_root_squash,no_all_squash,sync)
 systemctl start rpcbind
 systemctl start nfs 
  1. nfs客户端安装软件
yum install -y nfs-common nfs-utils rpcbind
mkdir /test

在这里插入图片描述
3. 挂载nfs到本地

mount -t nfs 192.168.56.111:/nfsdata /test/
  1. 部署PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfspv1
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accssModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /nfsdata
    server: 192.168.56.111
  1. 创建pv
kubectl create -f nfspv.yaml

在这里插入图片描述
6. 创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  storageClassName: nfs
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

在这里插入图片描述
创建好之后就发现PVC 和 PV已经被绑定在一起了
7. pod中使用pvc

apiVersion: v1
kind: Pod
metadata:
  name: pvc-pod
spec:
  containers:
    - name: test-container
      image: zhucheng1992/myboot:4.0
      volumeMounts:
        - name: pvc-volume
          mountPath: /cache
  volumes:
    - name: pvc-volume
      persistentVolumeClaim:
        claimName: pvc-nfs

statefulSet 整合 pvc


Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐