Nfs 存储、ConfigMap 使用及 DaemonSet | 学习笔记

简介: 快速学习 Nfs 存储、ConfigMap 使用及 DaemonSet

开发者学堂课程【Kubernetes 入门实战演练2020版Nfs 存储、ConfigMap 使用及 DaemonSet学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/656/detail/10867


Nfs 存储、ConfigMap 使用及 DaemonSet


内容介绍

一、Nfs

二、ConfigMap

三、Statefulset

一、NfS

(1)NFS 挂载

NFS 是 pod 在多个节点迁移,数据随着pod 的迁移而迁移。

NFS 要挂载 pod 的话,这需要提前准备NFS。

NAS 也是通过 NFS 协议的方式去挂载的。

虽然说这个NAS 是个硬件,但这个硬件有个系统,这个系统允许通过 NFS 的方式把NAS上的某些卷,挂到系统上去用。

首先需要有一个装载的服务器,然后把每个数据目录共享出去,允许哪个网络访问,把 NFS 的权限加上。加上之后再重启下,把 NFS 开启。再把 NFS 设为开机启动。

启动之后,这个挂开起来我们是在容器里挂的,但实际上这个存储会先被挂到的副主机,通过副主机再挂到我们的容器,所以可以到副主机去看一下。

在众多节点中,nod 服务器是比较高的。那就装在 HA 上, HA 的资源利用率是相对比较低的。所以我在这使用apt install 的方式,把 nfn-server 提前准备好,这就相当于提前有一个共享服务器。然后编辑一下etc,把数据目录共享出去。

那就写一下,假是date k8s ,并写允许哪个网站访问。

加上之后,把它重启下

重启之后再设为开机启动。

现在需要保证从副主机上可以挂到NFS 。通过在副主机使用 shwount -e,能看到副主机开的存储卷,如果看不到是挂不上去的。然后再重启,重启之后再shwount 是看不到的,这个授权很重要。

(2)NFS共享存储

NFS卷允许将现有的NFS,网络文件系统共享挂载到容器中不像 emptyDir,当删除 Pod时,NFS卷的内容被保留,卷仅仅是被卸载 这意味着 NFS 卷可以预填充数据,并且可以在 pod 之间“切换”数据 NFS 可以被多个写入者同时挂载,原则上是没有上限的,只要网卡能抗住就可以。

使用
在官网中Volume 类型中有介绍,在使用NFS 卷之前,必须运行 NFS 服务器并将目标 share 导出备用,就是共享给 pod 去使用。怎么去配呢,在这里有两个示例。
能挂上之后,通过pod 界面,选择 linux39 ,点击进去看看有没有挂载,再到副主机看看。

挂载副主机的路径就是容器的挂载点。如果有好多个挂载,副主机就会有好多个挂载点,到底能不能用,可以在NFS 服务器上创建些数据。

这样的好处可以在容器里挂载存储随着迁移,不会导致主机和副主机的对应关系发生变化,导致数据丢失。

这里是起了两个pod,看一下两个能不能都被挂载。等起来之后,验证一下是不是都挂载一个相同的数据,在pod 里面的site2 界面去看。

验证结果就是NFS 可以被同一个共享所挂载,在多个 pod 之间可以去共享数据。

如何在一个pod 里面挂多NFS

有时候一个NFS可能不够,我们要在一个 pod 里面挂多个NFS ,如果再挂的话,再定义就行,但是路径不一样。

和以前一样的文件

这个是在k8s里面的,我还是要把它创建下。

这个是官方提供的镜像就在usr share 之后。

下面有个serve ,还是需要先创建目录,把这个目录也共享给 k8s 去用,同时也是需要重启。

在里面会看到多个数据源,不用数据源是不一样的,需要做多个挂载。如果说把数写错了,太顺利的会不遇到问题,当以后遇到问题就解决不了了。

把pod 伸缩一下,把n- pod 改成两个或者三个。可以简单说在外面界面1去改,但这个界面操作改了,以前叫伸缩,现在叫规模。规模的话目前是1个,需要改成2个,改完之后点一下规模。改完之后会有变化,其实是正在重建。正在新建一个 pod ,新建的话需要拉丁项,所以这个地方会有些慢。

完成时候去代码看没有显示全,它其实是有挂载好多个的。到新起的pod去看,也一定会自动挂上。只要在外面网页定义好的话,pod 无论是扩容还是缩容都不会影响。

演示错误的需要把当前页面下的所有目录全部删除,删除之后需要把共享的范围调一下。

假如只允许 pod 去访问,而不允许副主机。然后把它重启,这就意味着我的副主机挂不上,副主机的访问已经被拒绝了。

看一下容器,端口被占用了把它删一下,等创建完,并不能以为这容器能起来。来看一下到底执行了什么操作,很明显是报错了。

Pod 地址范围虽然被授权了,但是副主机没有被授权。副主机没有被授权这个容器就起不来。所以这时候需要在授权之内加上至少授权副主机两个,然后把它重启,重启之后pod会被执行重建。


二、ConfigMap

它是配置信息和镜像的解耦,就是配置信息不用提前换镜像,如果把配置信息换成镜像也不是不行,大部分配置信息还是会放到镜像当中去。

将配置信息放到 configmap 对象中,然后在 pod 的对象中导入 configmap 对象,实现导入配置的操作。

将date创建在外面的文件的话,可能会被停。它的name 定义的是这个名称。后面它想要调用这个名称会通过 confihgmap 找的这个地址。

那怎么去定义,通过date,date里面创建default,里面的名称,后面挂着ngs配置,这个配置就是 server 。

在调用的时候,下面直接进行挂载,把副主机的路径挂到容器的指定地方。

这样的话配置信息就不用达到镜像了。那么,就算是个官方的镜像,我可以通过挂载configmap 配置文件方式把刚才那个,挂载到这个配置文件中,那么就完成了某些配置。

所以,这个时候我一旦创建起来配置,这个容器就会将被创建。它会创建三个资源。

这个配置到底有没有挂上去,可以在网站界面直接看一下,直接进到第一个,然后看一下在etc n-s看一下。

这个信息现在已经被写到了pod 里面去,这里面有个挂载。声明一个 ConfigMap 的对象,作为Volume 挂载到 pod 中。


三、Statefulset

(1)Statefulset

它主要是为了解决有状态服务的问题,它管理的 Pod 拥有固定的 Pod 名称,主机名,启停顺序。它的实现是通过创建一个statefulset 类型的pod,并指定 serviceName ,创建 headless 类型的 svc 。

(2)DaemonSet
PV是由管理员设置的存储,它是集群的一部分。就像节点是集群中的资源一样,PV也是集群中的资源。

PV是Volume 之类的卷插件,但具有独立于使用PV 的 pod 的生命周期。此API 对象包含存储实现的细节。

PVC 是用户存储的请求。它与Pod 相似。Pod 消耗节点资源,PVC 消耗PV资源。

Pod 可以请求特定级别资源CPU和内存。声明可以请求特定的大小和访问模式。

有个比较简单的叫DaemonSet,可以先提一下,它会比较特殊一些。会确保全部或某些节点运行一个 Pod 副本,如果没有什么特殊配置,会在全部节点上运行一个pod ,当有节点加入集群时,也会为它们新增一个Pod 。

当有节点从集群移除时,这些Pod 也会被回收,删除 DaemonSet 将会删除它所有创建的 Pod 。

这个文件当中会用到镜像,镜像可以下载,如果下载不了可以找到本地的服务器去解决,这样比较快。要不然会消耗比较长的时间。

之后什么都不动,它会资源先制。在每个节点都会给你创建相同的服务,它所做的操作就是在pod里面,把副主机的路径挂进去,在pod里面访问来实现路径,具体要分场合,后期就算是个新的nod, K8s也会起个新的服务。

在每个节点运行储存 DaemonSet,例如gluterd、seph。如果说要通过容器创建这样的服务的话,可以通过 DaemonSet 来跑。在每个节点运行日志收集 DaemonSet,例如fluented、logstash 。但是这些配置文件要提前准备好。

比如说要做日志收集,要告诉 logstash 收集哪些路径的哪些数据,这个数据可以增设。

在每个节点运行监控DaemonSet ,例如 Prometheus Node Exporter 、Flowmill、Sysdig代理 等服务,它们这些服务有一个共同的特征,就是在k8s每个节点上,都运行一个。

接着 DaemonSet 简单理解一下,DaemonSet 会在当前 k8s 集群中的所有node 创建相同的Pod ,主要用于在所有node执行所有相同的操作的场景。类似于日志收集,这样的场景。或者通过  Prometheus 监护数据,主要是类似这样的场景。其实还有 flannel 来管理当前的网络通信。

创建DaemonSet

在官网有示例,示例是运行 fluented ,通过它来实现日志收集。直接在官网复制代码,然后运行一下。

这个文件当中会用到一个镜像。这个镜像可以自己下载。里面的资源先置后面会讲道。

它所做得操作无非就是在 Pod 里面,把副主机某些路径挂到 Pod 里面,然后在 Pod 里面访问,来实现数据收集,具体去看场合。

这些概念需要好好操作下,有这样的概念之后,下一次就可以运行服务了。

这些看起来很简单,但每一种存储都需要数据来实现存储,或者说叫数据的持久化,或者数据在多个pod 中的共享,它一定是基于某种方式来实现的。以及这些类型,都需要好好练习。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
398 13
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
Java Scala C++
云计算存储问题之中心NFS服务器如何解决
云计算存储问题之中心NFS服务器如何解决
143 2
|
存储 云计算
云计算存储问题之NFS与其他文件共享协议共同点如何解决
云计算存储问题之NFS与其他文件共享协议共同点如何解决
122 1
|
存储 Unix 应用服务中间件
k8s--数据存储、HostPath、NFS 存储
k8s--数据存储、HostPath、NFS 存储
|
存储 Kubernetes 数据安全/隐私保护
在K8S中,如果后端nfs存储的ip发生变化如何解决?
在K8S中,如果后端nfs存储的ip发生变化如何解决?
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
214 0
|
存储 Kubernetes 应用服务中间件
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
k8s-配置与存储-持久化存储-NFS 挂载、StorageClass 存储类 动态创建NFS-PV案例
1008 0
|
存储 Kubernetes 数据安全/隐私保护
|
存储 Linux 块存储
DRBD+Heratbeat+NFS高可用文件共享存储
DRBD+Heratbeat+NFS高可用文件共享存储