kubernetes里面那些事—————存储

2024-09-03 16:44
文章标签 kubernetes 存储 里面

本文主要是介绍kubernetes里面那些事—————存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常用数据卷类型

  • 一,emptyDir
    • 1.1,emptyDir概念
    • 1.2,应用场景
    • 1.3,yaml示例
  • 二,hostPath
    • 2.1,hostPath概念
    • 2.2,应用场景
    • 2.3,yaml示例
  • 三,congfigmap
    • 3.1, configmap的作用
    • 3.2, 注意事项:
    • 3.3, 使用configmap创建java项目配置文件
    • 3.4,subPath应用
    • 3.5, configmap作为环境变量
  • 四,secret
    • 4.1 ,secret类型
    • 4.2,secret保存用户密码
    • 4.3 ,使用secret创建docker-registry
  • 五,PV和PVC
    • 5.1,PersistentVolume(PV)
    • 5.2,PersistentVolumeClaim(PVC)
    • 5.3,工作流程
    • 5.4,pv生命周期
    • 5.5 ,手动使用pv,pvc
  • 六,PV动态供给
    • 6.1,yaml示例
    • 6.2,回收策略修改
    • 6.3, pvc扩容

节点本地: hostPath emptyDir
网络:NFS GFS Ceph Openebs
k8s资源: configMap Secret

一,emptyDir

1.1,emptyDir概念

是一个临时存储卷(pod所在节点),与pod生命周期绑定,如果pod删除卷也会被删除

1.2,应用场景

pod中容器之间数据共享

1.3,yaml示例

apiVersion: v1
kind: Pod 
metadata: name: my-pod
spec:containers:- name: write # 业务容器(写数据) image: centos:7command: ["bash","-c","for i in {1..100};do echo $i  >>/data/hello;sleep 1;done"]volumeMounts:- name: data mountPath: /data- name: read # 辅助容器(读数据)image: centoscommand: ["bash","-c","tail -f /data/hello"] volumeMounts:- name: data mountPath: /datavolumes:- name: dataemptyDir: {}

二,hostPath

2.1,hostPath概念

挂载node文件系统(pod所在节点)上文件或者目录到pod中的容器,pod删除后数据会持久化在宿主机上

2.2,应用场景

pod中容器需要访问宿主机文件(cadvisor暴露指标、jenkins打包镜像)

2.3,yaml示例

apiVersion: v1
kind: Pod
metadata:name: testpod
spec:containers:- name: testimage: busyboxargs:- /bin/sh- -c - sleep 36000volumeMounts:- name: datamountPath: /project #挂载到容器中目录   - name: data2mountPath: /project2volumes:- name: datahostPath:path: /tmp  #宿主机目录type: Directory  #挂载卷的类型为目录 - name: data2hostPath:path: /etctype: Directory 

三,congfigmap

3.1, configmap的作用

  • 持久化保存配置文件
  • 根据需要覆盖原配置文件

3.2, 注意事项:

  • 以subpath方式挂载的无法直接在容器中修改 文本数据挂载成文件时采用 UTF-8
  • 字符编码。如果使用其他字符编码形式,可使用binaryData字段。

3.3, 使用configmap创建java项目配置文件

apiVersion: v1
kind: ConfigMap
metadata:name: java-demo-config
data:config: |server:port: 8080spring:datasource:url: jdbc:mysql://java-demo-db:3306/test?characterEncoding=utf-8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverfreemarker:allow-request-override: falsecache: truecheck-template-location: truecharset: UTF-8content-type: text/html; charset=utf-8expose-request-attributes: falseexpose-session-attributes: falseexpose-spring-macro-helpers: falsesuffix: .ftltemplate-loader-path:- classpath:/templates/ #到这都是配置文件

3.4,subPath应用

使用场景
场景一:一个共享卷,挂载多个路径。
场景二:ConfigMap或Secret挂载到特定目录的特定路径, 而该目录下已经有其他文件且不希望被覆盖掉。可以通过 subPath 挂载卷的子目录,而不是根目录。

        volumeMounts:- name: config #挂载数据卷的名字mountPath: "/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/application.yml"   #挂载到容器中的目标目录subPath: application.yml #subpath代表远端存储子路径volumes:- name: config #数据卷名configMap: #类型name: java-demo-config items:- key: "config"  #ConfigMap中key config中的内容被挂载到pod的mountPath路径path: "application.yml" #路径由 spec.containers 中参数 volumeMounts.mountpath 和 volumes 中参数 items.path 拼接而成

3.5, configmap作为环境变量

cat nacos-env-cm.yaml

apiVersion: v1
data:nacos_addr: http://nacos-cs:8848nacos_ns_uc: 845a984f-9b16-46e3-a396-78f84ba669d7nacos_ns_vsoc_csa: 845a984f-9b16-46e3-a396-78f84ba669d7nacos_ns_vsoc_front: 614a56fc-e64f-4904-b0f1-635c66f2f82f
kind: ConfigMap
metadata:name: nacos-env

cat pod.yaml

spec:containers:- env:- name: TZvalue: Asia/ShanghaienvFrom:- configMapRef:name: nacos-env

四,secret

4.1 ,secret类型

  • Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;但数据也可以通过base64 –decode解码得到原始数据,所有加密性很弱。
  • 用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的 /run/secrets/kubernetes.io/serviceaccount 目录中。
  • kubernetes.io/dockerconfigjson : 用来存储私有docker registry的认证

4.2,secret保存用户密码

加密:echo admin | base64
YWRtaW4K
解密:echo YWRtaW4K | base64 -d
admin
创建

apiVersion: v1
kind: Secret
metadata:name: mysecret
type: Opaque
data:password: MWYyZDFlMmU2N2Rmusername: YWRtaW4=

#将Secret挂载到环境变量中

apiVersion: apps/v1
kind: Deployment
metadata:name: wordpress-deployment
spec:replicas: 2selector:matchLabels:app: wordpressstrategy:type: RollingUpdatetemplate:metadata:labels:app: wordpressvisualize: "true"spec:containers:- name: "wordpress"image: "wordpress"ports:- containerPort: 80env:- name: WORDPRESS_DB_USERvalueFrom:secretKeyRef:name: mysecretkey: username- name: WORDPRESS_DB_PASSWORDvalueFrom:secretKeyRef:name: mysecretkey: password

4.3 ,使用secret创建docker-registry

kubectl create secret docker-registry harbor-auth --docker-username=admin --docker-password=Harbor12345 --docker-server=reg.ale.com -n dev

yaml中应用imagePullSecrets

spec:replicas: REPLICASselector:matchLabels:project: PROJECTapp: APP_NAMEtemplate:metadata:labels:project: PROJECTapp: APP_NAMEspec:imagePullSecrets:- name: "harbor-auth"

五,PV和PVC

5.1,PersistentVolume(PV)

持久数据卷,对存储资源的抽象,使得存储作为集群中的资源管理

5.2,PersistentVolumeClaim(PVC)

持久数据卷申请,用户定义使用的存储容量,使得用户不需要关心后端存储实现

5.3,工作流程

Pod申请PVC作为卷来使用,Kubernetes通过PVC查找绑定的PV,并挂载到Pod中供程序使用

5.4,pv生命周期

ACCESS MODES(访问模式):
AccessModes 是用来对 PV 进行访问模式的设置,用于描述用户应用对存储资源的访问权限,访问权限包括下面几种方式:
• ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
• ReadOnlyMany(ROX):只读权限,可以被多个节点挂载
• ReadWriteMany(RWX):读写权限,可以被多个节点挂载

RECLAIM POLICY(回收策略):
目前 PV 支持的策略有三种:
• Retain(保留): 保留数据,需要管理员手工清理数据
• Recycle(回收):清除 PV 中的数据,效果相当于执行 rm -rf /ifs/kuberneres/*
• Delete(删除):与 PV 相连的后端存储同时删除
修改回收策略:
spec:

......persistentVolumeReclaimPolicy:  Recycle
......

STATUS(状态):
一个 PV 的生命周期中,可能会处于4中不同的阶段:
• Available(可用):表示可用状态,还未被任何 PVC 绑定
• Bound(已绑定):表示 PV 已经被 PVC 绑定
• Released(已释放):PVC 被删除,但是资源还未被集群重新声明
• Failed(失败): 表示该 PV 的自动回收失败

5.5 ,手动使用pv,pvc

创建pv

apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv1
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncenfs:path: /nfs/kubernetesserver: 192.168.200.1

创建pod使用pvc

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: web-pvname: web-pv
spec:selector:matchLabels:app: web-pvtemplate:metadata:labels:app: web-pvspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumes:- name: wwwpersistentVolumeClaim:claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 5Gi

六,PV动态供给

  • PV动态供给,使用StorageClass对象实现,只需要定义pvc,pv会自动创建绑定
  • 使用nfs-external-provisioner实现
    storageClassName: “managed-nfs-storage”

6.1,yaml示例

cat > web-sc.yaml << EOF 
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: web-scname: web-sc
spec:selector:matchLabels:app: web-sctemplate:metadata:labels:app: web-scspec:containers:- name: nginximage: nginxvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumes:- name: wwwpersistentVolumeClaim:claimName: my-pvc3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc3
spec:storageClassName: "managed-nfs-storage"accessModes:- ReadWriteManyresources:requests:storage: 5GiEOF

6.2,回收策略修改

存储类级别,创建后不能更新


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:archiveOnDelete: "false"  #是启用数据卷归档,pod删除时,pv打包成压缩包allowVolumeExpansion: true #是否允许扩容reclaimPolicy: #可选参数,Delete、Retain,pvc和pod删除时,删除还是保留pv,默认为Delete  

pvc级别

spec:capacity:storage: 5GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain

对已经创建的pv更新保留策略

kubectl patch pv pvc-99648dc8-de7d-49e2-81ed-433989ba33ad -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

6.3, pvc扩容

前提是存储类支持扩容
对pvc进行扩容时,只需要修改pvc的定义,将resources.requests.storage设置为一个更大的值即可。

这篇关于kubernetes里面那些事—————存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133483

相关文章

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP