kubernetes存储入门(kubernetes)

news2024/11/18 9:26:28

实验环境依旧是三个节点拉取镜像,然后在master节点拉取资源清单:

然后同步会话,导入镜像;

存储入门

ConfigMap

volume卷--》volumemount(挂载卷)

Glusterfs

NFS

ISCSI

HostPath

ConfigMap

Secret

EmptyDir

PVC

云原生存储技术:cephFS

emptydir:并不会在主机上体现出来,会在同一个pod内不同容器间体现出来;

pod(容器1和容器2):两个容器间共享目录;

docker主机

k8s主机

apiVersion: apps/v1

这指定了使用的Kubernetes API版本,apps/v1是Deployment资源的稳定版本,用于定义和管理应用部署。

kind: Deployment

这指定了YAML文件中定义的资源类型为Deployment。Deployment是Kubernetes中用于声明式地更新应用和服务的高级抽象。

metadata

metadata部分包含了Deployment的元数据。

  • labels: 定义了一组键值对,用于标识和选择对象。这里定义了app: nginx标签,用于选择和标识这个Deployment。

  • name: Deployment的名称,这里是nginx。

  • namespace: Deployment所在的命名空间,默认是default。命名空间用于将集群内的资源逻辑上隔离。

spec

spec部分定义了Deployment的规格。

  • replicas: 指定了需要运行的Pod副本数量,这里是1。

  • selector: 一个标签选择器,用于指定Deployment管理的Pods的标签。这里选择了标签为app: nginx的Pods。

  • template: 定义了Pod的模板,用于创建新的Pods。

    • metadata: Pod模板的元数据,同样包含了labels来定义Pod的标签。

    • spec: Pod模板的规格。

      • containers: 定义了Pod中运行的容器列表。

        • 第一个容器使用了nginx:1.7.9镜像,设置了imagePullPolicy为IfNotPresent(如果本地没有镜像,则从远程仓库拉取),并挂载了名为share-volume的卷到/opt目录。

        • 第二个容器同样使用了nginx:1.7.9镜像,但通过设置command覆盖了容器的默认启动命令,使容器在启动后执行sh -c sleep 3600命令(即睡眠3600秒),并挂载了share-volume卷到/mnt目录。

      • volumes: 定义了Pod中使用的卷。

        • 这里定义了一个名为share-volume的空目录卷(emptyDir),它将在Pod的每个容器中共享。注释掉的#medium: Memory表示如果取消注释,这个卷将会存储在内存中,而不是默认的磁盘上,但这通常不是emptyDir卷的标准用法,因为emptyDir卷默认就是基于节点的磁盘存储的。

总结

这个Deployment配置定义了一个包含两个nginx容器的Pod,它们都挂载了同一个空目录卷(share-volume),但第二个容器在启动后不会运行nginx服务,而是睡眠3600秒。这种配置可能用于测试、日志收集或需要容器间共享数据的场景。注意,由于两个容器都试图使用同一个端口(nginx默认端口80),这种配置在实际部署中可能无法正常工作,除非nginx配置被修改以监听不同的端口或使用其他网络配置。

创建出来:

然后登录到容器中进行验证:

然后登录到另外一个容器中应该能够看到创建的文件;

  1. UTC与本地时间的差异

:UTC(协调世界时)是全球统一的时间标准,也称为零时区时间。而中国位于东八区,因此中国的标准时间(CST,中国上海时间)是UTC时间加上8小时。

如何解决时间问题:当前是亚洲上海时区;

而容器中是默认的时间。即:格林尼治天文台的时区;

只要把k8s主机上的localtime文件,映射到容器中就可以了。

引出了第二种技术:

HostPath(主机路径)该技术不仅可以指定文件,还可以指定目录;(Directory)

类似于docker中的-v选项:docker run -v /data1/nginx.conf:/data1/nginx.conf

apiVersion: apps/v1 # 指定使用的Kubernetes API版本为apps/v1,这是用于部署(Deployments)的API版本

kind: Deployment # 定义资源的类型为Deployment

metadata: # 元数据部分,用于定义Deployment的标识信息

labels: # 标签,用于组织和选择对象

app: nginx # 定义一个标签,键为app,值为nginx

name: nginx # Deployment的名称

namespace: default # Deployment所在的命名空间,默认为default

spec: # Deployment的规格说明

replicas: 1 # 副本数量,这里设置为1,即只部署一个Pod

selector: # 选择器,用于确定哪些Pods属于这个Deployment

matchLabels: # 通过标签匹配Pods

app: nginx # 匹配标签app=nginx的Pods

template: # Pod模板,用于创建Pods

metadata: # Pod的元数据

labels: # Pod的标签

app: nginx # Pod的标签,键为app,值为nginx

spec: # Pod的规格说明

containers: # 容器列表

- image: nginx:1.7.9 # 容器使用的镜像,这里使用的是nginx的1.7.9版本

imagePullPolicy: IfNotPresent # 镜像拉取策略,如果不存在则拉取

name: nginx # 容器的名称

volumeMounts: # 容器挂载的卷列表

- mountPath: /etc/localtime # 容器内的挂载路径

name: timezone-time # 挂载的卷的名称

volumes: # Pod中定义的卷列表

- name: timezone-time # 卷的名称

hostPath: # 使用宿主机上的文件或目录作为卷

path: /etc/localtime # 宿主机上的路径

type: File # 类型为文件

这个配置创建了一个Deployment,该Deployment会部署一个Pod,Pod中运行一个Nginx容器,容器的Nginx版本为1.7.9。此外,这个配置还通过hostPath卷将宿主机的/etc/localtime文件挂载到容器的/etc/localtime路径下,这样做的目的是为了让容器内的系统时间与宿主机保持一致,避免时区不一致导致的问题。

创建出来并测试:

扩展:

在Kubernetes(K8S)中,容器退出时的状态码(Exit Code)具有特定的含义,用于表示容器的终止原因和运行状态。这些状态码通常遵循Linux操作系统中的退出码约定,其值在0-255之间。以下是一些常见的容器退出状态码及其含义:

  1. 0

:表示容器正常退出,没有发生错误。这通常意味着容器内的应用程序按照预期完成了其任务并正常关闭。

  1. 1

:通常表示一般性错误。这可能是由于程序错误、命令行参数错误、Dockerfile中引用不存在的文件等原因导致的。

  1. 126

:表示命令调用错误,可能是由于权限问题或命令不可执行。容器尝试执行没有权限或不可执行的命令时,会返回此状态码。

  1. 127

:表示找不到命令。容器尝试执行一个不存在的命令时,会返回此状态码。

  1. 128 + N(N为信号编号)

:表示容器收到一个信号并退出。例如,128 + 9(即137)表示容器收到了SIGKILL信号,这通常是由于用户手动停止容器或系统因为资源不足(如OOMKilled)而强制终止容器。

  1. 255

:通常表示退出状态未知或无效。这可能是由于程序以非标准方式退出,或者状态码在转换过程中出现了问题。

当容器退出时,可以通过Kubernetes的命令行工具

kubectl来查看容器的退出状态码。例如,使用

kubectl describe pods 命令可以查看Pod的详细信息,包括容器的退出状态码。这对于排查容器故障和定位问题非常有帮助。

但是以上方式有弊端,因为k8s生成pod的时候会根据调度算法进行调度的,调度到哪个节点具有不确定性。(可能被创建到的节点没有所需的数据)

那么就可以使用共享目录:

NFS:c/s架构;都是安装nfs-utils安装包;

那么就可以分工,101作为服务器端,而102和103作为客户端;

同步会话开始安装对应的软件包;

然后在“服务器端”修改它的配置文件;

  • /opt/wwwroot

:这是NFS服务器上希望共享给客户端的目录路径。在这个例子中,/opt/wwwroot目录将被NFS服务共享出去,允许其他计算机通过网络访问这个目录中的文件。

  • 192.168.10.0/24

:这是客户端的IP地址范围,使用的是CIDR(无类别域间路由)表示法。192.168.10.0/24表示从192.168.10.1到192.168.10.254的所有IP地址(包括两端的地址,但通常不包括网络地址192.168.10.0和广播地址192.168.10.255)。这意味着这个NFS共享仅对处于这个子网内的客户端开放。

  • (rw,sync,no_root_squash)

:这是应用于该共享的访问选项,用括号括起来并用逗号分隔。

综上所述,这个NFS配置条目允许子网192.168.10.0/24内的客户端以读写方式访问

/opt/wwwroot目录,且服务器会在回应写请求前将数据同步到磁盘,同时允许客户端的root用户拥有与NFS服务器上/opt/wwwroot目录相同的root权限。

然后创建出来共享目录,且生成测试文件,并启动相应的程序;

查看它对应的资源清单;

这个Kubernetes资源定义文件是一个Deployment对象,用于在Kubernetes集群中部署和管理应用。具体来说,它配置了一个名为nginx的部署,该部署使用Nginx的1.7.9版本镜像,并将一个NFS卷挂载到容器的/usr/share/nginx/html目录中。下面是对这个配置文件的详细解释:

  • apiVersion: apps/v1

:指定了Kubernetes API的版本,这里是apps/v1,它包含了Deployment、StatefulSet等应用部署相关的资源定义。

  • kind: Deployment

:声明了这个YAML文件定义的资源类型是一个Deployment。

  • metadata

:包含了关于这个Deployment的元数据。

:定义了Deployment的规格说明。

这个配置文件创建了一个Deployment,它会启动一个Pod,该Pod中运行一个Nginx容器,并将NFS服务器(IP地址为192.168.10.101)上/opt/wwwroot目录的内容挂载到容器的/usr/share/nginx/html目录中。这样,Nginx服务器就可以通过其Web根目录(即/usr/share/nginx/html)提供NFS服务器上/opt/wwwroot目录中的内容了。

因为创建的时候不确定会创建到哪个节点,所以要保证每个工作节点上都装有nfs;

验证:

pv持久化卷--PVC(C:claim声明)

删除pod不会影响到pvc,因为两个都是独立的资源对象;

删除pvc对pv的影响;

回收策略:

retain保留:删除了pvc,不影响pv;

recycle:删除了pvc,pv还在,只是pv的数据没有了;

delete:删除,删除了pvc,对应的pv也没了;

pvc声明pv的时候的访问策略:

readwriteonce:单路读写(允许被某一个节点使用,一旦被使用,其他的节点无法使用)RWO

readwriteoncepod:单节点读写,只能被一个pod读写。RWOP

readonlymany:多路只读。ROX

readwritemany:多路读写。RWX

先创建pv再创建pvc再创建pod;

创建pv:

静态pv:pv--》pvc--》pod

动态pv:存储类--》pvc--》pv自动创建出来了--》pod

hostpath

NFS

  • kind: PersistentVolume

:指定了这个YAML文件定义的资源类型为PersistentVolume(持久卷)。PersistentVolume是Kubernetes中用于存储数据的抽象,它独立于使用它的Pod的生命周期。

  • apiVersion: v1

:指定了使用的Kubernetes API版本为v1。

  • metadata

:包含了关于这个PersistentVolume的元数据。

:定义了持久卷的具体规格。

总的来说,这个配置定义了一个名为mypv-hostpath的持久卷,它映射到宿主机上的/mnt/data目录,拥有10GiB的存储空间,并且只能被单个节点以读写模式挂载。这个持久卷被归类到pv-hostpath存储类中。

创建出来:

被调用的时候会使用存储类名称(storageclassname)而不会使用pv的名称;

NFS的pv:

注意yaml文件中每个单词首字母大写;遵循了编程中的驼峰原则。

  • apiVersion: v1

:指定了使用的Kubernetes API版本为v1。

  • kind: PersistentVolume

:表明这个YAML文件定义的是一个PersistentVolume资源。

  • metadata

:包含了关于这个PersistentVolume的元数据。

:定义了持久卷的具体规格。

请注意,对于NFS持久卷,persistentVolumeReclaimPolicy设置为Recycle可能不是最佳选择,因为NFS卷通常设计为共享资源,并且Recycle策略可能不适用于这种场景。在实际应用中,您可能需要考虑使用Retain策略,以便在不再需要持久卷时手动管理其回收。

创建出来:

如何创建pvc:(指向hostpathpv的pvc)

  • kind: PersistentVolumeClaim

:这指定了资源类型为PersistentVolumeClaim。

  • apiVersion: v1

:这表示该资源定义遵循Kubernetes API的v1版本。

  • metadata

:这是关于PVC的元数据部分。

:这是PVC的规格说明部分,定义了PVC的具体需求。

:这指定了PVC所使用的StorageClass的名称。StorageClass是一个抽象层,用于定义如何动态地提供存储。在这个例子中,pv-hostpath很可能是一个自定义的StorageClass,它指示Kubernetes使用基于HostPath的存储卷。HostPath卷是将主机节点上文件或目录挂载到Pod中的卷类型,主要用于开发或测试环境。

:这定义了PVC的访问模式。

:这定义了PVC的资源需求。

总的来说,这个PersistentVolumeClaim定义了一个名为mypvc-hostpath的存储卷请求,它请求3GiB的存储空间,通过名为pv-hostpath的StorageClass来动态提供存储,且该存储卷以ReadWriteOnce模式被访问。这允许Kubernetes在集群中自动查找或创建满足这些条件的存储资源,并将其分配给请求它的Pod。

创建出来:

基于nfs的pvc:

  • kind: PersistentVolumeClaim

:这指定了资源类型为PersistentVolumeClaim,即这是一个PVC对象。

  • apiVersion: v1

:这表示该资源定义遵循Kubernetes API的v1版本,这是Kubernetes中最常用和最稳定的API版本之一。

  • metadata

:这是关于PVC的元数据部分。

:这是PVC的规格说明部分,定义了PVC的具体需求。

:这指定了PVC所使用的StorageClass的名称。StorageClass是一个用于定义如何动态地提供存储的抽象层。在这个例子中,pvc-nfs很可能是一个已经定义的StorageClass,它告诉Kubernetes使用NFS作为存储后端来动态创建PV(PersistentVolume)。这意味着,如果集群中存在一个与该StorageClass相关联的NFS服务器,并且有足够的空间来满足这个PVC的请求,Kubernetes将自动为PVC创建一个对应的PV。

:这定义了PVC的访问模式。

:这定义了PVC的资源需求。

总结来说,这个PersistentVolumeClaim定义了一个名为mypvc-nfs的存储卷请求,它请求3GiB的存储空间,通过名为pvc-nfs的StorageClass来动态提供NFS存储,且该存储卷以ReadWriteOnce模式被访问。这使得Kubernetes能够在集群中自动查找或创建满足这些条件的NFS存储资源,并将其分配给请求它的Pod。

创建出来:

如何交给pod去使用:

在Kubernetes中,Pod是最小的可部署的计算单元,它封装了一个或多个容器(如Docker容器),存储资源,以及运行这些容器所需的选项;

  • kind: Pod

:这指定了资源类型为Pod,即这是一个Pod定义。

  • apiVersion: v1

:这表示该资源定义遵循Kubernetes API的v1版本。

  • metadata

:这是关于Pod的元数据部分。

:这是Pod的规格说明部分,定义了Pod的具体配置。

总结来说,这个Pod定义了一个名为hostpath-pv-pod的Pod,它运行了一个Nginx 1.7.9版本的容器。该容器将监听80端口,并提供HTTP服务。此外,Pod还定义了一个名为task-pv-storage的卷,该卷通过mypvc-hostpath PVC来提供持久化存储,并被挂载到容器的/usr/share/nginx/html目录下。这意味着Nginx将从这个目录中提供网页内容,而这些内容存储在由PVC管理的持久化存储中。

pv:

pv的名字

存储类名字--》和pvc关联

pvc

pvc的名字

存储类名字--》和pv关联

pod

pod的名字

pod要调用pvc--》pvc的名字

然后查看pod的详细信息,查看到被调度到了node1上,即:102;

创建文件进行测试:

登录到对应的pod中进行查看:

如果删除pod会对数据有影响吗???

文件还在!!!

nfs的pvc的pod:

  • kind: Pod

:指定了这个资源是一个Pod。

  • apiVersion: v1

:表明这个Pod定义遵循Kubernetes API的v1版本。

  • metadata

:包含了Pod的元数据。

:定义了Pod的规格说明。

总结来说,这个Pod定义了一个名为pvc-nfs的Pod,它运行了一个Nginx 1.7.9版本的容器。这个容器将监听80端口,并提供HTTP服务。Pod还定义了一个名为pvc-nfs01的卷,该卷通过mypvc-nfs PVC来提供持久化存储,并被挂载到容器的/usr/share/nginx/html目录下。因此,Nginx将从这个目录中提供网页内容,而这些内容存储在由PVC管理的NFS持久化存储中。注意,Pod的名称(pvc-nfs)和卷的名称(pvc-nfs01)并不要求与PVC的名称(mypvc-nfs)有直接的关系,它们只是用于在Kubernetes中唯一标识这些资源的。

登录进去:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

acw(树的重心)

给定一颗树,树中包含 n𝑛 个结点(编号 1∼n1∼𝑛)和 n−1𝑛−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树…

基于SSM的“在线汽车交易系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线汽车交易系统”的设计与实现(源码数据库文档开题报告) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体设计图 首页 新闻信息 用户注册 后台登录界面…

从0学习React(2)

经过上一篇的文章,对index.tsx文件的每行代码进行了一个简单的分析之后,我大概对React有了一个简单的了解。虽然也是一知半解,但是起码在心里已经对React有了一个基本的概念。这篇文章,我就讲一下关于React中index.tsx的大致框架。…

Metahuman sdk官方 AI驱动口型蓝图优化

combo stream ATL stream ( audio to lip sync) 以上时实时驱动口型 非实时驱动口型可以在metahuman blueprint里直接加上talk component,实现聊天/回复功能。 Talk sound可以放自己的声音/ talk chat是回复你输入的message和你聊天/ talk text是念出你输入的me…

828华为云征文|部署个人知识管理系统 SiyuanNote

828华为云征文|部署个人知识管理系统 SiyuanNote 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 SiyuanNote3.1 SiyuanNote 介绍3.2 SiyuanNote 部署3.3 Siyua…

Awcing 799. 最长连续不重复子序列

Awcing 799. 最长连续不重复子序列 解题思路: 让我们找到一个数组中,最长的 不包含重复的数 的连续区间的长度。 最优解是双指针算法: 我们用 c n t [ i ] cnt[i] cnt[i]记录 i i i 这个整数在区间内出现的次数。(因为每个数的大小为 1 0 5 10^5 105, …

报数游戏 - 华为OD统一考试(E卷)

2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 100个人围成一圈,每个人有一个编号,编号从1开始到100。他们从1开始依次报数,报到为M的人自动退出圈圈,然后下一个人接着从1开始…

数据链路层 ——MAC

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线,而链路层负责在网络节点之间的转发,也就是"一跳"的具体传输…

ubuntu18.04 Anconda安装及使用

1、安装Anaconda 1)下载: 下载链接:https://www.anaconda.com/download#downloads 点击图中Free Download,登录并下在 下载对应版本 2)安装 sudo bash Anaconda3-2024.06-1-Linux-x86_64.sh输入后,直接回车安装。 出…

NSSCTF [HNCTF 2022 WEEK2]e@sy_flower

将文件拖入ida 就看到很显眼的花指令 对着jmp指令nop掉 将main函数按p定义 F5查看伪c代码 思路就是输入的flag先互换位置,再与0x30异或。 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {signed int v3; // 存储临时值int i; // 循…

栏目二:Echart绘制动态折线图+柱状图

栏目二:Echart绘制动态折线图+柱状图 配置了一个ECharts图表,该图表集成了数据区域缩放、双Y轴显示及多种图表类型(折线图、柱状图、象形柱图)。图表通过X轴数据展示,支持平滑折线展示比率数据并自动添加百分比标识,柱状图以渐变色展示评论数量,而象形柱图则以矩形形式展…

基于baidu的云函数实现隐藏c2真实地址

参考 云函数利用&Profile混淆 可能是大家都用的腾讯云搞得现在腾讯云下架那个api网关了。。。所以只能找其他的云函数使用 在网上只找到了一片不是腾讯云的云函数,使用的是百度云函数,那么也尝试的使用一下百度云函数。 百度云:函数计…

C++里的随机数

想用C做最基础的猜数字,肯定少不了随机数; srand(unsigned(time(NULL))); rand() //是生成一个随机数 rand()%1001//就是一个从一到一百的随机数 合体: #include <iostream> #include <cstdlib> #include <time.h> int main() { int g 0; while (g < …

Redis缓存双写一致性笔记(上)

Redis缓存双写一致性是指在将数据同时写入缓存&#xff08;如Redis&#xff09;和数据库&#xff08;如MySQL&#xff09;时&#xff0c;确保两者中的数据保持一致性。在分布式系统中&#xff0c;缓存通常用于提高数据读取的速度和减轻数据库的压力。然而&#xff0c;当数据更新…

NetAssist测试TCP和UDP

由于在Windows下经常使用NetAssist.exe这款网络调试工具进行TCP、UDP的服务端、客户端的监听&#xff0c;对于需要编写各种通信协议的TCP服务端、客户端以及UDP通信程序来说是很方便的。下载地址&#xff1a;http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.14.…

Docker容器的使用

前提条件 Linux环境安装好Docker&#xff0c;可参考Rocky Linux9下安装Docker和卸载Docker Docker命令图 帮助命令 帮助命令&#xff0c;查看有哪些命令可以用 [rootlocalhost ~]# docker --help ​ 查看某个命令的帮助&#xff0c;例如&#xff1a;run [rootlocalhost ~]# …

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点&#xff08;同级节点&#xff09; 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

一款辅助渗透测试过程,让渗透测试报告一键生成

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

动态顺序表的增删改查(数据结构)

目录 一、顺序表 二、静态顺序表 三、动态顺序表 3.1、动态顺序表的实现 3.2、动态顺序表的实现 3.3.1、结构体创建 3.3.2、初始化 3.3.3、销毁数据 3.3.4、增容空间 3.3.5、尾插数据 3.3.6、头插数据 3.3.7、删除尾数据 3.3.8、打印数据 3.3.9、删除头数据 3.3…

设备管理系统-TPM(PC+APP/PDA全流程)高保真Axure原型 源文件分享

随着科技的不断发展&#xff0c;企业对于设备管理的需求也日益增强。为了满足企业在设备管理方面的各种需求&#xff0c;站长为大家整理了一套设备管理系统TPM&#xff08;PCAPP/PDA全流程&#xff09;高保真Axure原型&#xff0c;通过这套原型&#xff0c;企业能够实现对设备的…