在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”来停止转发了。
第四步
是创建反向代理的Nginx,让我们的网站对外提供服务。
在mac上操作,发现搭建Nginx 是没有办法代理的。解决之道可以去这里查看。
使用Dashboard管理Kubernetes
启动Dashboard的命令
minikube dashboard
它会自动打开浏览器界面,显示出当前Kubernetes集群里的工作负载:
点击任意一个Pod的名字,就会进入管理界面,可以看到Pod的详细信息,而右上角有4个很重要的功能,分别可以查看日志、进入Pod内部、编辑Pod和删除Pod,相当于执行
logs、exec、edit、delete 命令,但要比命令行要直观友好的多:
比如说,我点击了第二个按钮,就会在浏览器里开启一个Shell窗口,直接就是Pod的内部Linux环境,在里面可以输入任意的命令,无论是查看状态还是调试都很方便:
ConfigMap/Secret等对象也可以在这里任意查看或编辑:
Dashboard里的可操作的地方还有很多,这里我只是一个非常简单的介绍。虽然你也许已经习惯了使用键盘和命令行,但偶尔换一换口味,改用鼠标和图形界面来管理Kubernetes也是件挺有意思的事情,有机会不妨尝试一下。