011.Kubernetes使用共享存储持久化数据
本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下:
1.mysql deployment部署, wordpress deployment部署, wordpress连接mysql时,mysql的 pod ip易变
2.为mysql创建 service,申请固定 service lp
3. wordpress外部可访问,使用 node port类型的 service
4. nodeport类型的 service需要映射端口,不是很优雅
5.使用 ingressl
6.mysq1的pod旦被重新调度,数据就会丢失
7. hostpath将pod数据挂载至本地,然后使用标签选择器将mysq1lpod固定在一个节点上
8.共享存储以持久化数据,即使po挂掉,被重新拉起,也能自动挂载存储
本次实验解决使用共享存储数据持久化的问题实验使用NFS作为共享存储
一 使用NFS共享存储
1.1 安装NFS
再server3和server1上安装nfs
[root@docker-server1 ~]# yum -y install nfs-utils
[root@docker-server3 ~]# yum -y install nfs-utils
[root@docker-server3 ~]# vi /etc/exports
/data *(rw,no_root_squash)
[root@docker-server3 ~]# systemctl restart nfs
[root@docker-server3 ~]# systemctl status nfs

[root@docker-server3 ~]# showmount -e
Export list for docker-server3:
/data *
1.2 到server1上进行挂载测试
[root@docker-server1 ~]# mount -t nfs 192.168.132.133:/data /mnt
[root@docker-server1 ~]# df -hT
192.168.132.133:/data nfs4 47G 7.3G 40G 16% /mnt
[root@docker-server1 ~]# umount /mnt/
nfs配置成功
1.3 数据库使用共享存储挂载卷
[root@docker-server3 ~]# mkdir /data/mysql
[root@docker-server1 deployment]# vi mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
volumes:
- name: mydata
nfs:
server: 192.168.132.133
path: /data/mysql
containers:
- name: mysql
image: mysql:5.7
volumeMounts:
- name: mydata
mountPath: /var/lib/mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: RedHat123
- name: MYSQL_DATABASE
value: wordpress
[root@docker-server1 deployment]# kubectl get pods -o wide
mysql-857589b5d4-j65d2 1/1 Running 0 20s 10.244.2.20 192.168.132.133 <none>
[root@docker-server3 ~]# ll /data/mysql
-rw-r----- 1 polkitd ssh_keys 56 Jan 17 22:29 auto.cnf
-rw------- 1 polkitd ssh_keys 1676 Jan 17 22:29 ca-key.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 17 22:29 ca.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 17 22:29 client-cert.pem
-rw------- 1 polkitd ssh_keys 1680 Jan 17 22:29 client-key.pem
-rw-r----- 1 polkitd ssh_keys 1346 Jan 17 22:29 ib_buffer_pool
-rw-r----- 1 polkitd ssh_keys 79691776 Jan 17 22:29 ibdata1
-rw-r----- 1 polkitd ssh_keys 50331648 Jan 17 22:29 ib_logfile0
-rw-r----- 1 polkitd ssh_keys 50331648 Jan 17 22:29 ib_logfile1
-rw-r----- 1 polkitd ssh_keys 12582912 Jan 17 22:30 ibtmp1
drwxr-x--- 2 polkitd ssh_keys 4096 Jan 17 22:29 mysql
drwxr-x--- 2 polkitd ssh_keys 8192 Jan 17 22:29 performance_schema
-rw------- 1 polkitd ssh_keys 1680 Jan 17 22:29 private_key.pem
-rw-r--r-- 1 polkitd ssh_keys 452 Jan 17 22:29 public_key.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 17 22:29 server-cert.pem
-rw------- 1 polkitd ssh_keys 1680 Jan 17 22:29 server-key.pem
drwxr-x--- 2 polkitd ssh_keys 8192 Jan 17 22:29 sys
drwxr-x--- 2 polkitd ssh_keys 20 Jan 17 22:29 wordpress
这样,房mysql的pod是被删除的时候,数据不会丢失
这种方式,可以满足效果,但是当直接对接不同的存储,需要使用不同的对接格式,对于K8S而言,不方便,所以使用PV的格式挂载,即不管使用哪一种存储方式,最终创建一个PV出来,然后K8S直接挂载PV,不用关心底层是哪一种存储
二 持久化卷(PV)
2.1 PV及PVC介绍
PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 提供了方便的持久化卷:PV 提供网络存储资源,而 PVC 请求存储资源。这样,设置持久化的工作流包括配置底层文件系统或者云数据卷、创建持久性数据卷、最后创建 PVC 来将 Pod 跟数据卷关联起来。PV 和 PVC 可以将 pod 和数据卷解耦,pod 不需要知道确切的文件系统或者支持它的持久化引擎。
PersistentVolume(PV)是集群之中的一块网络存储。跟 Node 一样,也是集群的资源。PV 跟 Volume (卷) 类似,不过会有独立于 Pod 的生命周期
1.为了屏蔽 kubernetes对底层存储的差异,有了个申明称之为pv
2. pod在创建时,只需要声明需要一个pV即可,这
3. 创建pv:
- 大小10G
- 独享还是共享
- 从哪种存储申请
4. 创建pvc:
- 大小20G
- 独享还是共享
2.2 创建一个PV
基于NFS创建PV
[root@docker-server1 yamls]# mkdir /yamls/storage
[root@docker-server1 yamls]# cd /yamls/storage
[root@docker-server1 storage]# vim pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteMany
nfs:
server: 192.168.132.133
path: "/data"
[root@docker-server1 storage]# kubectl apply -f pv1.yaml
[root@docker-server1 storage]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1G RWX Retain Available 23s
RECLAIM POLICY回收策略
PV的回收策略(persistentVolumeReclaimPolicy,即PVC释放卷的时候PV该如何操作)也有三种
- Retain,不清理, 保留Volume(需要手动清理)
- Recycle,删除数据,即rm -rf /thevolume/*(只有NFS和HostPath支持)
- Delete,删除存储资源,比如删除AWS EBS卷(只有AWS EBS, GCE PD, Azure Disk和Cinder支持)
2.3 创建一个PVC
[root@docker-server1 storage]# vim pvc1.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
[root@docker-server1 storage]# kubectl apply -f pvc1.yaml
persistentvolumeclaim/pvc1 created
[root@docker-server1 storage]# kubectl get pvc -n kube-system
No resources found in kube-system namespace. #pvc只有在创建的命名空间看到
[root@docker-server1 storage]# kubectl get pv -n kube-system
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1G RWX Retain Available 8m56s
[root@docker-server1 storage]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Pending 2m8s
[root@docker-server1 storage]# kubectl describe pvc pvc1
Name: pvc1
Namespace: default
StorageClass:
Status: Pending
Volume:
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"pvc1","namespace":"default"},"spec":{"accessModes":...
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Mounted By: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal FailedBinding 7s (x15 over 3m22s) persistentvolume-controller no persistent volumes available for this claim and no storage class is set #没有完全满足的pv可以绑定
这是因为pv是1G,PVC申请的是1Gi,修改如下
[root@docker-server1 storage]# vi pvc1.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1G
pvc资源只能删除重建
[root@docker-server1 storage]# kubectl delete pvc pvc1
persistentvolumeclaim "pvc1" deleted
[root@docker-server1 storage]# kubectl apply -f pvc1.yaml
persistentvolumeclaim/pvc1 created
[root@docker-server1 storage]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound pv1 1G RWX 5s
已经绑定
[root@docker-server1 storage]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1G RWX Retain Bound default/pvc1 16m
2.4 mysql使用pvc绑定
[root@docker-server3 ~]# mkdir /data/mysql11
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-rwo.yaml
spec:
capacity:
storage: 10G
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.132.133
path: "/data/mysql11"
[root@docker-server1 storage]# kubectl apply -f pv-rwo.yaml
[root@docker-server1 storage]# vi pvc-rwo.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-rwo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10G
[root@docker-server1 storage]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-rwo Bound pv-rwo.yaml 10G RWO 6s
pvc1 Bound pv1 1G RWX 10m
[root@docker-server1 storage]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-rwo.yaml 10G RWO Retain Bound default/pvc-rwo 101s
pv1 1G RWX Retain Bound default/pvc1 24m
挂载到数据库
[root@docker-server1 storage]# vim /yamls/deployment/mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
# volumes:
# - name: mydata
# nfs:
# server: 192.168.132.133
# path: /data/mysql
volumes:
- name: mydata
persistentVolumeClaim:
claimName: pvc-rwo
containers:
- name: mysql
image: mysql:5.7
volumeMounts:
- name: mydata
mountPath: /var/lib/mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: RedHat123
- name: MYSQL_DATABASE
value: wordpress
[root@docker-server1 storage]# kubectl apply -f /yamls/deployment/mysql-deployment.yaml
[root@docker-server3 ~]# ll /data/mysql11
total 188484
-rw-r----- 1 polkitd ssh_keys 56 Jan 18 00:46 auto.cnf
-rw------- 1 polkitd ssh_keys 1676 Jan 18 00:46 ca-key.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 18 00:46 ca.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 18 00:46 client-cert.pem
-rw------- 1 polkitd ssh_keys 1680 Jan 18 00:46 client-key.pem
-rw-r----- 1 polkitd ssh_keys 1346 Jan 18 00:46 ib_buffer_pool
-rw-r----- 1 polkitd ssh_keys 79691776 Jan 18 00:46 ibdata1
-rw-r----- 1 polkitd ssh_keys 50331648 Jan 18 00:46 ib_logfile0
-rw-r----- 1 polkitd ssh_keys 50331648 Jan 18 00:46 ib_logfile1
-rw-r----- 1 polkitd ssh_keys 12582912 Jan 18 00:46 ibtmp1
drwxr-x--- 2 polkitd ssh_keys 4096 Jan 18 00:46 mysql
drwxr-x--- 2 polkitd ssh_keys 8192 Jan 18 00:46 performance_schema
-rw------- 1 polkitd ssh_keys 1680 Jan 18 00:46 private_key.pem
-rw-r--r-- 1 polkitd ssh_keys 452 Jan 18 00:46 public_key.pem
-rw-r--r-- 1 polkitd ssh_keys 1112 Jan 18 00:46 server-cert.pem
-rw------- 1 polkitd ssh_keys 1680 Jan 18 00:46 server-key.pem
drwxr-x--- 2 polkitd ssh_keys 8192 Jan 18 00:46 sys
drwxr-x--- 2 polkitd ssh_keys 20 Jan 18 00:46 wordpress
已经重建数据,则PV和PVC简单学习到这里
博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

011.Kubernetes使用共享存储持久化数据的更多相关文章
- hadoop2.x NameNode 的共享存储实现
过去几年中 Hadoop 社区涌现过很多的 NameNode 共享存储方案, 比如 shared NAS+NFS.BookKeeper.BackupNode 和 QJM(Quorum Journal ...
- Kubernetes的故事之持久化存储(十)
一.Storage 1.1.Volume 官网网址:https://kubernetes.io/docs/concepts/storage/volumes/ 通过官网说明大致总结下就是这个volume ...
- 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)
课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...
- Kubernetes创建挂载共享存储的容器
原文链接:https://www.58jb.com/html/135.html 在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务 ...
- velero 备份、迁移 kubernetes 应用以及持久化数据卷
velero 是heptio 团队开源的kubernetes 应用以及持久化数据卷备份以及迁移的解决方案,以前的名字为ark 包含以下特性: 备份集群以及恢复 copy 当前集群的资源到其他集群 复制 ...
- Kubernetes安装EFK教程(非存储持久化方式部署)
1.简介 这里所指的EFK是指:ElasticSearch,Fluentd,Kibana ElasticSearch Elasticsearch是一个基于Apache Lucene的开源搜索和数据分析 ...
- k8s入坑之路(15)kubernetes共享存储与StatefulSet有状态
共享存储 docker默认是无状态,当有状态服务时需要用到共享存储 为什么需要共享存储: 1.最常见有状态服务,本地存储有些程序会把文件保存在服务器目录中,如果容器重新启停则会丢失. 2.如果使用vo ...
- SUN平台服务器光纤共享存储互斥失败如何恢复数据?
服务器数据恢复故障描述: 服务器最初的设计思路为将两台SPARC SOLARIS系统通过光纤交换机共享同一存储作为CLUSTER使用,正常情况下A服务器工作,当A服务器发生故障宕机后即可将其关机然后开 ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
随机推荐
- c 结构体内存对齐详解
0x00简介 首先要知道结构体的对齐规制 1.第一个成员在结构体变量偏移量为0的地址处 2.其他成员变量对齐到某个数字的整数倍的地址处 对齐数=编辑器默认的一个对齐数与该成员大小的较小值 vs中默认的 ...
- BUAA_2021_SE_Pair_Work_#3_Review
结对项目第三阶段博客 项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目-第三阶段 我在这个课程的目标是 通过课程学习,完成第一个可以称之为 ...
- 记一次metasploitable2内网渗透之8180端口tomcat
扫描网段存活主机,确定内网metasploitable主机位置 nmap -T4 -sP 192.168.1.0/24 对目标主机进行扫描端口开放和系统信息 nmap -T4 -sV -Pn 192. ...
- Java中注释的形式
单行注释 单行注释 // #双斜杠 快捷键:Ctrl + / 多行注释 多行注释 /* */ #单斜杠星号 星号单斜杠 快捷键:Ctrl + shift + / 文档注释 多行注释 /** */ #单 ...
- CLUSTAL W论文解读
CLUSTAL W: improving the sensitivity of progressive multiple sequence alignment through sequence wei ...
- ansible:playbook详解
Blog:博客园 个人 概述 playbook是由一个或者多个play组成的列表. 主要功能是将预定义的一组主机装扮成事先通过ansible中的task定义好的角色.task实际是调用ansible的 ...
- CPU 空闲时在干嘛?
人在空闲时会发呆会无聊,计算机呢? 假设你正在用计算机浏览网页,当网页加载完成后你开始阅读,此时你没有移动鼠标,没有敲击键盘,也没有网络通信,那么你的计算机此时在干嘛? 有的同学可能会觉得这个问题很简 ...
- 百度API定位根据经度、维度 返回当前详细地址
百度地图API是一套为开发者免费提供的基于 百度地图的应用程序接口,包括JavaScript.iOS.Andriod.静态地图.Web服务等多种版本,提供基本地图.位置搜索.周边搜索等. 1 < ...
- 1.7.1- HTML表格table
存在即是合理的,表格的是一种常用的标签,不是用来布局,常见是用处理 适合用表格table的地方: 创建表格:
- 【beego】beego的路由设置
beego 存在三种方式的路由:固定路由.正则路由.自动路由 基础路由 从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由,应用中的大多数路由都会定义在 routers/rout ...