千家信息网

k8s存储卷

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,1.emptyDir存储卷apiVersion: v1kind: Podmetadata: name: cunchujuanspec: containers: - name: myapp #定
千家信息网最后更新 2025年02月01日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安全错误 数据库的锁怎样保障安全 存储服务器自建 网易土豆服务器有什么用 购买软件开发后卖出会计科目 软件开发是最难的吗 建立可供远程连接的数据库 杭州基础网络技术服务 服务器ic灯是什么意思 VPS服务器搭建虚拟空间 南宁网络安全工程师薪资高就业快 驾校宝典类似的软件开发教程 中学身网络安全有哪些故事 音画代码软件开发 靖江网络技术有限公司 杭州 网络技术公司怎么样 安卓手机软件开发难学吗 网络技术有限公司被举报案件 数据库备份后可以查询 gt240显卡能做软件开发吗 和家亲连接服务器失败是怎么回事 智车宝互联网科技 apk移动应用软件开发破解版 十三五网络安全创新 服务器登录密码错误锁定设置 红花岗区网络安全事件 slq数据库连接主服务器失败 市场监督管理局网络安全 申请软件开发的报告怎么写 软件数据库安装视频 落实网络安全防范措施方案 软件开发哪个比较容易上手
0