千家信息网

k8s存储卷

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,1.emptyDir存储卷apiVersion: v1kind: Podmetadata: name: cunchujuanspec: containers: - name: myapp #定
千家信息网最后更新 2026年11月02日k8s存储卷

1.emptyDir存储卷

apiVersion: v1kind: Podmetadata:  name: cunchujuanspec:  containers:  - name: myapp  #定义第一容器用于显示index.html文件内容    image: ikubernetes/myapp:v1    imagePullPolicy: IfNotPresent    volumeMounts:    #调用存储卷    - name: html     #使用存储卷的名称要和下面定义的一样      mountPath: /usr/share/nginx/html/     #在容器内部挂载的路径  - name: busybox  #定义第二个容器用于产生index.html内容    image: busybox:latest    imagePullPolicy: IfNotPresent    volumeMounts:    - name: html      mountPath: /data/    command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']    #该命令会不停向,存储卷的index.html文件追加时间  volumes:  #定义存储卷  - name: html  #定义存储卷名称      emptyDir: {}    #定义存储卷类型


在上面,我们定义了2个容器,其中第二个容器是输入日期到存储卷的index.html当中,因为两个容器都是挂载的同一个存储卷,所以第一个容器的index.html是和第二个共享的,不停curl 能看见index.html在不停的增长

2.hostPath存储卷

apiVersion: v1kind: Podmetadata:  name: cs-hostpathspec:  containers:  - name: myapp    image: ikubernetes/myapp:v1    imagePullPolicy: IfNotPresent    volumeMounts:    - name: html      mountPath: /usr/share/nginx/html/  volumes:  - name: html    hostPath:        #存储卷类型为 hostPath      path: /data/hostpath            #实际node节点上的路径      type: DirectoryOrCreate


先看下调度到那个node的节点上,这边调度到cs27节点上了
mkdir /data/hostpath/ -pv #在cs27节点上创建 hostpath的存储卷文件夹
echo "hostpath存储卷测试" >/data/hostpath/index.html #在存储卷里生成一个主页文件

curl 访问一下,能看到文件内容就是上面我们生成的
注意这边容器在里面修改了数据,是会同步到hostpath 的存储卷的就和挂载一样

3.nfs共享存储卷

再找一台主机充当nfs server
mkdir data #创建nfs文件夹
echo "nfs测试">index.html #创建测试html文件
yum install -y nfs-utils #安装nfs 软件
vim /etc/exports #修改nfs配置文件
/data/ 192.168.0.0/24(rw,no_root_squash)
#配置文件 路径加共享对方的网段

每个node节点也要安装 yum install -y nfs-utils ,否则无法没挂载驱动

#在node的节点运行showmount -e 50.1.1.111 看看有没有挂载权限
kubectl apply -f nfs.yaml #载入容器资源

查看下ip ,curl 访问一下看是不是之前在nfs server上创建的html的测试文件

4.NFS使用PV和PVC

4.1 pv定义方式介绍

[root@k8s-master ~]# kubectl explain pv    #查看pv的定义方式FIELDS:    apiVersion    kind    metadata    spec[root@k8s-master ~]# kubectl explain pv.spec    #查看pv定义的规格spec:  nfs(定义存储类型)    path(定义挂载卷路径)    server(定义服务器名称)  accessModes(定义访问模型,有以下三种访问模型,以列表的方式存在,也就是说可以定义多个访问模式)    ReadWriteOnce(RWO)  单节点读写    ReadOnlyMany(ROX)  多节点只读    ReadWriteMany(RWX)  多节点读写  capacity(定义PV空间的大小)    storage(指定大小)[root@k8s-master volumes]# kubectl explain pvc   #查看PVC的定义方式KIND:     PersistentVolumeClaimVERSION:  v1FIELDS:   apiVersion      kind      metadata    spec [root@k8s-master volumes]# kubectl explain pvc.specspec:  accessModes(定义访问模式,必须是PV的访问模式的子集)  resources(定义申请资源的大小)    requests:      storage: 

4.2配置nfs 存储

mkdir v{1,2,3,}
vim /etc/exports
/data/v1 192.168.0.0/24(rw,no_root_squash)
/data/v2 192.168.0.0/24(rw,no_root_squash)
/data/v3 192.168.0.0/24(rw,no_root_squash)

4.3定义3个pv

apiVersion: v1kind: PersistentVolumemetadata:  name: pv001  labels:    name: pv001spec:  nfs:    path: /data/v1    server: 50.1.1.111  accessModes: ["ReadWriteMany","ReadWriteOnce",]  capacity:    storage: 1Gi---apiVersion: v1kind: PersistentVolumemetadata:  name: pv002  labels:    name: pv002spec:  nfs:    path: /data/v2    server: 50.1.1.111  accessModes: ["ReadWriteMany","ReadWriteOnce",]  capacity:    storage: 2Gi---apiVersion: v1kind: PersistentVolumemetadata:  name: pv003  labels:    name: pv003spec:  nfs:    path: /data/v3    server: 50.1.1.111  accessModes: ["ReadWriteMany","ReadWriteOnce",]  capacity:    storage: 5Gi

4.4 创建pvc

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mypvc  #name ,给下面调用的spec:  accessModes: ["ReadWriteMany"]  #声明访问类型,只能匹配到,pv包含的  resources:    requests:      storage: 3Gi      #声明需要3GB的空间,只能匹配3GB及意思的PV---apiVersion: v1kind: Podmetadata:  name: cs-hostpathspec:  containers:  - name: myapp    image: ikubernetes/myapp:v1    imagePullPolicy: IfNotPresent    volumeMounts:    - name: html      mountPath: /usr/share/nginx/html/  volumes:  - name: html    persistentVolumeClaim:    #挂载存储卷类型为 pvc      claimName: mypvc      #指定PVC的name为 "mypvc"

配置容器应用:Secret和configMap

Secret:用于向Pod传递敏感信息,比如密码,私钥,证书文件等,这些信息如果在容器中定义容易泄露,Secret资源可以让用户将这些信息存储在急群众,然后通过Pod进行挂载,实现敏感数据和系统解耦的效果。
ConfigMap:主要用于向Pod注入非敏感数据,使用时,用户将数据直接存储在ConfigMap对象当中,然后Pod通过使用ConfigMap卷进行引用,实现容器的配置文件集中定义和管理。

通过 --from-literal 创建

kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456#创建一个Secret namae为 mysecret 

通过 --from-file创建
每个文件内容对应一个信息条目。

[root@cs25 ~]# echo "admin" >username[root@cs25 ~]# echo "123456" >passwordkubectl create secret generic mysecret2 --from-file=username --from-file=password

通过 --from-env-file创建
文件 env.txt 中每行 Key=Value 对应一个信息条目。

[root@cs25 ~]# cat << EOF > env.txt> username=admin> password=12345> EOFkubectl create secret generic mysecret3 --from-env-file=env.txt

通过 YAML 配置文件:

先用base64 命令对密码等保密的数据完成转码

vim secret.yaml

apiVersion: v1kind: Secretmetadata:  name: mysecretyamldata:  username: YWRtaW4K  password: MTIzNDU2Cg==    #键值

查看



#反解码

使用secret

apiVersion: v1kind: Podmetadata:  name: pod-secretspec:  containers:  - name: pod-secret    image: nginx    volumeMounts:    - name: foo      #挂载那个存储卷      mountPath: "/etc/foo"      #pod 挂载的路径  volumes:  - name: foo    #创建存储卷,name,用于被pod 调用    secret:    #存储卷类型      secretName: mysecret      #用那个文件


exec 进入容器 cd 到/etc/foo 能看到我们创建mysecret的key 及value

重定向数据

apiVersion: v1kind: Podmetadata:  name: pod-secretspec:  containers:  - name: pod-secret    image: nginx    volumeMounts:    - name: foo      mountPath: "/etc/foo"  volumes:  - name: foo    secret:      secretName: mysecret      items:      #自定义存放路径及文件名      - key: username        path: 233/name        #重定向路径及文件名(key),注意路径要写相对路径      - key: password        path: 233/pass


这时候数据都被重定向到"/etc/foo/233" 文件夹里了

使用这种方式 Secret 还支持动态更新:Secret 更新后,容器中的数据也会更新。
vim secret.yaml


kubectl apply -f secret.yaml

登录进去查看,name 的 value已经发生了变化

环境变量传递 key

apiVersion: v1kind: Podmetadata:  name: pod-secretspec:  containers:  - name: pod-secret    image: nginx    env:      - name: username        #传递到容器内部的环境变量        valueFrom:          secretKeyRef:            name: mysecret            #使用那个secret            key: username            #使用那个key      - name: password        valueFrom:          secretKeyRef:            name: mysecret            key: password


exec 登录进去 echo 环境变量

通过环境变量 SECRET_USERNAME 和 SECRET_PASSWORD 成功读取到 Secret 的数据。
需要注意的是,环境变量读取 Secret 很方便,但无法支撑 Secret 动态更新。
Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap。

configmap 以上添加都支持就不一一举例了
configmap 来个实例
vim www.conf #创建nging 配置文件

server {    server_name www.233.com;    listen 8860;    root /data/web/html;}

kubectl create configmap configmap-cs --from-file=www.conf
#创建一个name为"configmap-cs" configmap资源,内容就是之前创建的www.conf
vim nginx-configmap #创建pod

 apiVersion: v1kind: Podmetadata:  name: pod-secretspec:  containers:  - name: pod-secret    image: nginx    volumeMounts:    - name: nginxconf      #调用名为"nginxconf"的存储卷      mountPath: /etc/nginx/conf.d/  volumes:  - name: nginxconf    #创建存储卷    configMap:    #存储卷类型为configMap      name: configmap-cs      #使用configmap里面的"configmap-cs"这个资源

kubectl apply -f nginx-configmap.yaml #载入启动

查看IP 访问我刚才定义的资端口,能正常访问说明配置文件生效了。

登录进去查看文件

kubectl edit configmaps configmap-cs
#命令修改资源,使用方法和vim 一样使用
POD挂载过程

 POD先挂载名为"nginxconf"的存储卷 "nginxconf"的存储卷的内容是调用configMap资源里 "configmap-cs"这个资源生成的 "configmap-cs" 这个资源是读取www.conf 文件生成的
存储 文件 容器 数据 节点 资源 路径 配置 类型 信息 内容 变量 方式 环境 更新 测试 生成 名称 命令 大小 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 伟宏互联网科技 苏州找大状互联网科技有限公司 壹账通互联网科技 奇士达互联网科技 互联网科技博客 互联网科技股有哪些 湖南一路畅行互联网科技 宜昌元轩互联网科技有限公司 广州市恰铎互联网科技有限公司 洛阳共同富裕互联网科技有限公司 深圳艾果互联网通讯科技 阿里互联网科技企业 徐州市互联网科技有限公司 无锡工业互联网科技有限公司 互联网金融科技元年 锡山区互联网智能科技产品供应 互联网科技收购价值 安徽零酒互联网科技有限公司 保山浩联互联网科技有限公司 互联网科技创业有什么好项目 互联网科技深圳 深圳齐家互联网科技 互联网科技ppt模板 上海万想互联网科技 滨湖区互联网智能科技产品供应 湖南洣水互联网科技有限公司扣款 互联网科技的全部知识 深圳艾果互联网通讯科技 艺电能源互联网科技有限公司招聘 高科技和互联网的现代国家
0