Kubernetes(K8S)使用PV和PVC做存储安装mysql

Kubernetes使用PV和PVC做存储安装mysql

  • 环境准备
  • 什么是PV和PVC
  • 环境准备
  • 配置nfs
    • 安装nfs
    • 配置nfs服务端
  • 创建命名空间
  • 配置pv和pvc
    • pv的yaml文件
    • pvc的yaml文件
  • 部署mysql
    • 创建mysql的root密码的secret
    • 创建mysql部署的yaml
    • 部署mysql
    • 链接mysql
      • 外部链接
      • 内部链接

环境准备

首先你需要一个k8s环境,可以参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122

什么是PV和PVC

我们可以简单看一下官网的描述:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/#introduction

持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。 此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。

持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见访问模式)。

本篇文章就用上面提到的nfs来搭建pv和pvc并部署mysql

环境准备

首先我们需要搭建一个k8s集群,并且准备一台nfs服务器,为了方便我就使用k8s的主节点作为nfs服务器,服务器列表如下表:

IP地址服务器用途
192.168.1.160k8s-master,k8s的主节点和nfs服务器
192.168.1.161k8s-node01,k8s的第一个工作节点
192.168.1.162k8s-node02,k8s的第二个工作节点

配置nfs

安装nfs

首先我们需要在三台服务器单中都需要安装nfs软件包,使用如下命令进行安装:

yum install -y nfs-utils

如图三台服务器都需要安装:
在这里插入图片描述

配置nfs服务端

然后我们需要在nfs的主服务器暴露一个 /data/nfs/mysql 目录,我们需要修改 /etc/exports 配置文件,需要将这一行加在里面:

/data/nfs/mysql *(rw,sync,no_root_squash)

可以直接执行这行命令,第一行为创建这个目录,第二行为修改文件

mkdir -p /data/nfs/mysql
cat >> /etc/exports << EOF
/data/nfs/mysql *(rw,sync,no_root_squash)
EOF

然后我们需要启动nfs服务,只需要在nfs服务器上执行:

systemctl enable --now nfs-server

然后我们执行这行命令,看目录是否暴露:

showmount -e nfs服务器地址

可以看到目录暴露成功:
在这里插入图片描述

创建命名空间

我们需要创建一个命名空间,当然也可以越过这一步,这里创建命名空间的目的只是为了更接近生产环境,创建命名空间的yaml文件:

apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}

上面的yaml文件创建了一个名为 deploy-test 的命名空间,可以查看创建结果:
在这里插入图片描述

配置pv和pvc

pv的yaml文件

注意按照提示修改内容:

apiVersion: v1
kind: PersistentVolume
metadata:name: deploy-mysql-nfs-pv # pv的名字namespace: deploy-test # 这里为命名空间的名字
spec:capacity:storage: 1Gi # 申请的硬盘大小为1GB,可修改accessModes:- ReadWriteMany # 权限为多节点读写nfs:# 注意修改nfs服务器地址server: 192.168.1.160# 注意修改目录的地址path: /data/nfs/mysqlstorageClassName: "nfs" # 存储类型选择nfs

pvc的yaml文件

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: deploy-mysql-nfs-pvc # 为pvc取一个好听的名字namespace: deploy-test # 命名空间名字
spec:accessModes:- ReadWriteMany # 权限为多节点读写storageClassName: "nfs" # 存储类型为nfsresources:requests:storage: 1Gi # 申请大小容量为1GBvolumeName: deploy-mysql-nfs-pv # 绑定的pv名字

执行后我们可以查看创建的状态:
在这里插入图片描述

部署mysql

创建mysql的root密码的secret

前面准备工作都做好了,接下来我们就可以开始部署mysql了,但是之前我们还需要创建一个secret,执行命令获取yaml文件内容:

# 命令说明
kubectl create secret generic mysql-password --from-literal=mysql_root_password=mysql的root密码 -n 命名空间 --dry-run=client -o=yaml# 命令示例
kubectl create secret generic mysql-password --from-literal=mysql_root_password=root -n deploy-test --dry-run=client -o=yaml

生成如图所示:
在这里插入图片描述

创建mysql部署的yaml

apiVersion: v1
kind: Service
metadata:name: deploy-mysql-svc # mysql暴露服务的名字namespace: deploy-test # 命名空间labels:app: mysql
spec:ports:- port: 3306 # 暴露给外部3306端口name: mysqltargetPort: 3306 # 内部目标3306端口nodePort: 30306 # 外部访问集群nodeport的30306端口selector:app: mysqltype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet # 创建一个StatefulSet有状态的控制器
metadata:name: deploy-mysql # 部署的名字namespace: deploy-test # 命名空间
spec:selector:matchLabels:app: mysqlserviceName: "deploy-mysql-svc" # 注意指定上面的那个服务名称replicas: 1template:metadata:labels:app: mysqlspec:terminationGracePeriodSeconds: 10containers:- args: # 新增一些启动参数- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:5.7.43image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:5.7.43 # 因为dockerhub上镜像经常拉取失败,所以使用此镜像ports:- containerPort: 3306 # 容器内部暴露3306端口name: mysqlvolumeMounts:- name: mysql-data # 引用pvc挂载的名字mountPath: /var/lib/mysql # 这个是容器内部存放数据的文件夹目录,需要挂在到pvc当中env:- name: MYSQL_ROOT_PASSWORDvalueFrom: # mysql的密码引用上面创建的secretsecretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-data # pvc的挂载名称persistentVolumeClaim:claimName: deploy-mysql-nfs-pvc # 指定使用那个pvc

部署mysql

整体的yaml文件内容为:

apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}---apiVersion: v1
kind: PersistentVolume
metadata:name: deploy-mysql-nfs-pvnamespace: deploy-test
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:server: 192.168.1.160path: /data/nfs/mysqlstorageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: deploy-mysql-nfs-pvcnamespace: deploy-test
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: deploy-mysql-nfs-pv---apiVersion: v1
data:mysql_root_password: cm9vdA==
kind: Secret
metadata:name: mysql-passwordnamespace: deploy-test---apiVersion: v1
kind: Service
metadata:name: deploy-mysql-svcnamespace: deploy-testlabels:app: mysql
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 30306selector:app: mysqltype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-mysqlnamespace: deploy-test
spec:selector:matchLabels:app: mysqlserviceName: "deploy-mysql-svc"replicas: 1template:metadata:labels:app: mysqlspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysql# image: docker.io/library/mysql:5.7.43image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/mysql:5.7.43ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: deploy-mysql-nfs-pvc

执行以下命令部署:

kubectl apply -f deploy-mysql.yaml

创建结果:
在这里插入图片描述

执行下面这行命令监控部署:

watch kubectl get all -o wide -n deploy-test

看到下面这个代表创建成功:
在这里插入图片描述

当我们查看nfs当中挂在出来的mysql目录的时候:

ll /data/nfs/mysql/

文件夹内容:
在这里插入图片描述

链接mysql

外部链接

在我们创建mysql的时候我们就规定了一个NodePort端口,如图:
在这里插入图片描述

我们直接使用集群当中任意一个节点的30306端口即可链接这个数据库:

mysql -uroot -h192.168.1.160 -p -P30306

查看结果:
在这里插入图片描述

内部链接

在集群里面访问我们可以通过主机名,主机名格式如下:

<pod名称>.<service名称>.<命名空间名称>.svc.cluster.local

执行命令查看:

kubectl get all -o wide -n deploy-test

各类名称如图所示:
在这里插入图片描述

所以我们此次访问mysql的主机名如下:

deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local

我们此次就不建立其他的pod来验证是否能够安装上了,我们直接检查集群内的dns解析是否正常就知道这个域名是否正常了,使用以下命令查看k8s集群当中的dns服务的地址:

kubectl get svc -o wide -n kube-system | grep dns

查看dns服务地址:
在这里插入图片描述

直接通过 nslookup 尝试解析查看是否解析到正确的IP地址上:

# 安装nslookup命令所在的软件包
yum install -y bind-utils
# 解析域名
nslookup deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local 10.96.0.10

发现域名解析是正常的:
在这里插入图片描述

好了,k8s上部署mysql完成了,下课

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 基础入门

Git基础入门 Git是一个分布式 版本管理系统&#xff0c;用于跟踪文件的变化和协同开发。 版本管理&#xff1a;理解成档案馆&#xff0c;记录开发阶段各个版本 分布式&集中式 分布式每个人都有一个档案馆&#xff0c;集中式只有一个档案馆。分布式每人可以管理自己的档案…

HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能

HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱&#xff0c;集合编辑 PDF 的简单功能&#xff0c;可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作&#xff0c;而且工具集成隐私保护功能&#xff0c;文件只在浏览器本地完成&…

SQLI-labs-第一关

知识点&#xff1a;单引号字符型注入 思路&#xff1a; 1、根据提示&#xff0c;为get注入&#xff0c;在url中输入内容 2、判断注入点 输入?id1&#xff0c;显示数据库语句错误&#xff0c;说明这里存在sql注入漏洞 输入?id1‘ and 11 -- &#xff0c;回显正常&#xff0c…

webpack5(一)

什么是webpack webpack是一个静态资源打包工具&#xff0c;它会以一个或者多个文件作为打包的入口&#xff0c;将整个项目的所有文件编译组合成一个或多个文件输出出去。输出的文件就是编译好的文件&#xff0c;可以在浏览器端运行。一般将 webpack 输出的文件称为 bandle 。 …

Linux操作系统--网络配置(2)

在上一次课程中,我们对Linux课程中的网络有了一个了解,下面我们来看看如何配置网络IP。 1.配置网络IP地址 在Linux操作系统中,比如搭建集群,这一个时候如果使用DHCP实现动态IP的分配,那么如果需要访问管理其中一个节点操作时候,就需要通过其IP访问。这一个时候还得去查看…

RabbitMQ死信队列

RabbitMQ死信队列 1、过期时间TTL 过期时间TTL表示可以对消息设置预期的时间&#xff0c;在这个时间内都可以被消费者接收获取&#xff1b;过了之后消息将自动被 删除。RabbitMQ可以对消息和队列设置TTL&#xff0c;目前有两种方法可以设置&#xff1a; 第一种方法是通过队列…

广汽埃安,新能源扛把子?继比亚迪、理想之后实现正“盈利”

根据广汽集团日前披露的2023年半年度报告&#xff0c;广汽埃安在今年的六七月份连续两个月实现盈利&#xff0c;成为继比亚迪、理想之后&#xff0c;第三家实现盈利的国产新能源汽车品牌。这一成绩进一步表明广汽埃安在国内新能源汽车市场的竞争力以及其持续增长的势头。报告显…

PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 教学资源管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88260480 论文 https://downl…

Matlab图像处理-减法运算

减法运算 图像减法也称为差分方法&#xff0c;是一种常用于检测图像变化及运动物体的图像处理方法。常用来检测一系列相同场景图像的差异&#xff0c;其主要的应用在于检测同一场景下两幅图像之间的变化或是混合图像的分离。 差影法 将同一景物在不同时问拍摄的图像或同一景…

MATLAB软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 MATLAB是Matrix Laboratory的缩写&#xff0c;是一款由美国MathWorks公司开发的商业数学软件。它主要用于进行数值计算、数据分析、可视化、算法开发、模拟仿真等多个领域。MATLAB具有高度的灵活性和开放性&#xff0c;可以为用…

Flink流批一体计算(18):PyFlink DataStream API之计算和Sink

目录 1. 在上节数据流上执行转换操作&#xff0c;或者使用 sink 将数据写入外部系统。 2. File Sink File Sink Format Types Row-encoded Formats Bulk-encoded Formats 桶分配 滚动策略 3. 如何输出结果 Print 集合数据到客户端&#xff0c;execute_and_collect…

水库大坝安全监测的主要内容包括哪些?

在水库大坝的实时监测中&#xff0c;主要任务是通过无线传感网络监测各个监测点的水位、水压、渗流、流量、扬压力等数据&#xff0c;并在计算机上用数据模式或图形模式进行实时反映&#xff0c;以掌握整个水库大坝的各项变化情况。大坝安全监测系统能实现全天候远程自动监测&a…

ruoyi-vue-plus 配置邮箱

ruoyi-vue-plus 配置邮箱 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助请…

当我焦虑时,我从CSDN的博主身上学到了什么?

文章目录 前言一、思考为什么会产生差距1.1 懒惰1.2 没有合理的规划学习时间 二、我该如何做&#xff1f;2.1 认真生活规律作息2.2 做事就是0和1 结语 前言 我们在学习的过程当中总会遇到一些比我们自己优秀的人&#xff0c;不论你是在更好的985或211院校学习&#xff0c;还是…

Netty-01-快速掌握Java NIO

文章目录 一、从传统I/O到Java NIO二、NIO 三大组件1. Channel&#xff08;通道&#xff09;1.1. FileChannel1.1.1. 获取 FileChannel1.1.2. FileChannel 读取 文件1.1.3. FileChannel写⽂件1.1.4. 通道之前传输数据-transferFrom1.1.5. 通道之前传输数据-transferTo 1.2. Soc…

学习Linux基础知识与命令行操作

开始学习Linux系统前&#xff0c;首先要掌握计算机基础知识&#xff0c;了解硬件、操作系统、文件系统、网络和安全等概念。对这些基础知识的了解能够帮助理解Linux系统的概念和功能。 在Linux系统中&#xff0c;文件和目录是数据管理的基本单位。每个文件和目录都有一个称为&…

Unity实现倒计时和获取系统时间

一:创建UGUI 1.创建Canvas画布组件,调节Canvas画布的分辨率等其他设置。我们可以把视图设置为2D模式下。 2.创建Text文本组件,取名为Timer计时器,我们调整Text文本组件的大小,用锚点设置Text文本组件的位置,并且设置好Text文本组件的颜色。 3.我们再创建一个Text文…

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符?

Matlab怎么引入外部的latex包&#xff1f;Matlab怎么使用特殊字符&#xff1f; Matlab怎么使用特殊字符&#xff1f;一种是使用latex方式&#xff0c;Matlab支持基本的Latex字符【这里】&#xff0c;但一些字符需要依赖外部的包&#xff0c;例如“&#x1d53c;”&#xff0c;需…

android2022配置opencv4android480

1&#xff0c;安装android studio2022。 2&#xff0c;下载OPENCV4ANDROID&#xff0c;解压到任意盘中。 3&#xff0c;File->New->New Project&#xff0c;选择Empty Views Activity。再选择语言&#xff0c;本文选择JAVA。 4&#xff0c;File->New->Import Modu…

Kotlin数据结构

数据结构基础 什么是数据结构 在计算机科学中&#xff0c;数据结构&#xff08;Data Structure&#xff09;是计算机中存储、组织数据的方式。数据结构是各种编程语言的基础。 一些使用场景 不同的数据结构适用于不同的应用场景。比如HashMap与ConcurrentHashMap&#xff0…