使用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.xdnf.cn/news/34671.html

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

相关文章

深入解析 Nginx:基础介绍到原理分析及案例实践

引言 Nginx&#xff08;“Engine-X”&#xff09;是一个高性能的 HTTP 和反向代理服务器&#xff0c;广泛应用于 Web 服务、负载均衡、API 网关、反向代理、静态资源服务器等多种场景。由于其高效的性能、低资源消耗和灵活的配置&#xff0c;Nginx 成为众多互联网公司、企业以…

Apache HTTPD多后缀解析漏洞

进入靶场 上来就是一个文件上传的功能 经过尝试&#xff0c;发现只有jpg&#xff0c;png&#xff0c;gif文件能上传上去&#xff0c;而题目又说了&#xff0c;这个是Apache的中间件&#xff0c;Apache文件解析漏洞涉及到一个Apache解析文件的特性&#xff0c;Apache默认一个文…

JavaScript(二)

1.JavaScript 操作符 2.JavaScript 流程控制 3.JavaScript 循环 4.JavaScript 字符串方法 5.JavaScript 数组方法 知识点一 操作符 变量声明 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Ti…

单链表---合并两个链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 struct ListNode {int val;struct ListNode* next; }; w 方法一---不使用哨兵位 我们创建一个新链表用于合并两个升序链表&#xff0c; 将两个链表中最小的结点依次尾插到…

2024-12月akamai_2.0-sensor-data之cookie反爬分析详细教程(上)

目录 一、网址及目标数据二、分析接口反爬点&#xff08;akamai执行过程&#xff09;三、逆向分析参数sensor_data四、扣js算法代码加密详细步骤 一、网址及目标数据 文章原文 1、网站&#xff1a; https://www.dhl.com/cn-zh/home/tracking/tracking-supply-chain.html?sub…

【Docker】如何在Docker中配置防火墙规则?

Docker本身并不直接管理防火墙规则&#xff1b;它依赖于主机系统的防火墙设置。不过&#xff0c;Docker在启动容器时会自动配置一些iptables规则来管理容器网络流量。如果你需要更细粒度地控制进出容器的流量&#xff0c;你需要在主机系统上配置防火墙规则。以下是如何在Linux主…

煤矿 35kV 变电站 3 套巡检机器人 “上岗”,力破供电瓶颈

近日&#xff0c;杭州旗晟智能科技与甘肃某变电站配电室的三套智能巡检机器人线下测试顺利完成&#xff0c;并成功交付使用&#xff0c;这为电力运维工作注入了全新的活力与强大的技术支撑。 一、项目背景 甘肃某变电站总建筑面积1098平方米的变电站集变电、配电、监控等多功能…

[创业之路-170]:《BLM战略规划》- 领导力 - 战略制定 - 洞察力 (战略能力中最最核心的能力) - 市场洞察 -2- 看客户-B2B客户分析

目录 一、看客户概述 一、看客户的核心意义 二、看客户的具体内容 三、看客户的实践方法 四、看客户的重要性 二、2B客户的研究方法&#xff1a;研究客户的决策流程 2.1 客户的战略&#xff1a;财务、市场、运营组织 1、研究客户的决策流程 2、研究客户的战略 3、研究…

langgraph 多智能体 Multi-agent supervisor

1. 工具定义 1.1网络搜索工具 from typing import Annotated import os from langchain_community.tools.tavily_search import TavilySearchResults from langchain_core.tools import tool from langchain_experimental.utilities import PythonREPLos.environ["TAVIL…

前缀和(七) 连续数组中最长的01个数相等序列

525. 连续数组 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组&#xff0c;并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0, 1] (或…

【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 64QAM调制解调系统的设计 2.2 信号解调 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.算法仿真效果 本文是之前写的文章: 《基于FPGA的64QAM基带通信系统,包含testbench,高斯…

BUUCTF:misc刷题记录2(会持续更新的)

乌镇峰会种图 打开之后什么也没有发现 用010找到flag flag{97314e7864a8f62627b26f3f998c37f1} wireshark 解压后是个压缩包&#xff0c;用wirshark打开。 根据题目信息&#xff0c;我们可以在wirshark中去寻找密码 在这里进行过滤http.request.methodPOST 在这里的ffb7567a1…

elasticSearch(一):elasticSearch介绍

一、搜索引擎 搜索引擎的核心目的是帮助用户以最小的成本才海量数据中找到最想要的结果。糟糕的搜索引擎往往会所问非所答&#xff0c;用户查了半天也得不到自己想要的&#xff0c;好的搜索引擎往往第一页就是用户最想要的结果。而目前判断搜索引擎好坏一般是从召回率、精确率…

python解析各城市历史天气数据

1 背景介绍 python解析各城市历史天气数据 2 基本思路 获取原始数据&#xff0c;解析&#xff0c;然后保存到excel表格里面。 以浙江省杭州市西湖区2016年9月到2017年4月的 历史天气数据为例&#xff0c;最终成果如下&#xff1a; 3 核心代码 对于数据比较少时&#xff…

【并集查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…

组件中的生命周期

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍Widget的生命周期.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 本章回中介绍的生命周期是指Widget从创建到结果的整个过程,这里提到的Widget是一个泛…

DAY35|动态规划Part03|LeetCode:01背包问题 二维、01背包问题 一维、416. 分割等和子集

目录 01背包理论基础&#xff08;一&#xff09; 基本思路 C代码 01背包理论基础&#xff08;二&#xff09; 基本思路 C代码 LeetCode:416. 分割等和子集 基本思路 C代码 01背包理论基础&#xff08;一&#xff09; 题目链接&#xff1a;卡码网46. 携带研究材料 文字…

Shopee大卖选品策略揭秘:印尼市场选品与成本分析案例

东南亚电商市场愈发成熟&#xff0c;越来越多做跨境的卖家转向本土。但对于“本土化选品运营”这个问题还相当疑惑&#xff01;看别人本土店销量飞起&#xff0c;自己却还在就纠结做啥能挣钱&#xff1f; 别急&#xff0c;今天EasyBoss根据之前合作的Shopee大卖分享的经验&…

鸿蒙特色实战2

服务卡片开发 创建服务卡片 创建一个新的工程后&#xff0c;可以通过如下方法进行创建服务卡片&#xff1a; 创建服务卡片包括如下两种方式&#xff1a; 选择模块&#xff08;如entry模块&#xff09;下的任意文件&#xff0c;单击菜单栏File > New > Service Widget创…

php基础:文件处理2

1.文件属性 当我们在程序中操作文件时&#xff0c;可能会使用到文件的一些常见属性&#xff0c;比如文件的大小、类型、修改时间、访问时间以及权限等等。PHP 中提供了非常全面的用来获取这些属性的内置函数&#xff0c;如下表所示。 2.目录操作 新建目录&#xff1a;mkdir(路…