Kubernetes v1.36.0 + Ubuntu24.04 + containerd 2.x WordPress 完整部署文档

集群信息

  • 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

三、访问验证(任意设备执行)

浏览器访问地址:

http://192.168.1.120:30080

http://192.168.1.121:30080

http://192.168.1.122:30080

命令行测试:

bash 复制代码
curl http://192.168.1.120:30080

配套运维命令(仅master节点执行)

  1. 查看MySQL日志
bash 复制代码
kubectl logs -f deployment/mysql -n wordpress
  1. 查看WordPress日志
bash 复制代码
kubectl logs -f deployment/wordpress -n wordpress
  1. 进入MySQL容器调试
bash 复制代码
kubectl exec -it deployment/mysql -n wordpress -- bash
  1. 一键卸载整套WordPress
bash 复制代码
kubectl delete namespace wordpress
相关推荐
你想考研啊1 小时前
七、Docker 容器 + Docker Compose单机部署理发店系统
docker·容器·composer
AOwhisky15 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
众人皆醒我独醉18 小时前
OpenShift RBAC 与平台安全策略:比 K8s 多出来的那几道锁,每道都是为了堵一个曾经发生过的事故
面试·kubernetes
众人皆醒我独醉19 小时前
为什么你的 RBAC 配了还是 403?—— 一套可以复现的排障方法论
面试·kubernetes
jieyucx21 小时前
Docker 入门第六阶段:综合实战项目
运维·docker·容器
海涛从不浪1 天前
03 oect刷入Armbian后安装Onepanel并进行docker迁移
运维·docker·容器·onepanel
Zhu7581 天前
在k8s环境部署Apache Kafka 集群架构,combined模式,无SSL配置
kafka·kubernetes·apache
天狼啸月19901 天前
RagSEDE复现: Docker and Ragflow 关系
docker·容器·ragflow·ragsede