Kubernetes搭建WordPress 网站

73 阅读4分钟

前言:

​ 本文章是从虚拟机无minikube环境开始搭建,如果已有minikube环境或者只是搭建过程中遇到问题可自行跳过前面内容,找到所需章节内容

目的:

​ 使用Kubernetes搭建WordPress网站,并使用 Dashboard 管理 Kubernetes

基本思想:

  1. 将MariaDB和WordPress两个应用封装成Pod,运行所需环境也写成ConfigMap,统一用“声明式”来管理

  2. 在Kubernetes集群内部维护一个自己的专用网络,要让这个网络与外界隔离,要使用特殊的“端口转发”方式来传递数据

  3. 还需要在集群之外反向代理这个地址,这样才能实现内外沟通,但对比Docker的直接端口映射,略显麻烦

基本步骤:

  1. 第一步:编排MariaDB对象

  2. 第二步:编排WordPress对象

  3. 第三步:WordPress对象 Pod映射端口号,让它在集群外可见

  4. 第四步:创建反向代理Nginx,让网站对外提供服务

实验前的准备:

1. 检查当前虚拟机版本号:

QG12315@Qing:~$ cat /etc/os-release

QG12315@Qing:~$ cat /etc/os-release

NAME="Ubuntu"

VERSION_ID="24.04"

VERSION="24.04.2 LTS (Noble Numbat)"

VERSION_CODENAME=noble

ID=ubuntu

ID_LIKE=debian

HOME_URL="https://www.ubuntu.com/"

SUPPORT_URL="``https://help.ubuntu.com/``"

BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/

PRIVACY_POLICY_URL="``https://www.ubuntu.com/legal/terms-and-policies/privacy-policy``"

UBUNTU_CODENAME=noble

LOGO=ubuntu-logo

显然,实验当前使用的虚拟机:Ubuntu 24.04.2

2. 当前虚拟机处于安装了Docker,但并未部署minikube和Kubernetes

QG12315@Qing:~$ docker --version

Docker version 26.1.3, build 26.1.3-0ubuntu1~24.04.1

QG12315@Qing:~$ minikube --version

Command 'minikube' not found, did you mean:

command 'minitube' from deb minitube (3.9.3-2)

Try: sudo apt install <deb name>

虚拟机环境为当时我做实验,用Docker搭建WordPress网站

3. 准备工作开始

3.1 查看文件daemon.json文件

添加加速器,防止在pull镜像时出错

{
  "registry-mirrors": [
    "https://docker.888666222.xyz",
    "https://docker.1panel.live",
    "https://xdcm2qvr.mirror.aliyuncs.com",  
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "dns": ["8.8.8.8", "114.114.114.114"],
  "dns-opts": ["use-vc"],
  "ipv6": false
}

重启配置文件生效:

sudo systemctl daemon-reload

sudo systemctl restart docker

3.2 搭建Kubernetes环境

3.2.1 下载minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

sudo install minikube /usr/local/bin/

3.2.2 下载成功,验证是否安装成功

minikube version

3.2.3 安装Kubectl

minikube Kubectl

3.2.4 验证minikube环境

启动命令:

minikube start --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.28' --kubernetes-version=v1.23.3

简化启动:

​ 为了防止以后启动都不必输入上述一连串命令,只要输入minikube start即可,因此修改本地启动配置文件

使用vim 找到配置文件所在位置修改 ~/.minikube/config/config.json

修改内容

{
  "image-mirror-country": "cn",
  "image-repository": "``registry.cn-hangzhou.aliyuncs.com/google_containers``",
  "base-image": "``registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.28``",
  "kubernetes-version": "v1.23.3"
}

验证内容是否正确: minikube config view

如果输出:

启动.png 则是修改成功

验证是否安装成功

查看状态:

minikube status

image.png

minikube node list

img

查看kubectl版本:minikube kubectl -- version

image.png

3.2.5 简化输入(可选)

使每次使用kubectl,不用使用minikube的前缀

设置kubectl 别名

#临时版:

alias kubectl="minikube kubectl --"

#永久版:

echo 'alias kubectl="minikube kubectl --"' >> ~/.bashrc

source ~/.bashrc

开启kubectl自动补全:

​ 查询bash-completion是否安装:type _init_completion

有:_init_completion is a function

image.png

无:bash: type: _init_completion: not found

​ (没有则下载)安装bash-completion:sudo apt-get install bash-completion

添加脚本到配置文件中:

echo 'source <(minikube kubectl -- completion bash)' >> ~/.bashrc

配置文件生效:source ~/.bashrc

img

3.2.6 检查当前minikube内部是否同步了daemon.json加速文件

#进入minikube的docker中:minikube ssh

查看配置文件是否正确:cat /etc/docker/daemon.json

修改配置文件内容:sudo vim /etc/docker/daemon.json(内容是上文中配置的加速器内容)

重启配置文件生效:

sudo systemctl daemon-reload

sudo systemctl restart docker

测试:docker pull

拉取一个远程镜像看看配置的加速器或者国内镜像是否正确 image.png

实验开始:

1. 第一步:编排MariaDB对象

准备好maria-pod.yaml文件

#使用ConfigMap定义一个maria-cm对象

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'

---

#定义Pod对象,配置信息注入Pod,让MariaDB运行时,读取这些信息

apiVersion: v1
kind: Pod
metadata:
  name: maria-pod
  labels:
    app: wordpress
    role: database

spec:
  containers:
  - image: mariadb:10
    name: maria
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3306

    envFrom:
    - prefix: 'MARIADB_'
      configMapRef:
        name: maria-cm

实行部署:kubectl apply -y maria-pod.yaml

apply.png 查看当前状态并获取IP地址kubectl get pod -o wide

image.png

记住这个172.17.0.3,需要填在wp-pod.yaml对应位置

2. 第二步:编排WordPress对象

准备好wp-pod.yaml文件


apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm

data:
  HOST: '172.17.0.2' #上面`maria-pod.yaml`生成的IP填入
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

---

apiVersion: v1
kind: Pod
metadata:
  name: wp-pod
  labels:
    app: wordpress
    role: website

spec:
  containers:
  - image: wordpress:5
    name: wp-pod
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

    envFrom:
    - prefix: 'WORDPRESS_DB_'
      configMapRef:
        name: wp-cm

实行部署:kubectl apply -y wp-pod.yaml

查看当前状态并获取IP地址kubectl get pod -o wide

yaml.png

3. 第三步:WordPress对象 Pod映射端口号,让它在集群外可见

把本地8080映射到WordPress Podd的80:kubectl port-forward wp-pod 8080:80 &

映射端口.png

4. 第四步:创建反向代理Nginx,让网站对外提供服务

创建Nginx代理文件:

server {
  listen 80;
  default_type text/html;

  location / {
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_pass http://127.0.0.1:8080;
  }
}

启动dockernginx容器代理进行反向代理:

docker run -d --rm \
    --net=host \
    -v /tmp/proxy.conf:/etc/nginx/conf.d/default.conf \
    nginx:alpine

挂载.png

5. 查看登录情况:

输入虚拟机远程登录IP地址

网站搭建成功.png

查看日志:kubectl logs

日志.png

6. 使用 Dashboard 管理 Kubernetes

查看插件列表:minikube addons list

minikube插件.png

启用dashboard插件minikube addons enable dashboard

访问Dashboard:

自动:minikube dashboard

手动:minikube service kubernetes-dashboard --url -n kubernetes-dashboard

Dashboard.png

可能出错点:

1. docker pull不上镜像;

  1. 配置加速文件

  2. pull国内镜像

一定要重启,加速文件才能生效

2. 使用minikube官网命令下载

  1. 官网的下载命令下载不下来

官方:curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64

sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

使用我给出的国内镜像即可

3. 启动minikube失败

例如:minikube start --kubernetes-version=v1.23.3,命令没问题,有问题的是自己的网络,建议使用国内镜像,使用我给出的阿里云镜像即可

4. kubecrl创建不了Pod

解决方法

  • 检查minikube docker内部的daemon.json文件,如果没同步,手动配置一下文件内容即可

  • Pod拉取镜像可能慢,可以直接在minikube docker内部docker pulll出YMAL文件内所需的镜像

镜像文件大 用YAML文件创建可能速度过慢

  • 本地docker有YAML文件中提及的镜像:

如果本地有mariadb:10/wordpress:5,但是就是拉取不上,也可以试试把本地的镜像打包,下面是具体步骤

docker save mariadb:10 > mariadb_10.tar

docekr save wordpress:5 > wordpress_5.tar

minikube image load mariadb_10.tar

kubectl delete pod maria-pod#如果部署了,删除即可

vim maria-pod.yaml改成imagePullPolicy: Never

kubectl apply -f maria-pod.yaml 重新应用

5. Nginx配置文件/反向代理问题:

docker run -d --rm \
    --net=host \
    -v /tmp/proxy.conf:/etc/nginx/conf.d/default.conf \
    nginx:alpine

-v pwd/proxy.conf上改到自己代理文件名字和地址

配置127.0.0.1有问题可换: http://host.docker.internal:8080

server {
  listen 80;
  default_type text/html;

  location / {
      proxy_http_version 1.1;
      proxy_set_header Host $host;
      proxy_pass http://host.docker.internal:8080;
  }
}

挂载命令也可换:

  docker run -d --rm -p 80:80 -v `tmp`/proxy.conf:/etc/nginx/conf.d/default.conf  nginx:alpine