使用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-mysql8
  labels:
    app: wordpress-mysql8
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress-mysql8
  template:
    metadata:
      labels:
        app: wordpress-mysql8
    spec:
      containers:
      - name: mysql8
        image: registry.cn-hangzhou.aliyuncs.com/my-common-images/mysql:8.4.3
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "your_mysql_root_password"
        - name: MYSQL_DATABASE
          value: "wordpress"
        - name: MYSQL_USER
          value: "wordpress_user"
        - name: MYSQL_PASSWORD
          value: "your_wordpress_user_password"
        ports:
        - containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql8-service
  labels:
    app: wordpress-mysql8
spec:
  type: ClusterIP
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: wordpress-mysql8
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: registry.cn-hangzhou.aliyuncs.com/my-common-images/wordpress:latest
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql8-service
        - name: WORDPRESS_DB_USER
          value: "wordpress_user"
        - name: WORDPRESS_DB_PASSWORD
          value: "your_wordpress_user_password"
        - name: WORDPRESS_DB_NAME
          value: "wordpress"
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-service
  labels:
    app: wordpress
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    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 443/TCP 78d
wordpress-mysql8-service ClusterIP 10.15.203.40 3306/TCP 4m56s
wordpress-service NodePort 10.10.170.192 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  # 根据需求设置存储容量,这里设置为10GB
  accessModes:
    - ReadWriteOnce
  hostPath:
    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:
    - ReadWriteOnce
  resources:
    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-data
   mountPath: /var/lib/mysql
volumes:
- name: mysql-data
 persistentVolumeClaim:
  claimName: mysql-pvc

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql8
  labels:
    app: wordpress-mysql8
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress-mysql8
  template:
    metadata:
      labels:
        app: wordpress-mysql8
    spec:
      containers:
      - name: mysql8
        image: registry.cn-hangzhou.aliyuncs.com/my-common-images/mysql:8.4.3
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "your_mysql_root_password"
        - name: MYSQL_DATABASE
          value: "wordpress"
        - name: MYSQL_USER
          value: "wordpress_user"
        - name: MYSQL_PASSWORD
          value: "your_wordpress_user_password"
        ports:
        - containerPort: 3306
        volumeMounts:
          - name: mysql-data
            mountPath: /var/lib/mysql
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql8-service
  labels:
    app: wordpress-mysql8
spec:
  type: ClusterIP
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: wordpress-mysql8
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: registry.cn-hangzhou.aliyuncs.com/my-common-images/wordpress:latest
        env:
        - name: WORDPRESS_DB_HOST
          value: wordpress-mysql8-service
        - name: WORDPRESS_DB_USER
          value: "wordpress_user"
        - name: WORDPRESS_DB_PASSWORD
          value: "your_wordpress_user_password"
        - name: WORDPRESS_DB_NAME
          value: "wordpress"
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-service
  labels:
    app: wordpress
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
  selector:
    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
wordpress-mysql8-64c987b8cd-vxqtk 1/1 Running 0 6m59s 10.244.85.230 k8s-node01

看到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 443/TCP 78d
wordpress-mysql8-service ClusterIP 10.15.203.40 3306/TCP 82m
wordpress-service NodePort 10.10.170.192 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 62m
mysql-pv-volume 20Gi RWO Retain Bound default/mysql-pv-claim manual 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 39d
mysql-pvc Bound mysql-pv 10Gi RWO 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!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python笔记(6)-文件及IO操作

文件的基本操作 python操作文件的步骤: 1、打开文件: 变量名open(filename,mode,encoding) 2、操作文件: 变量名.read() 变量名.writer(s) 3、关闭文件: 变量名.close() def my_write():#1、(创建)…

windows系统下使用cd命令切换到D盘的方法

windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端,使用 cd d:命令,无法将当前目录切换到D盘 解决方法 方法一:使用下面这条命令 cd /d d:运…

iOS 苹果开发者账号: 查看和添加设备UUID 及设备数量

参考链接:苹果开发者账号下添加新设备UUID - 简书 如果要添加新设备到 Profiles 证书里: 1.登录开发者中心 Sign In - Apple 2.找到证书设置: Certificate,Identifiers&Profiles > Profiles > 选择对应证书 edit &g…

香橙派5Plus启动报错bug: spinlock bad magic on cpu#6, systemd-udevd/443

一、问题 如图: 接上调试串口,每次启动都会报错。不过使用过程中没有发现有什么影响。 百度查阅,有一位博主提到,但是没有细说解决方案: spinlock变量没有初始化_spinlock bad magic on-CSDN博客https://blog.csdn.n…

小程序配置文件 —— 13 全局配置 - window配置

全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段,window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色; 状态栏:顶部位置,有网络信号、时间信息、电池信息等;导航条:有一个当…

UI页面布局分析(4)- 贵族 特权分页列表

引言 在现在移动应用中,展示用户特权的UI设计不仅是吸引用户的关键手段,更是提升产品体验的重要部分。特别是在直播场景中,贵族特权作为一种高价值用户身份的象征,通常需要通过精致的页面和流程的交互来突出其重要性和独特性。 …

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化? Docker是一个开源容器化工具,用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中,为了将Spring B…

【208】车辆管理系统

--基于SSM车辆管理系统 主要功能: 个人中心 员工管理 用户管理 基础数据管理 车辆管理 保养登记管理 事故登记管理 维修登记管理 违章登记管理 开发技术栈: 开发语言 : Java 开发软件 : Eclipse/MyEclipse/IDEA JDK版本 : JDK8 开发框架 : SSM 服务器 : Tomcat8/…

Linux系统编程——线程

目录 一、前言 二、线程 1、线程的理解 三、线程相关的接口 1、线程的创建 2、线程的等待 3、实验 四、总结 1、线程优点 2、线程缺点 3、线程异常 4、Linux下的进程与线程对比 一、前言 之前的文章中我们已经对进程相关的概念做了认识,从创建进程、子进…

从百度云网盘下载数据到矩池云网盘或者服务器内

本教程教大家如何快速将百度云网盘数据集或者模型代码文件下载到矩池云网盘或者服务器硬盘上。 本教程使用到了一个开源工具 BaiduPCS-Go,官方地址 : https://github.com/qjfoidnh/BaiduPCS-Go 这个工具可以实现“仿 Linux shell 文件处理命令的百度网…

手机租赁平台开发全攻略打造高效便捷的租赁服务系统

内容概要 手机租赁平台开发,简单说就是让用户能轻松租赁各类手机的高效系统。这一平台不仅帮助那些想要临时使用高端手机的人们节省了不少资金,还为商家开辟了新的收入渠道。随着智能手机的普及,很多人并不需要长期拥有一部手机,…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

flask后端开发(11):User模型创建+注册页面模板渲染

目录 一、数据库创建和配置信息1.新建数据库2.数据库配置信息3.User表4.ORM迁移 二、注册页面模板渲染1.导入静态文件2.蓝图注册路由 一、数据库创建和配置信息 1.新建数据库 终端中 CREATE DATABASE zhiliaooa DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2…

OpenAI 12天发布会:AI革命的里程碑@附35页PDF文件下载

在人工智能的浪潮中,OpenAI的12天发布会无疑是2024年科技界的一场盛宴。从12月5日开始,OpenAI连续12天每天发布一个新应用或功能,标志着AI技术的又一次飞跃。本文将梳理这些激动人心的发布,带你一探究竟。 OpenAI发布会概览 Ope…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…

(南京观海微电子)——GH7009开机黑屏案例分析

一、 现象描述&#xff1a; 不良现象: LVDS模组&#xff0c;开机大概2秒后就黑屏。 二、问题分析 等主机进入Kernel 后做以下测试&#xff1a; 1、手动reset LCM 后 可以显示正常&#xff1b; 总结&#xff1a; 1&#xff09;uboot 部分HS 太窄&#xff0c;仅有4个clk宽度&am…

科技云报到:人工智能时代“三大件”:生成式AI、数据、云服务

科技云报到原创。 就像自行车、手表和缝纫机是工业时代的“三大件”。生成式AI、数据、云服务正在成为智能时代的“新三大件”。加之全球人工智能新基建加速建设&#xff0c;成为了人类社会数字化迁徙的助推剂&#xff0c;让新三大件之间的耦合越来越紧密。从物理世界到数字世…

攻破 kioprix level 4 靶机

又又又来了... 法一、 基本步骤 1.确认主机ip&#xff0c;扫描端口确定服务和版本 2.访问网站&#xff0c;扫描目录&#xff0c;查找敏感信息 3.利用敏感信息和SQL注入进入网站 4.ssh服务连接主机 5.shell逃逸并查找敏感信息&#xff08;与数据库等相关&#xff09; 6.m…

20241130 RocketMQ本机安装与SpringBoot整合

目录 一、RocketMQ简介 ???1.1、核心概念 ???1.2、应用场景 ???1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收? ? ? ? ? 4.1、添加maven依赖 ???4.2、yaml配置 ???4.3、…

python报错ModuleNotFoundError: No module named ‘visdom‘

在用虚拟环境跑深度学习代码时&#xff0c;新建的环境一般会缺少一些库&#xff0c;而一般解决的方法就是直接conda install&#xff0c;但是我在conda install visdom之后&#xff0c;安装是没有任何报错的&#xff0c;conda list里面也有visdom的信息&#xff0c;但是再运行代…