基于k3s部署Nginx、MySQL、PHP和Redis的详细教程

ops/2025/3/22 6:45:15/

先决条件

  • 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS
  • 基础命令行操作能力
  • 确保服务器有至少2GB内存和10GB磁盘空间

1. 安装k3s(极简Kubernetes)

1.1 一键安装
# 用root用户或sudo权限执行以下命令
curl -sfL https://get.k3s.io | sh -

解释

  • k3s 是一个轻量级Kubernetes发行版,专为资源有限的环境设计
  • 这条命令会自动下载并安装k3s,默认使用containerd作为容器运行时
1.2 验证安装
# 检查k3s服务状态
sudo systemctl status k3s# 查看节点(此时应显示一个节点)
sudo kubectl get nodes

可能遇到的问题

  • 如果提示kubectl command not found,尝试退出终端重新登录

2. 部署MySQL数据库

2.1 创建存储卷(保存数据库数据)

创建文件 mysql-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvc
spec:accessModes:- ReadWriteOnce  # 存储卷只能被一个节点挂载resources:requests:storage: 1Gi   # 申请1GB存储空间

应用配置:

sudo kubectl apply -f mysql-pvc.yaml
2.2 设置数据库密码(安全存储)
# 创建一个名为mysql-secret的密钥,密码为yourpassword(自行修改)
sudo kubectl create secret generic mysql-secret --from-literal=password=yourpassword
2.3 部署MySQL

创建文件 mysql-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-deployment
spec:replicas: 1  # 只运行1个副本selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:5.7  # 使用MySQL 5.7镜像ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORD  # 从密钥读取密码valueFrom:secretKeyRef:name: mysql-secretkey: passwordvolumeMounts:- mountPath: /var/lib/mysql  # 挂载存储卷到容器内目录name: mysql-storagevolumes:- name: mysql-storagepersistentVolumeClaim:claimName: mysql-pvc  # 使用之前创建的存储卷
---
apiVersion: v1
kind: Service
metadata:name: mysql-service
spec:selector:app: mysqlports:- protocol: TCPport: 3306     # 服务对外暴露的端口targetPort: 3306  # 容器内部端口type: ClusterIP  # 仅集群内部访问

应用配置:

sudo kubectl apply -f mysql-deployment.yaml

验证MySQL是否运行

sudo kubectl get pods  # 查看状态是否为Running

3. 部署Redis缓存

3.1 创建存储卷(保存Redis数据)

创建文件 redis-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: redis-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi

应用配置:

sudo kubectl apply -f redis-pvc.yaml
3.2 部署Redis

创建文件 redis-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: redis-deployment
spec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:alpine  # 轻量级Redis镜像ports:- containerPort: 6379volumeMounts:- mountPath: /data  # Redis数据存储目录name: redis-storagevolumes:- name: redis-storagepersistentVolumeClaim:claimName: redis-pvc
---
apiVersion: v1
kind: Service
metadata:name: redis-service
spec:selector:app: redisports:- protocol: TCPport: 6379targetPort: 6379type: ClusterIP

应用配置:

sudo kubectl apply -f redis-deployment.yaml

4. 部署PHP应用

4.1 创建PHP服务

创建文件 php-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: php-deployment
spec:replicas: 2  # 运行2个副本提高可用性selector:matchLabels:app: phptemplate:metadata:labels:app: phpspec:containers:- name: phpimage: php:7.4-fpm  # PHP-FPM镜像env:- name: MYSQL_HOSTvalue: "mysql-service"  # 通过服务名连接MySQL- name: REDIS_HOSTvalue: "redis-service"  # 通过服务名连接RedisvolumeMounts:- mountPath: /var/www/html  # PHP代码目录name: php-codevolumes:- name: php-codeemptyDir: {}  # 临时存储(生产环境需替换为持久化存储)

应用配置:

sudo kubectl apply -f php-deployment.yaml

5. 部署Nginx反向代理

5.1 配置Nginx

创建文件 nginx-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: nginx-config
data:nginx.conf: |server {listen 80;root /var/www/html;  # PHP代码目录index index.php;location / {try_files $uri $uri/ /index.php$is_args$args;}location ~ .php$ {fastcgi_pass php-service:9000;  # 转发请求到PHP服务include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}}

应用配置:

sudo kubectl apply -f nginx-config.yaml
5.2 部署Nginx

创建文件 nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:alpineports:- containerPort: 80volumeMounts:- mountPath: /etc/nginx/conf.d  # 挂载配置文件name: nginx-config- mountPath: /var/www/html     # 共享PHP代码目录name: php-codevolumes:- name: nginx-configconfigMap:name: nginx-config  # 使用ConfigMap中的配置- name: php-codeemptyDir: {}
---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: NodePort  # 通过节点IP+端口访问

应用配置:

sudo kubectl apply -f nginx-deployment.yaml

6. 访问应用

6.1 查看服务端口
sudo kubectl get svc nginx-service

输出示例:

NAME            TYPE       CLUSTER-IP     PORT(S)        AGE
nginx-service   NodePort   10.43.123.45   80:30007/TCP   5m
  • 30007 是外部访问端口(随机分配)
6.2 通过浏览器访问
  • 如果部署在本地虚拟机:

    http://localhost:30007
    
  • 如果部署在云服务器:

    http://<服务器公网IP>:30007
    

7. 补充说明

7.1 如何上传PHP代码?
  1. 临时测试:进入PHP容器手动创建文件

    sudo kubectl exec -it <php-pod名称> -- bash
    echo "<?php phpinfo(); ?>" > /var/www/html/index.php
    
  2. 正式部署

    • 将代码打包到Docker镜像中
    • 或使用持久化存储(如NFS)
7.2 常用命令
# 查看所有资源状态
sudo kubectl get pods,svc,pvc# 查看Pod日志(替换<pod-name>)
sudo kubectl logs -f <pod-name># 删除部署
sudo kubectl delete -f <文件名>.yaml
7.3 遇到问题怎么办?
  • 检查Pod状态:

    sudo kubectl describe pod <pod-name>
    
  • 检查服务是否正常:

    sudo kubectl port-forward svc/nginx-service 8080:80
    # 然后访问 http://localhost:8080
    

推荐 🌟🌟🌟🌟🌟

🔍 dblens for MySQL - 下一代智能数据库管理与开发工具

🚀 免费下载 | 开箱即用 | AI赋能 | 全链路SQL开发


🌟 核心亮点功能

🤖 AI 智能引擎

  • AI自然语言对话:用日常语言描述需求,自动生成精准SQL语句
  • SQL智能优化器:AI深度解析执行计划,提供性能优化建议
  • 测试数据工厂:智能生成海量仿真测试数据,支持复杂业务规则
  • 大模型定制中心:支持配置接入/训练专属领域大模型

🛠️ 智能开发套件

  • 可视化表设计器:设计表,实时DDL同步
  • AI SQL编辑器
    • 智能语法高亮
    • 智能语法补全
    • 动态错误检测 + 一键修复
    • 多窗口对比调试
  • AI对象生成:自动创建表/视图/存储过程/函数

📊 数据管理矩阵

  • 智能SQL筛选器:可视化条件组合生成复杂查询
  • 数据字典中心:自动生成文档,支持PDF
  • 云原生数据库沙箱:预置测试实例,5秒快速连接
  • 异构数据迁移:支持Excel/CSV/JSON ↔ 数据库双向同步

🚄 效率加速器

  • 自然语言转SQL:业务人员也能轻松操作数据库
  • SQL历史版本对比:智能识别语法差异
  • 跨平台工作区:Windows/macOS/Linux全支持
  • 多语言界面:中文/英文自由切换

🎯 适用场景

✅ 敏捷开发团队快速迭代
✅ DBA智能运维管理
✅ 数据分析师自助查询
✅ 教学培训SQL编程
✅ 企业级数据资产管理

⚡ 即刻体验

→ [立即下载] https://sourceforge.net/projects/dblens-for-mysql


http://www.ppmy.cn/ops/166906.html

相关文章

Kubernetes集群版本升级

集群升级 注意事项 升级集群版本建议逐步升级&#xff0c;比如 v1.20.1–>v1.21.1–>v1.22.1–>v1.23.1–>v1.24.1&#xff0c;不能跨度过大&#xff0c;否则会报错。 升级步骤 查看集群版本 [roothadoop102 ~]# kubectl get nodes NAME STATUS …

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…

第一个vue项目

项目目录 启动vue项目 npm run serve 1.vue.config.js文件 (CLI通过vue-cli-serve启动项目&#xff0c;解析配置配置文件vue-condig-js&#xff09; // vue.config.js //引入path板块&#xff0c;这是Node.js的一个内置模块&#xff0c;用于处理文件路径&#xff0c;这里引用…

如何在电脑上使用 Jupyter Notebook 通过 SSH 远程连接树莓派Zero

有无数种方式通过SSH远程连接树莓派&#xff0c;但对于树莓派Zero 2W这种硬件资源有限的板子&#xff0c;因为内存有限Pycharm干脆不能通过SSH连接树莓派Zero 2W。VScode通过SSH连接时&#xff0c;也会因为资源有限时常断线。因此&#xff0c;我们就要用轻量级的编辑器Jupyter …

举例说明 牛顿法 Hessian 矩阵

矩阵求逆的方法及示例 目录 矩阵求逆的方法及示例1. 伴随矩阵法2. 初等行变换法矩阵逆的实际意义1. 求解线性方程组2. 线性变换的逆操作3. 数据分析和机器学习4. 优化问题牛顿法原理解释举例说明 牛顿法 Hessian 矩阵1. 伴随矩阵法 原理:对于一个 n n n 阶方阵 A A

数据库:一文掌握 PostgreSQL 的各种指令(PostgreSQL指令备忘)

文章目录 PostgreSQL 工作入门psql 命令获得帮助Recon 观察Databases 数据库Tables 表Permissions 权限Columns 列Data 数据Users 用户Schema PostgreSQL 命令表查询缓冲区信息连接格式化输入输出变量杂项大对象 各种各样的备份恢复远程访问导入/导出 CSV跨版本升级 PostgreSQL…

FlowGram 简介:开源前端流程搭建引擎

FlowGram 是一套基于节点编辑的流程搭建引擎&#xff0c;帮助开发者快速创建固定布局或自由连线布局的流程&#xff0c;并提供一套交互的最佳实践, 很适合有明确输入和输出的可视化工作流。 Github: https://github.com/bytedance/flowgram.ai官网&#xff1a;https://flowgram…

基于Matlab设计GUI图像处理交互界面

Image-Processing-GUI 项目说明 本博文提供了完整的代码和使用教程&#xff0c;适合新入门的朋友参考&#xff0c;完整代码资源文件请转至文末的下载链接。 本项目是《Matlab实践》中图像处理软件题目&#xff0c;本项目实现的具体内容如下 基于Matlab设计GUI交互界面图像的…