在Kubernetes集群中搭建WordPress网站

218 阅读4分钟

在Kubernetes集群中搭建WordPress网站

WordPress、MariaDB这两个应用被封装成了Pod,运行所需的环境变量也都被改写成ConfigMap,统一用“声明式”来管理,比起Shell脚本更容易阅读和版本化管理。

另外,Kubernetes集群在内部维护了一个自己的专用网络,这个网络和外界隔离,要用特殊的“端口转发”方式来传递数据,还需要在集群之外用Nginx反向代理这个地址,这样才能实现内外沟通,对比Docker的直接端口映射,这里略微麻烦了一些。

WordPress网站搭建步骤

第一步

当然是要编排MariaDB对象。

apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm
data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'
---
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

注意这里我们使用了一个新的字段“envFrom”,这是因为ConfigMap里的信息比较多,如果用 env.valueFrom 一个个地写会非常麻烦,容易出错,而 envFrom 可以一次性地把ConfigMap里的字段全导入进Pod,并且能够指定变量名的前缀(即这里的 MARIADB_),非常方便。

使用 kubectl apply 创建这个对象之后,可以用 kubectl get pod 查看它的状态,如果想要获取IP地址需要加上参数 -o wide

  xuyatao@evan171206~/Desktop  kubectl apply -f maria-pod.yml

configmap/maria-cm created
pod/maria-pod created

 xuyatao@evan171206~/Desktop  kubectl get pod -o wide

NAME        READY   STATUS    RESTARTS   AGE   IP            NODE       NOMINATED NODE   READINESS GATES
maria-pod   1/1     Running   0          38s   10.244.0.23   minikube   <none>           <none>

记住这个10.244.0.23,在第二步的时候需要用到

第二步

编排WordPress对象

apiVersion: v1
kind: ConfigMap
metadata:
  name: wp-cm
data:
  HOST: '10.244.0.23'
  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
  • 在这个ConfigMap里要注意的是“HOST”字段,它必须是MariaDB Pod的IP地址,如果不写正确WordPress会无法正常连接数据库。
xuyatao@evan171206  ~/Desktop  kubectl apply -f wp-pod.yml

configmap/wp-cm created
pod/wp-pod created

第三步

是为WordPress Pod映射端口号,让它在集群外可见。

因为Pod都是运行在Kubernetes内部的私有网段里的,外界无法直接访问,想要对外暴露服务,需要使用一个专门的 kubectl port-forward 命令,它专门负责把本机的端口映射到在目标对象的端口号,有点类似Docker的参数 -p,经常用于Kubernetes的临时调试和测试。

下面我就把本地的“8080”映射到WordPress Pod的“80”,kubectl会把这个端口的所有数据都转发给集群内部的Pod:

 xuyatao@evan171206~/Desktop  kubectl port-forward wp-pod 8080:80 &
[1] 21507
 xuyatao@evan171206~/Desktop  Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

注意在命令的末尾我使用了一个 & 符号,让端口转发工作在后台进行,这样就不会阻碍我们后续的操作。

如果想关闭端口转发,需要敲命令 fg ,它会把后台的任务带回到前台,然后就可以简单地用“Ctrl + C”来停止转发了。

image.png

第四步

是创建反向代理的Nginx,让我们的网站对外提供服务。

在mac上操作,发现搭建Nginx 是没有办法代理的。解决之道可以去这里查看

使用Dashboard管理Kubernetes

启动Dashboard的命令

minikube dashboard

它会自动打开浏览器界面,显示出当前Kubernetes集群里的工作负载:

image.png 点击任意一个Pod的名字,就会进入管理界面,可以看到Pod的详细信息,而右上角有4个很重要的功能,分别可以查看日志、进入Pod内部、编辑Pod和删除Pod,相当于执行 logsexeceditdelete 命令,但要比命令行要直观友好的多:

image.png

image.png 比如说,我点击了第二个按钮,就会在浏览器里开启一个Shell窗口,直接就是Pod的内部Linux环境,在里面可以输入任意的命令,无论是查看状态还是调试都很方便:

ConfigMap/Secret等对象也可以在这里任意查看或编辑:

image.png Dashboard里的可操作的地方还有很多,这里我只是一个非常简单的介绍。虽然你也许已经习惯了使用键盘和命令行,但偶尔换一换口味,改用鼠标和图形界面来管理Kubernetes也是件挺有意思的事情,有机会不妨尝试一下。