使用Kubernetes部署MySQL+WordPress

目录

前提条件

部署MySQL和WordPress

编写yaml文件

应用yaml文件

存在问题及解决方案

创建PV(持久化卷)

创建一个PVC(持久化卷声明)

部署添加PVC

查看PV对应的主机存储

删除资源

查看资源

删除deployment和service

查看主机数据

删除PVC和PV

删除主机数据


前提条件

  • 拥有Kubernetes集群环境,可参考:Kubernetes集群搭建
  • 理解Kubernetes部署知识,可参考:使用Kubernetes部署第一个应用 、Deloyment控制器

部署MySQL和WordPress

编写yaml文件

部署mysql和wordpress,需要编写对应的deployment,同时需要暴露应用,需要编写对应的service。为了简便这里把这些deployment和service全部编写在同一个yaml中。

[root@k8s-master01 db8]# vi wordpress-mysql.yaml

内容如下

apiVersion: apps/v1
kind: Deployment
metadata:name: wordpress-mysql8labels:app: wordpress-mysql8
spec:replicas: 1selector:matchLabels:app: wordpress-mysql8template:metadata:labels:app: wordpress-mysql8spec:containers:- name: mysql8image: registry.cn-hangzhou.aliyuncs.com/my-common-images/mysql:8.4.3env:- name: MYSQL_ROOT_PASSWORDvalue: "your_mysql_root_password"- name: MYSQL_DATABASEvalue: "wordpress"- name: MYSQL_USERvalue: "wordpress_user"- name: MYSQL_PASSWORDvalue: "your_wordpress_user_password"ports:- containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:name: wordpress-mysql8-servicelabels:app: wordpress-mysql8
spec:type: ClusterIPports:- port: 3306targetPort: 3306selector:app: wordpress-mysql8
---
apiVersion: apps/v1
kind: Deployment
metadata:name: wordpresslabels:app: wordpress
spec:replicas: 1selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpressimage: registry.cn-hangzhou.aliyuncs.com/my-common-images/wordpress:latestenv:- name: WORDPRESS_DB_HOSTvalue: wordpress-mysql8-service- name: WORDPRESS_DB_USERvalue: "wordpress_user"- name: WORDPRESS_DB_PASSWORDvalue: "your_wordpress_user_password"- name: WORDPRESS_DB_NAMEvalue: "wordpress"ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: wordpress-servicelabels:app: wordpress
spec:type: NodePortports:- port: 80targetPort: 80selector:app: wordpress

注意:记得将 your_mysql_root_passwordyour_wordpress_user_password 替换为安全的自定义密码,并且根据集群的网络和安全策略进行必要的调整,如配置防火墙以允许外部访问 NodePort

应用yaml文件

[root@k8s-master01 db8]# kubectl apply -f wordpress-mysql.yaml 
deployment.apps/wordpress-mysql8 created
service/wordpress-mysql8-service created
deployment.apps/wordpress created
service/wordpress-service created

查看部署,查看服务

[root@k8s-master01 db8]# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
wordpress          1/1     1            1           12s
wordpress-mysql8   1/1     1            1           12s
​
[root@k8s-master01 db8]# kubectl get svc
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes                 ClusterIP   10.0.0.1        <none>        443/TCP        78d
wordpress-mysql8-service   ClusterIP   10.15.203.40    <none>        3306/TCP       4m56s
wordpress-service          NodePort    10.10.170.192   <none>        80:32201/TCP   4m56s
​

看到映射的NodePort 端口为32201,每个人查到的不一样,以查到的端口为准

浏览器访问节点ip:32201

选择合适语言,这里使用English为例,点击Continue

根据提示填写信息,测试环境密码建议修改简单些,便于测试。

根据提示输入登录信息,进入WordPress主页,如下

存在问题及解决方案

存在一个问题,MySQL的数据存储在Pod中,如果过程中Pod被删除重建,MySQL的数据也被删除了,可使用PV和PVC来解决这个问题。

创建PV(持久化卷)

 Kubernetes 集群中创建一个持久化卷,它代表了集群中的一块存储资源,可以是本地磁盘、网络存储等。以下是一个使用本地磁盘路径创建 PV 的示例,假设你想将数据存储在主机的/root/datatest/mysql目录下(可以根据实际情况修改这个路径):

创建PV的yaml文件

[root@k8s-master01 db8]# vi mysql-pv.yaml

内容如下

apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-pv
spec:capacity:storage: 10Gi  # 根据需求设置存储容量,这里设置为10GBaccessModes:- ReadWriteOncehostPath:path: /root/datatest/mysql

创建 PV

[root@k8s-master01 db8]# kubectl apply -f mysql-pv.yaml
persistentvolume/mysql-pv created

创建一个PVC(持久化卷声明)

接下来,创建一个持久化卷声明,它用于向 Kubernetes 集群请求所需的存储资源。PVC 会与合适的 PV 进行绑定,以获取实际的存储。

[root@k8s-master01 db8]# vi mysql-pvc.yaml

内容如下

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 8Gi  # 根据实际需求设置请求的存储容量,这里设置为8GB,应小于等于PV的容量

创建 PVC

[root@k8s-master01 db8]# kubectl apply -f mysql-pvc.yaml
persistentvolumeclaim/mysql-pvc created

部署添加PVC

修改wordpress-mysql.yaml的MySQL Deployment,在spec.template.spec.containers下的mysql8容器部分),添加以下内容:

        volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-pvc

修改后的 完整yaml文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: wordpress-mysql8labels:app: wordpress-mysql8
spec:replicas: 1selector:matchLabels:app: wordpress-mysql8template:metadata:labels:app: wordpress-mysql8spec:containers:- name: mysql8image: registry.cn-hangzhou.aliyuncs.com/my-common-images/mysql:8.4.3env:- name: MYSQL_ROOT_PASSWORDvalue: "your_mysql_root_password"- name: MYSQL_DATABASEvalue: "wordpress"- name: MYSQL_USERvalue: "wordpress_user"- name: MYSQL_PASSWORDvalue: "your_wordpress_user_password"ports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:name: wordpress-mysql8-servicelabels:app: wordpress-mysql8
spec:type: ClusterIPports:- port: 3306targetPort: 3306selector:app: wordpress-mysql8
---
apiVersion: apps/v1
kind: Deployment
metadata:name: wordpresslabels:app: wordpress
spec:replicas: 1selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpressimage: registry.cn-hangzhou.aliyuncs.com/my-common-images/wordpress:latestenv:- name: WORDPRESS_DB_HOSTvalue: wordpress-mysql8-service- name: WORDPRESS_DB_USERvalue: "wordpress_user"- name: WORDPRESS_DB_PASSWORDvalue: "your_wordpress_user_password"- name: WORDPRESS_DB_NAMEvalue: "wordpress"ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: wordpress-servicelabels:app: wordpress
spec:type: NodePortports:- port: 80targetPort: 80selector:app: wordpress

完成上述修改后,再次执行apply命令来更新 MySQL 的部署,使其使用映射到主机的持久化存储。

[root@k8s-master01 db8]# kubectl apply -f wordpress-mysql.yaml
deployment.apps/wordpress-mysql8 configured
service/wordpress-mysql8-service unchanged
deployment.apps/wordpress unchanged
service/wordpress-service unchanged

重新访问浏览器

节点ip:32201

重新根据提示设置WordPress,进入WordPress主页,能正常访问。

查看PV对应的主机存储

查看pod在哪台主机运行

[root@k8s-master01 db8]# kubectl get pod -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
wordpress-6b69d95596-jgbnw          1/1     Running   0          53m     10.244.85.225   k8s-node01   <none>           <none>
wordpress-mysql8-64c987b8cd-vxqtk   1/1     Running   0          6m59s   10.244.85.230   k8s-node01   <none>           <none>
​

看到pod在k8s-node01机器运行,到对应的k8s-node01机器查看pv对应的存储目录

# 在运行pod的机器执行
[root@k8s-node01 ~]# ls /root/datatest/mysql/
'#ib_16384_0.dblwr'   auto.cnf        ca-key.pem        ib_buffer_pool   mysql.ibd               private_key.pem   sys
'#ib_16384_1.dblwr'   binlog.000001   ca.pem            ibdata1          mysql.sock              public_key.pem    undo_001
'#innodb_redo'        binlog.000002   client-cert.pem   ibtmp1           mysql_upgrade_history   server-cert.pem   undo_002
'#innodb_temp'        binlog.index    client-key.pem    mysql            performance_schema      server-key.pem    wordpress
​

查看到相应的MySQL卷挂载到主机的数据。

删除资源

查看资源

[root@k8s-master01 db8]# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
wordpress          1/1     1            1           81m
wordpress-mysql8   1/1     1            1           81m
​
[root@k8s-master01 db8]# kubectl get svc
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes                 ClusterIP   10.0.0.1        <none>        443/TCP        78d
wordpress-mysql8-service   ClusterIP   10.15.203.40    <none>        3306/TCP       82m
wordpress-service          NodePort    10.10.170.192   <none>        80:32201/TCP   82m
​
[root@k8s-master01 db8]# kubectl get pv
NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
mysql-pv          10Gi       RWO            Retain           Bound    default/mysql-pvc                       <unset>                          62m
mysql-pv-volume   20Gi       RWO            Retain           Bound    default/mysql-pv-claim   manual         <unset>                          39d
​
[root@k8s-master01 db8]# kubectl get pvc
NAME             STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
mysql-pv-claim   Bound    mysql-pv-volume   20Gi       RWO            manual         <unset>                 39d
mysql-pvc        Bound    mysql-pv          10Gi       RWO                           <unset>                 57m
​

删除deployment和service

[root@k8s-master01 db8]# kubectl delete deploy wordpress wordpress-mysql8
deployment.apps "wordpress" deleted
deployment.apps "wordpress-mysql8" deleted
​
[root@k8s-master01 db8]# kubectl delete svc wordpress-mysql8-service wordpress-service
service "wordpress-mysql8-service" deleted
service "wordpress-service" deleted

查看主机数据

查看PV对应的主机目录,发现数据还在

[root@k8s-node01 ~]# ls /root/datatest/mysql/
'#ib_16384_0.dblwr'   auto.cnf        ca-key.pem        ib_buffer_pool   mysql.sock              public_key.pem    undo_001
'#ib_16384_1.dblwr'   binlog.000001   ca.pem            ibdata1          mysql_upgrade_history   server-cert.pem   undo_002
'#innodb_redo'        binlog.000002   client-cert.pem   mysql            performance_schema      server-key.pem    wordpress
'#innodb_temp'        binlog.index    client-key.pem    mysql.ibd        private_key.pem         sys
​

删除PVC和PV

[root@k8s-master01 db8]# kubectl delete pvc mysql-pvc
persistentvolumeclaim "mysql-pvc" deleted
​
[root@k8s-master01 db8]# kubectl delete pv mysql-pv
persistentvolume "mysql-pv" deleted
[root@k8s-master01 db8]# kubectl get pvc
No resources found in default namespace.
[root@k8s-master01 db8]# kubectl get pv
No resources found

查看PV对应的主机目录,数据依然存在

[root@k8s-node01 ~]# ls /root/datatest/mysql/
'#ib_16384_0.dblwr'   auto.cnf        ca-key.pem        ib_buffer_pool   mysql.sock              public_key.pem    undo_001
'#ib_16384_1.dblwr'   binlog.000001   ca.pem            ibdata1          mysql_upgrade_history   server-cert.pem   undo_002
'#innodb_redo'        binlog.000002   client-cert.pem   mysql            performance_schema      server-key.pem    wordpress
'#innodb_temp'        binlog.index    client-key.pem    mysql.ibd        private_key.pem         sys

删除PV主要是从 Kubernetes 的资源管理角度进行操作,它不会自动删除主机上对应的目录。这是因为PV只是对存储资源的一种抽象和管理方式,它与主机文件系统是松耦合的。

删除主机数据

如果需要删除数据并且确认这些数据是可以删除数据,则需要手动删除卷挂载的主机数据。

[root@k8s-node01 ~]# rm -rf /root/datatest/mysql

完成!enjoy it!

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

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

相关文章

每日一刷——12.10——学习二叉树解题模式(二)

题目三&#xff1a;填充每个节点的下一个右侧节点指针1 题目描述&#xff1a;116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; 我的理解&#xff1a; 我的感觉是同父亲还好搞一点&#xff0c;感觉是在遍历到每一个节点的时候&#xff0c;就把…

Spring Cloud Alibaba:一站式微服务解决方案

Spring Cloud Alibaba介绍 在当今的软件开发领域&#xff0c;微服务架构因其灵活性、可扩展性和独立性等优势而备受青睐。Spring Cloud Alibaba 作为一款强大的一站式微服务解决方案&#xff0c;为开发者提供了丰富的工具和组件&#xff0c;帮助他们轻松构建和管理复杂的微服务…

服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析

Linux操作系统是世界上流行的操作系统之一&#xff0c;被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统&#xff08;EXT2/EXT3/EXT4/Reiserfs/Xfs&#xff0…

vs打开unity项目 新建文件后无法自动补全

问题 第一次双击c#文件自动打开vs编辑器的时候能自动补全&#xff0c;再一次在unity中新建c#文件后双击打开发现vs不能自动补全了。每次都要重新打开vs编辑器才能自动补全&#xff0c;导致效率很低&#xff0c;后面发现是没有安装扩展&#xff0c;注意扩展和工具的区别。 解决…

网络安全-态势感知

0x00 定义&#xff1a; 态势感知&#xff08;Situation Awareness&#xff0c;SA&#xff09;能够检测出超过20大类的云上安全风险&#xff0c;包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术&#xff0c;态势感…

命令模式的理解和实践

在软件开发中&#xff0c;设计模式是开发者们经过长期实践总结出来的、可复用的解决方案&#xff0c;用于解决常见的设计问题。命令模式&#xff08;Command Pattern&#xff09;是行为型设计模式之一&#xff0c;它通过将一个请求封装成一个对象&#xff0c;从而允许用户用不同…

SpringBoot3整合SpringMVC

一、实现过程: (1).创建程序 (2).引入依赖: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"…

【优选算法篇】剥洋葱式探索:用二分查找精准定位答案(下篇)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

若依集成更好用的easyexcel

背景 若依使用的是apach poi并在此基础上进行封装apach poi的原生的api是很复杂的&#xff0c;若依简化了了此操作apach poi的上传速率和下载速率都是没有优化的&#xff0c;依赖于文件大小的限制在此前提下&#xff0c;如果没法满足客户的需求&#xff08;超大型文件的上传&am…

在Ubuntu上使用docker compose安装N卡GPU的Ollama服务

在现代计算环境中,利用 GPU 进行计算加速变得越来越重要。下面将讲解如何在Ubuntu上使用docker compose安装N卡GPU的Ollama服务。 1、安装 NVIDIA 容器工具 首先,需要确保你的系统已经安装了 NVIDIA 容器工具 nvidia-container-toolkit。这是让 Docker 容器访问 GPU 的关键…

MySQL语句学习第三篇_数据库

MySQL语句学习第三篇_数据库 专栏记录MySQL的学习&#xff0c;感谢大家观看。 本章的专栏&#x1f4da;➡️MySQL语法学习 本博客前一章节指向➡️MySQL语句学习第二篇 本人的博客➡️:如烟花般绚烂却又稍纵即逝的主页 文章目录 MySQL的基础操作&#xff08;改与查&#xff0…

windows将文件推给Android真机/实机

记录一下 因为以前只试过从真机实机中将文件推给windows 但是从windows只简单复制粘贴的话会一直报错。 1.电脑安装adb 2.手机开启开发者模式 usb调试 3.usb连接选择文件传输 4.推送命令adb push 文件路径 /sdcard/download 步骤1和2和3不作赘述&#xff0c;可以搜相关配置教程…

C语言——验证“哥德巴赫猜想”

问题描述&#xff1a; 验证"哥德巴赫猜想" 任何一个大于2的偶数都可以表示为两个质数之和。例如&#xff0c;4可以表示为22&#xff0c;6可以表示为33&#xff0c;8可以表示为35等 //验证"哥德巴赫猜想" //任何一个大于2的偶数都可以表示为两个质数之和…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

分布式搜索引擎之elasticsearch基本使用2

分布式搜索引擎之elasticsearch基本使用2 在分布式搜索引擎之elasticsearch基本使用1中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以j接下来&#xff0c;我们研究下…

[ACTF2020 新生赛]Include

感觉毫无头绪e一下&#xff0c;发现要使用伪协议 伪协议&#xff1a;是PHP自己支持的一种协议与封装协议&#xff0c;简单说就是PHP定义的一种特殊访问资源的方法。 2.什么时候用PHP伪协议? 可能遇到的文件包含函数&#xff1a; 1、include 2、require 3、include_once 4、r…

vue3使用Eachart图表库踩坑记录

前言 大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识。很久很更新了&#xff0c;最近一直在加班&#xff0c;今天记录一个eachar图表报警告说过去不到当前DOM节点的宽高导致页面中的图表宽高不正确的坑。 案例 就是一些基础的图形的使用&#xff0c;一个后…

【系统架构核心服务设计】使用 Redis ZSET 实现排行榜服务

目录 一、排行榜的应用场景 二、排行榜技术的特点 三、使用Redis ZSET实现排行榜 3.1 引入依赖 3.2 配置Redis连接 3.3 创建实体类&#xff08;可选&#xff09; 3.4 编写 Redis 操作服务层 3.5 编写控制器层 3.6 测试 3.6.1 测试 addMovieScore 接口 3.6.2 测试 g…

架构15-服务网格

零、文章目录 架构15-服务网格 1、透明通信的涅槃 &#xff08;1&#xff09;服务网格 概念 服务网格是一种处理程序间通信的基础设施&#xff0c;主要由数据平面和控制平面组成。它通过边车代理和控制程序管理程序间的通信&#xff0c;弥补了容器编排系统对分布式应用细粒…

constexpr、const和 #define 的比较

constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义&#xff1a;constexpr用于定义在编译期可求值的常量表达式。示例&#xff1a;constexpr int x 5;这里&#xff0c;x的值在编译期就确定为5。 const 定义&#xff1a;const表示变量在运行期间不能被修改&…