Kubernetes-部署WordPress

回顾

Kubernetes把集群里的计算资源定义为节点(Node),其中又划分成控制面和数据面两类。

  • 控制面是Master节点,负责管理集群和运维监控应用,里面的核心组件是apiserver、etcd、scheduler、controller-manager。
  • 数据面是Worker节点,受Master节点的管控,里面的核心组件是kubelet、kube-proxy、container-runtime。

WordPress 网站搭建步骤

第一步:

定义一个maria-cm对象:

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

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

把配置信息注入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

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

kubectl apply -f mariadb-pod.yml
kubectl get pod -o wide

第二步:

编排WordPress对象的ConfigMap定义它的环境变量

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

data:
  HOST: '172.17.0.2'
  USER: 'wp'
  PASSWORD: '123'
  NAME: 'db'

HOST字段必须是MariaDB Pod的IP地址

再编写WordPress的YAML文件

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

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

    envFrom
    - prefix: 'WORDPRESS_DB_'
      configMapRef:
        name: wp-cm
kubectl apply -f wp-pod.yml
kubectl get pod -o wide

第三步

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

kubectl port-forward命令,它专门负责把本机的端口映射到在目标对象的端口号,用于Kubernetes的临时调试和测试。

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

kubectl port-forward wp-pod 8080:80 &
# &符号,让端口转发工作在后台进行,不会阻碍我们后续的操作。如需关闭端口转发,需要敲命令fg,它会把后台的任务带回到前台,使用“Ctrl+C”来停止转发

第四步

因为WordPress网站使用了URL重定向,直接使用“8080”会导致跳转故障,所以为了让网站正常工作,我们还应该在Kubernetes之外启动Nginx反向代理,保证外界看到的仍然是“80”端口号。

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;
}
}

然后我们用docker run -v命令加载这个配置文件,以容器的方式启动这个Nginx代理

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

有了Nginx的反向代理之后,可以访问服务了

本例子仅用于学习

posted @ 2022-12-23 22:10  robot-Z  阅读(103)  评论(0编辑  收藏  举报