pause容器为基础架构容器,每一个节点都有一个pause镜像, 为每一个pod提供底层基础支撑设备,所有pod中容器会共享此容器的网络空间,存储卷也是

还可使用csi,存储插件。

使用存储卷步骤1.在pod中配置使用存储卷,2.在pod中的容器定义挂载存储卷则可使用

配置volume示例

apiVersion: v1
kind: Pod
metadata:
name: myapp
mamespace: vol
labels
app: myapp
spec
#nodeName: node3 #此方式可以固定pod调度的节点
containers:
- name: myapp
image: ikubernetes/ myapp:v1#镜像
volumeMounts :#定义挂载内容
- name: webstor #使用的存储卷名称,这跟下面volume字段相同表示使用webstor这个存储卷
mountPath: /usr/share ng inx/html#挂载至容器中哪个目录
readOnly: true #自读方式挂载
volumes : #volumes字段定义了paues容器关联的宿主机或分布式文件系统存储卷
- name: webstor #存储卷名称
hostPath : #路径,为宿主机或其他存储路径
path: /data/volumes/myapp
type:DirectoryOrCreate #定义类型,这表示如果宿主机没有此目录则会自动创建

kubectl describe pod myapp -n vol #查看pod内部状态。

此pod被调度至node3节点。传递一个页面至node3中由我们在yml配置文件中定义的路径。即可访问



这个方式只能在单独节点创建,如果pod调度至别的节点则关联存储卷会失败

存储卷类型:

local方式挂载:可挂载至本地磁盘,硬盘。

emptyDir:可使用节点中的多哥容器使用宿主机部分内存当作缓存来共享文件。当pod被删除之后empdir即消失

使用外部存储nfs作为存储卷

1。构建nfs文件系统

yum install nfs-utils -y #在集群每个节点都要安装
mkdir -p /vols/v{1,2,3,4,5}创建目录
vim /etc/exports
/vols/v1 192.168.1.0/24(rw,no_root_squash)#将目录导出给k8s集群所在网段
systemctl start nfs #启动nfs服务 ##配置文件
apiversion: u1
kind: Pod
metadata
name: wol -nfs -pod
namespace: vol
labels
app: redis
spec
containers
- name: redis
image: redis :alpine
ports : #定义容器内端口
- containerPort: 6379
name : redis
volumeMounts
- mountPath: /data#关联至容器内目录
name: data#存储卷名称
volumes :
- name: data
nfs: #定义存储卷格式使用nfs
server: 192.168.1.199 #指定nfs主机
path: /vols/v1#指定nfs挂着卷 kubectl apply -f vol-nfs.yaml#应用文件



此时可以跨节点保存数据,也不怕pod被调度至其他节点了

使用pv。pvc

pv:是指将外部存储系统的某目录,磁盘,云盘等抽象为k8s集群可用存储单元。pv为集群级别资源。且一个名称空间只能使用一个pv,需要将pv注册至名称空间

需要创建一个pvc将请求占用pv,即可一一对应(binding)一旦占用一个pv之后空间中的pod就可使用pvc了。

pv回收策略(reclaim):

delete

Recycle(废弃)

Retain

pv生命周期。

供给存储单元

绑定

使用

回收

配置过程。



配置好外部存储系统

apiVersion: v1
kind: Persistentvolume #类型为PV
metadata #元数据。注意此处没有名称空间,因为pv属于集群资源
name: pu-nfs-v2
labels:
storage: nfs
spec:
#定义访问模式。单路读写,多路读写,多路只读
accessModes [ "ReadwriteOnce ","ReadwriteMany" ,"ReadOnlyMany"]
capacity: #定义了存储空间大小限制
storage: 5Gi#限制为5G
volumeMode: Filesystem#存储卷类型。有文件系统,和块设备等
persistentvolumeReclaimPolicy: Retain #回收策略。删除了pvc之后pv怎么处理retain表示删除pvc时保存pv中数据
nfs : #nfs定义
server: 192 .168.1.199
path: /vols/v2

而后在名称空间中定义pvc来请求这个pv资源

kind: PersistenVolumeClaim
apiVersion: v1
metadata:
name: redis-data
mamespcae: vol#pvc属于名称空间级别
spec :
accessModes :#访问模式。需要少于pv的三种类型才可被匹配
- ReadWhriteOnce
volumeMode: Filesystem
resources:#资源配置
request : #请求资源,与Pod中资源限制不同
storage: 3Gi #磁盘大小为3G



而后此pvc会自动关联至pv,因为此pv多路读写,多路只读,单路读写,而且空间为5G高于pvc的条件。

创建Pod使用pvc资源
apiVersion: v1
kind: Pod
metadata
name: redis -demo
namespace: vo1
labels
app: redis -demo
spec
containers:
name: redis -demo
image: redis:alpine #容器镜像
volumeMounts :#定义容器存储卷
name:data
mountPath: /data#挂载目录
volumes : #定义存储卷
name: data#名称
persistentvollumeClaim : #使用存储卷类型。这里为pvc
claimName: redis-data #绑定同一名称空间中的pvc。当作自己的存储卷

pod创建成功之后可在redis存入数据,将会保存至存储节点中



pv回收顺序先删除pod>pvc>pv。

k8s之volume的更多相关文章

  1. 容器编排系统K8s之Volume的基础使用

    前文我们聊到了k8s上的ingress资源相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14167581.html:今天们来聊一下k8s上volum ...

  2. k8s namespace/volume

    https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/ 只挑个人感觉使用较多/比较重要的点来说 ...

  3. k8s local volume 和host path volume的区别

    k8s提供多种volume接口,其中local 和host path是容易混淆的两个接口.下面这篇文章解释了两者的区别: https://groups.google.com/forum/#!topic ...

  4. 6.k8s.存储Volume.PV.PVC

    #Volume Volume 解决数据持久化和容器间共享数据 Kubernetes支持几十种类型的后端存储卷 #hostPath挂载实例,挂载Node节点/tmp/test-volume目录到容器/t ...

  5. Kubernetes --(k8s)volume 数据管理

    容器的磁盘的生命周期是短暂的,这就带来了许多问题:第一:当一个容器损坏了,kubelet会重启这个容器,但是数据会随着container的死亡而丢失:第二:当很多容器在同一Pod中运行的时候,经常需要 ...

  6. k8s volume

        只有nfs和rbd的,本人翻译确实很渣         在容器中磁盘文件寿命是短暂的,当在容器中运行一些重要程序时,这会产生一些问题. 首先,当一个容器崩溃后,kubelet将重新启动该容器, ...

  7. [经验交流] k8s mount 文件到容器目录

    docker 的 volume 可以 mount 单个文件(比如单个配置文件)到容器目录.同时保留原目录的内容.放到 k8s 中,结果却变成了这样:k8s 的 volume 把文件mount 到容器目 ...

  8. 理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

    理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...

  9. k8s 架构浅析

    文章目录 目录 Kubernetes 的电梯间演讲 Kubernetes 的核心层级对象 Kubernetes 的组件架构 Kubernetes 的组件通信协议/接口 Kubernetes 的分层架构 ...

随机推荐

  1. 今天使用Jmeter时遇到的几个问题及解决方法

    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法 在Jmeter中run JDBC Request时,收到 ...

  2. 泡泡一分钟:Collaborative Mapping with Pose Uncertainties using different Radio Frequencies and Communication Modules

    张宁 Collaborative Mapping with Pose Uncertainties using different Radio Frequencies and Communication ...

  3. SDN实验---OVS了解(转载)

    转载自:https://opengers.github.io/openstack/openstack-base-use-openvswitch/ 一:Open vSwitch介绍 (一)介绍 在过去, ...

  4. 【Spring Cloud学习之五】配置中心

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 一.什么是配置中心在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实 ...

  5. Vue脚手架菜鸟级错误 npm run dev

    ERROR Failed to compile with 1 errors Failed to resolve loader: stylus-loaderYou may need to install ...

  6. 实现简单的string类

    摘要 实现了一个string类,包括基本的构造.赋值.判断.大小写等. String API Constructors string(); string(const char& ch); st ...

  7. Go基础编程实践(三)—— 日期和时间

    日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...

  8. Typora使用技巧系列:(1)

    Typora使用技巧(1) 刚刚开了博客怎么说也要学一下markdown语法什么的吧,使用的是编译器是Typora,之后有空会陆续更新的 切换到源代码模:(ctrl + /)临时切换到源代码模式,再按 ...

  9. .net 生成非托管代码

    最近在一个老外的程序中看到一段代码,其中使用了System.Runtime.InteropServices.MarshalAs方法进行托管代码与非托管代码之间封装数据,感觉很新颖.特意记录下来,供大家 ...

  10. vscode入门使用教程(页面调试)

    初次使用vscode时各种不适应,所有需要用到的功能貌似都需要单独安装插件才能用.这让很多初次使用vscode的朋友有点无所适从. 下面本人就带各位朋友学习下如何使用vscode来进行最基本的工作—— ...