先决条件
- 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS
- 基础命令行操作能力
- 确保服务器有至少2GB内存和10GB磁盘空间
1. 安装k3s(极简Kubernetes)
1.1 一键安装
bash
# 用root用户或sudo权限执行以下命令
curl -sfL https://get.k3s.io | sh -
解释:
k3s
是一个轻量级Kubernetes发行版,专为资源有限的环境设计- 这条命令会自动下载并安装k3s,默认使用
containerd
作为容器运行时
1.2 验证安装
bash
# 检查k3s服务状态
sudo systemctl status k3s
# 查看节点(此时应显示一个节点)
sudo kubectl get nodes
可能遇到的问题:
- 如果提示
kubectl command not found
,尝试退出终端重新登录
2. 部署MySQL数据库
2.1 创建存储卷(保存数据库数据)
创建文件 mysql-pvc.yaml
:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce # 存储卷只能被一个节点挂载
resources:
requests:
storage: 1Gi # 申请1GB存储空间
应用配置:
bash
sudo kubectl apply -f mysql-pvc.yaml
2.2 设置数据库密码(安全存储)
bash
# 创建一个名为mysql-secret的密钥,密码为yourpassword(自行修改)
sudo kubectl create secret generic mysql-secret --from-literal=password=yourpassword
2.3 部署MySQL
创建文件 mysql-deployment.yaml
:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
spec:
replicas: 1 # 只运行1个副本
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7 # 使用MySQL 5.7镜像
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD # 从密钥读取密码
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
volumeMounts:
- mountPath: /var/lib/mysql # 挂载存储卷到容器内目录
name: mysql-storage
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc # 使用之前创建的存储卷
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306 # 服务对外暴露的端口
targetPort: 3306 # 容器内部端口
type: ClusterIP # 仅集群内部访问
应用配置:
bash
sudo kubectl apply -f mysql-deployment.yaml
验证MySQL是否运行:
bash
sudo kubectl get pods # 查看状态是否为Running
3. 部署Redis缓存
3.1 创建存储卷(保存Redis数据)
创建文件 redis-pvc.yaml
:
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
应用配置:
bash
sudo kubectl apply -f redis-pvc.yaml
3.2 部署Redis
创建文件 redis-deployment.yaml
:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:alpine # 轻量级Redis镜像
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data # Redis数据存储目录
name: redis-storage
volumes:
- name: redis-storage
persistentVolumeClaim:
claimName: redis-pvc
---
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
selector:
app: redis
ports:
- protocol: TCP
port: 6379
targetPort: 6379
type: ClusterIP
应用配置:
bash
sudo kubectl apply -f redis-deployment.yaml
4. 部署PHP应用
4.1 创建PHP服务
创建文件 php-deployment.yaml
:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-deployment
spec:
replicas: 2 # 运行2个副本提高可用性
selector:
matchLabels:
app: php
template:
metadata:
labels:
app: php
spec:
containers:
- name: php
image: php:7.4-fpm # PHP-FPM镜像
env:
- name: MYSQL_HOST
value: "mysql-service" # 通过服务名连接MySQL
- name: REDIS_HOST
value: "redis-service" # 通过服务名连接Redis
volumeMounts:
- mountPath: /var/www/html # PHP代码目录
name: php-code
volumes:
- name: php-code
emptyDir: {} # 临时存储(生产环境需替换为持久化存储)
应用配置:
bash
sudo kubectl apply -f php-deployment.yaml
5. 部署Nginx反向代理
5.1 配置Nginx
创建文件 nginx-config.yaml
:
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;
}
}
应用配置:
bash
sudo kubectl apply -f nginx-config.yaml
5.2 部署Nginx
创建文件 nginx-deployment.yaml
:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx/conf.d # 挂载配置文件
name: nginx-config
- mountPath: /var/www/html # 共享PHP代码目录
name: php-code
volumes:
- name: nginx-config
configMap:
name: nginx-config # 使用ConfigMap中的配置
- name: php-code
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort # 通过节点IP+端口访问
应用配置:
bash
sudo kubectl apply -f nginx-deployment.yaml
6. 访问应用
6.1 查看服务端口
bash
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代码?
-
临时测试:进入PHP容器手动创建文件
bashsudo kubectl exec -it <php-pod名称> -- bash echo "<?php phpinfo(); ?>" > /var/www/html/index.php
-
正式部署:
- 将代码打包到Docker镜像中
- 或使用持久化存储(如NFS)
7.2 常用命令
bash
# 查看所有资源状态
sudo kubectl get pods,svc,pvc
# 查看Pod日志(替换<pod-name>)
sudo kubectl logs -f <pod-name>
# 删除部署
sudo kubectl delete -f <文件名>.yaml
7.3 遇到问题怎么办?
-
检查Pod状态:
bashsudo kubectl describe pod <pod-name>
-
检查服务是否正常:
bashsudo 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编程
✅ 企业级数据资产管理