5-3 单Pod多容器并实现LNMP的WordPress站点

发布于:2022-12-23 ⋅ 阅读:(504) ⋅ 点赞:(0)

前言

LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。

本文通过在单Pod中创建Nginx与PHP容器,并连接到MySQL一主多从集群。



准备镜像

Nginx镜像

Nginx镜像制作流程:

官方centos -> 自定义centos -> base-nginx -> wordpress-nginx

官方centos:下载后上传至本地镜像。

docker pull centos:7.9.2009
docker tag centos:7.9.2009 easzlab.io.local:5000/myhub/centos:7.9.2009
docker push easzlab.io.local:5000/myhub/centos:7.9.2009

自定义centos:添加网络组件,日志收集等功能。

# centos-base:7.9.2009
FROM easzlab.io.local:5000/myhub/centos:7.9.2009

ADD filebeat-7.12.1-x86_64.rpm /tmp
RUN yum install -y /tmp/filebeat-7.12.1-x86_64.rpm vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop &&  rm -rf /etc/localtime /tmp/filebeat-7.12.1-x86_64.rpm && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && useradd nginx -u 2088
nerdctl build -t easzlab.io.local:5000/myhub/centos-base:7.9.2009 .
nerdctl push --insecure-registry easzlab.io.local:5000/myhub/centos-base:7.9.2009

需要下载很多安装包,这次构建大概10分钟。镜像大小从200MB增加到700MB。


base-nginx:添加安装nginx-1.22,并创建基础目录。

# nginx-base-wordpress:v1.22.0
FROM easzlab.io.local:5000/myhub/centos-base:7.9.2009

RUN yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.22.0 && ./configure --prefix=/apps/nginx  && make && make install && ln -sv  /apps/nginx/sbin/nginx /usr/sbin/nginx  &&rm -rf /usr/local/src/nginx-1.22.0.tar.gz 
nerdctl build -t easzlab.io.local:5000/myhub/nginx-base-wordpress:v1.22.0 .
nerdctl push --insecure-registry easzlab.io.local:5000/myhub/nginx-base-wordpress:v1.22.0

wordpress-nginx:在base-nginx基础上,创建wordpress目录。

# wordpress-nginx:v1
FROM easzlab.io.local:5000/myhub/nginx-base-wordpress:v1.22.0

ADD nginx.conf /apps/nginx/conf/nginx.conf
ADD run_nginx.sh /apps/nginx/sbin/run_nginx.sh
RUN mkdir -pv /home/nginx/wordpress
RUN chown nginx.nginx /home/nginx/wordpress/ -R

EXPOSE 80 443

CMD ["/apps/nginx/sbin/run_nginx.sh"] 
nerdctl build -t easzlab.io.local:5000/myhub/wordpress-nginx:v1 .
nerdctl push --insecure-registry easzlab.io.local:5000/myhub/wordpress-nginx:v1

PHP镜像

PHP镜像:基于自定义centos。

# wordpress-php-5.6:v1
FROM easzlab.io.local:5000/myhub/centos-base:7.9.2009 

RUN yum install -y  https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm && yum install  php56-php-fpm php56-php-mysql -y 
ADD www.conf /opt/remi/php56/root/etc/php-fpm.d/www.conf
ADD run_php.sh /usr/local/bin/run_php.sh
EXPOSE 9000

CMD ["/usr/local/bin/run_php.sh"] 
nerdctl build -t easzlab.io.local:5000/myhub/wordpress-php-5.6:v1 .
nerdctl push --insecure-registry easzlab.io.local:5000/myhub/wordpress-php-5.6:v1

Tips: 打镜像时,源文件有sh一定要chmod +x可执行。否则复制到容器里无法执行,哪怕以root身份也无执行权限。


创建Pod

先在NFS服务器共享一个wordpress目录,具体方法参考 5-2 基于StatefulSet运行MySQL一主多从

创建一个Pod,内含nginx与php容器。和NodePort服务。

kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    app: wordpress-app
  name: wordpress-app-deployment
  namespace: myserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress-app
  template:
    metadata:
      labels:
        app: wordpress-app
    spec:
      containers:
      - name: wordpress-app-nginx
        image: easzlab.io.local:5000/myhub/wordpress-nginx:v1 
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          protocol: TCP
          name: http
        - containerPort: 443
          protocol: TCP
          name: https
        volumeMounts:
        - name: wordpress
          mountPath: /home/nginx/wordpress
          readOnly: false

      - name: wordpress-app-php
        image: easzlab.io.local:5000/myhub/wordpress-php-5.6:v1 
        imagePullPolicy: Always
        ports:
        - containerPort: 9000
          protocol: TCP
          name: http
        volumeMounts:
        - name: wordpress
          mountPath: /home/nginx/wordpress
          readOnly: false

      volumes:
      - name: wordpress
        nfs:
          server: 192.168.100.155
          path: /data/k8sdata/myserver/wordpress 

---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: wordpress-app
  name: wordpress-app-spec
  namespace: myserver
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30001
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
    nodePort: 30002
  selector:
    app: wordpress-app

创建数据库

5-2 基于StatefulSet运行MySQL一主多从 中我们部署了数据库,从里面创建供wordpress使用的数据库。

# 在主数据库创建wordpress库
kubectl exec -it mysql-0 -n myserver -- mysql
mysql> CREATE DATABASE wordpress;
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"%" IDENTIFIED BY "wordpress";
mysql> exit

# 在从数据库查看wordpress数据库
kubectl exec -it mysql-1 -n myserver -- mysql -uwordpress -hmysql-0.mysql -pwordpress
mysql> show databases;

部署WordPress

在NFS服务器中,下载wordpress,解压到共享的目录中。

pwd
/data/k8sdata/myserver

wget https://cn.wordpress.org/wordpress-6.0.2-zh_CN.tar.gz
tar zxvf wordpress-6.0.2-zh_CN.tar.gz

浏览器打开任一物理机节点(master+node)与端口,即可进入wordpress首页。

http://192.168.100.156:30001


wordpress 首页


在数据库主机,填入mysql pod的服务域名:

  • 同一namespace:mysql-0.mysql
  • 不同namespace:mysql-0.mysql.myserver.svc.cluster.local


复制文本框中的内容,进入NFS的手工创建wp-config.php

pwd
/data/k8sdata/myserver/wordpress

cp -a wp-config-sample.php wp-config.php

vim wp-config.php
按dG删除全部文本,并粘贴文本框的内容。

最后输入管理员信息

wordpress博客页面


本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到