文章目录
- 第一步:部署MariaDB
- 第二步:部署WordPress
- 第三步:映射WordPress Pod 端口号,让它在集群外可见
- 第四步:创建反向代理的 Nginx,让我们的网站对外提供服务
WordPress架构图

第一步:部署MariaDB
MariaDB 需要 4 个环境变量,比如数据库名、用户名、密码等,在 Docker 里我们是在命令行里使用参数 --env,而在 Kubernetes 里我们就应该使用 ConfigMap,为此需要定义一个 maria-cm 对象:
maria-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: maria-cm
data:
DATABASE: 'db'
USER: 'wp'
PASSWORD: '123'
ROOT_PASSWORD: '123'
[root@k8s-master k8s]# kubectl apply -f maria-cm.yaml
[root@k8s-master k8s]# kubectl get configmaps
NAME DATA AGE
maria-cm 4 6d7h
定义 Pod 对象 maria-pod,把配置信息注入 Pod,让 MariaDB 运行时从环境变量读取这些信息:
maria-pod yaml
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 可以一次性地把 ConfigMap 里的字段全导入进 Pod,并且能够指定变量名的前缀(即这里的 MARIADB_),非常方便。
envFrom:
- prefix: 'MARIADB_'
configMapRef:
name: maria-cm
[root@k8s-master k8s]# kubectl apply -f maria-pod.yaml
pod/maria-pod created
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
maria-pod 1/1 Running 0 15s 10.244.1.16 node2 <none> <none>
现在数据库就成功地在 Kubernetes 集群里跑起来了,IP 地址是“10.244.1.16”,注意这个地址和 Docker 的不同,是 Kubernetes 里的私有网段。
第二步:部署WordPress
先用 ConfigMap 定义环境变量
apiVersion: v1
kind: ConfigMap
metadata:
name: wp-cm
data:
HOST: '10.244.1.16'
USER: 'wp'
PASSWORD: '123'
NAME: 'db'
kubectl apply -f wp-cm.yaml
在这个 ConfigMap 里要注意的是“HOST”字段,它必须是 MariaDB Pod 的 IP 地址,如果不写正确 WordPress 会无法正常连接数据库。
编写 WordPress 的 YAML 文件,为了简化环境变量的设置同样使用了 envFrom:
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 -f wp-pod.yml
kubectl get pod -o wide
[root@k8s-master k8s]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
maria-pod 1/1 Running 0 3h9m 10.244.1.16 node2 <none> <none>
wp-pod 1/1 Running 0 15s 10.244.2.23 node1 <none> <none>
第三步:映射WordPress Pod 端口号,让它在集群外可见
因为 Pod 都是运行在 Kubernetes 内部的私有网段里的,外界无法直接访问,想要对外暴露服务,需要使用一个专门的 kubectl port-forward 命令,它专门负责把本机的端口映射到在目标对象的端口号,有点类似 Docker 的参数 -p,经常用于 Kubernetes 的临时调试和测试。
下面我就把本地的“8080”映射到 WordPress Pod 的“80”,kubectl 会把这个端口的所有数据都转发给集群内部的 Pod:
[root@k8s-master k8s]# kubectl port-forward wp-pod 8080:80 &
[1] 97157
[root@k8s-master k8s]# Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
注意在命令的末尾我使用了一个 & 符号,让端口转发工作在后台进行,这样就不会阻碍我们后续的操作。
如果想关闭端口转发,需要敲命令 fg ,它会把后台的任务带回到前台,然后就可以简单地用“Ctrl + C”来停止转发了。
第四步:创建反向代理的 Nginx,让我们的网站对外提供服务
目标地址为“127.0.0.1:8080”,它就是我们在第三步里用 kubectl port-forward 命令创建的本地地址:
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;
}
}
然后我们用 docker run -v 命令加载这个配置文件,以容器的方式启动这个 Nginx 代理:
docker run -d --rm --net=host -v /root/k8s/proxy.conf:/etc/nginx/conf.d/default.conf nginx:alpine
[root@k8s-master k8s]# docker ps | grep nginx
2b500be36bac nginx:alpine "/docker-entrypoint.…" 23 seconds ago Up 22 seconds
有了 Nginx 的反向代理之后,我们就可以打开浏览器,输入本机的“127.0.0.1”或者是虚拟机的 IP 地址(我这里仍然是“http://192.168.192.144”),看到 WordPress 的界面: