集群信息
- k8s-master01:192.168.1.120(仅此节点执行kubectl相关操作)
- k8s-node01:192.168.1.121
- k8s-node02:192.168.1.122
系统:Ubuntu 24.04 LTS
容器运行时:containerd 2.x
K8s版本:v1.36.0
说明:MySQL部署不挂载PVC,规避PV绑定导致Pod Pending问题,仅用于测试环境
一、三台节点统一执行(master01、node01、node02 全部操作)
1. 配置系统DNS
bash
sudo tee /etc/resolv.conf <<EOF
nameserver 223.5.5.5
nameserver 114.114.114.114
EOF
# 验证解析
nslookup registry-1.docker.io
2. 配置containerd镜像加速
bash
sudo mkdir -p /etc/containerd/conf.d
sudo tee /etc/containerd/conf.d/mirror.toml <<EOF
[plugins."io.containerd.cri.v1.images".registry.mirrors]
[plugins."io.containerd.cri.v1.images".registry.mirrors."docker.io"]
endpoint = [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker-0.unsee.tech",
"https://docker.nju.edu.cn",
"https://registry-1.docker.io"
]
EOF
# 重启服务生效
sudo systemctl restart containerd
# 查看运行状态
systemctl status containerd
3. 配置crictl
bash
sudo tee /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
4. 预拉取镜像
bash
sudo crictl pull docker.io/wordpress:6.4-apache
sudo crictl pull docker.io/mysql:5.7
5. 防火墙放行30080端口
bash
sudo ufw allow 30080/tcp
sudo ufw reload
sudo ufw status
二、仅 k8s-master01(192.168.1.120)执行
1. 创建业务存放目录
bash
mkdir -p /opt/k8s/wordpress
cd /opt/k8s/wordpress
2. 创建wordpress命名空间
bash
kubectl create namespace wordpress
# 验证命名空间
kubectl get ns
3. 创建数据库密钥Secret
bash
kubectl create secret generic mysql-secret -n wordpress \
--from-literal=mysql-root-password=Root@123456 \
--from-literal=mysql-user=wpuser \
--from-literal=mysql-password=Wp@654321 \
--from-literal=mysql-database=wordpressdb
# 查看密钥
kubectl get secret -n wordpress
4. 编写 mysql-deploy.yaml
bash
vim mysql-deploy.yaml
完整内容:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-root-password
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-database
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-password
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: wordpress
spec:
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
clusterIP: None
5. 应用MySQL配置
bash
kubectl apply -f mysql-deploy.yaml
kubectl get deploy,svc -n wordpress
6. 编写 wp-deploy.yaml
bash
vim wp-deploy.yaml
完整内容:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: wordpress
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:6.4-apache
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql:3306
- name: WORDPRESS_DB_NAME
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-database
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-user
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-password
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
spec:
type: NodePort
selector:
app: wordpress
ports:
- port: 80
targetPort: 80
nodePort: 30080
7. 应用WordPress配置
bash
kubectl apply -f wp-deploy.yaml
8. 重建WordPress Pod
bash
kubectl delete pods -l app=wordpress -n wordpress
9. 查看全部资源状态
bash
kubectl get all -n wordpress
等待所有Pod状态为 1/1 Running
三、访问验证(任意设备执行)
浏览器访问地址:
命令行测试:
bash
curl http://192.168.1.120:30080
配套运维命令(仅master节点执行)
- 查看MySQL日志
bash
kubectl logs -f deployment/mysql -n wordpress
- 查看WordPress日志
bash
kubectl logs -f deployment/wordpress -n wordpress
- 进入MySQL容器调试
bash
kubectl exec -it deployment/mysql -n wordpress -- bash
- 一键卸载整套WordPress
bash
kubectl delete namespace wordpress