六、kubernetes实战案例之单个pod多容器实现LNMP运行WordPress

K8S中基于Nginx+PHP+MySQL实现的WordPress的web站点
LNMP案例之基于Nginx+PHP实现WordPress博客站点,要求Nginx+PHP运行在同一个Pod的不同容器,MySQL
运行与default的namespace并可以通过service name增删改查数据库。

 

1.安装nfs服务器,基于PV作为后端存储
[root@localhost7B ]# cat  /etc/exports
/data/k8sdata  *(rw,no_root_squash)


#创建项目目录
[root@localhost7B ~]# mkdir  /data/k8sdata/magedu/wordpress
#第三步创建的账号,nginx要读取。
[root@localhost7B magedu]# chown 2019:2019 wordpress  -R   
#测试页
[root@localhost7B wordpress]# cat 
<?php
phpinfo();
?>

[root@localhost7B ]# systemctl  restart  nfs-server.service



2.构造初始化镜像
下载初始镜像,上传镜像到harbor.zzhz.com服务器
[root@localhost7C centos]# docker pull  centos:7.6.1810
[root@localhost7C centos]# docker tag  f1cb7c7d58b7   harbor.zzhz.com/baseimages/centos:7.6.1810
[root@localhost7C centos]# docker push harbor.zzhz.com/baseimages/centos:7.6.1810 



3.对初始镜像进行基础软件安装,此镜像为nginx tomcat jdk的基本镜像
[root@localhost7C centos]# ll
-rw-r--r-- 1 root root      174 4月   7 2020 build-command.sh
-rw-r--r-- 1 root root      503 4月   9 2020 Dockerfile
-rw-r--r-- 1 root root 24694569 4月   7 2020 filebeat-7.6.1-x86_64.rpm 


[root@localhost7C centos]# cat Dockerfile 
#自定义Centos 基础镜像
from from harbor.zzhz.com/baseimages/centos:7.6.1810 
LABEL MAINTAINER="2973707860@qq.com"
ADD filebeat-7.6.1-x86_64.rpm /tmp
RUN yum install -y /tmp/filebeat-7.6.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.6.1-x86_64.rpm \
&& ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && useradd  nginx -u 2019 && useradd www -u 2020


#harbor先创建/baseimages项目
[root@localhost7C centos]# cat build-command.sh 
#!/bin/bash
docker build -t  harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810  .

docker push harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810


#执行构造
[root@localhost7C centos]# chmod  +x build-command.sh 
[root@localhost7C centos]# ./build-command.sh





4.创建nginx软件公用镜像
[root@localhost7C pub-images]# ll nginx-base-wordpress/
总用量 1000
-rw-r--r-- 1 root root     164 4月  11 17:21 build-command.sh
-rw-r--r-- 1 root root     496 4月  11 17:17 Dockerfile
-rw-r--r-- 1 root root 1015384 4月   7 2020 nginx-1.14.2.tar.gz

[root@localhost7C pub-images]# cd nginx-base-wordpress/

[root@localhost7C nginx-base-wordpress]# cat Dockerfile 
#Nginx Base Image
FROM harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810
MAINTAINER  zhangshijie@magedu.net
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.14.2.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.14.2 && ./configure --prefix=/usr/local/nginx  && make && make install && ln -sv  /usr/local/nginx/sbin/nginx /usr/sbin/nginx  &&rm -rf /usr/local/src/nginx-1.14.2.tar.gz 


[root@localhost7C nginx-base-wordpress]# cat build-command.sh 
#!/bin/bash
docker build -t harbor.zzhz.com/pub-images/nginx-base-wordpress:v1.14.2  .
sleep 1
docker push  harbor.zzhz.com/pub-images/nginx-base-wordpress:v1.14.2


[root@localhost7C nginx-base-wordpress]# chmod +x  build-command.sh  
[root@localhost7C nginx-base-wordpress]# ./build-command.sh 
4.创建nginx项目镜像。业务使用。 
[root@localhost7C linux39]# tree  wordpress/
wordpress/
├── nginx
│   ├── build-command.sh
│   ├── Dockerfile
│   ├── index.html
│   ├── nginx.conf
│   └── run_nginx.sh
└── php
    ├── build-command.sh
    ├── Dockerfile
    ├── run_php.sh
    └── www.conf



[root@localhost7C nginx]# cat nginx.conf 
user  nginx nginx;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#daemon off;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;
    client_max_body_size 10M;
    client_body_buffer_size 16k;
    client_body_temp_path  /apps/nginx/tmp   1 2 2;
    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;



        location / {
            root    /home/nginx/wordpress;
            index   index.php index.html index.htm;
        }

        location ~ \.php$ {
            root           /home/nginx/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

执行脚本 
[root@localhost7C nginx]# cat run_nginx.sh 
#!/bin/bash
#echo "nameserver 10.20.254.254" > /etc/resolv.conf
/usr/local/nginx/sbin/nginx
tail -f /etc/hosts


[root@localhost7C nginx]# cat index.html 
nginx web1

[root@localhost7C linux39]# cd wordpress/nginx/

[root@localhost7C nginx]# cat Dockerfile 
FROM harbor.zzhz.com/pub-images/nginx-base-wordpress:v1.14.2 
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD run_nginx.sh /usr/local/nginx/sbin/run_nginx.sh
RUN mkdir -pv /home/nginx/wordpress
ADD index.html /home/nginx/wordpress/
RUN chown nginx.nginx /home/nginx/wordpress/ -R
EXPOSE 80 443
CMD ["/usr/local/nginx/sbin/run_nginx.sh"] 


[root@localhost7C nginx]# cat build-command.sh 
#!/bin/bash
TAG=$1
docker build -t harbor.zzhz.com/linux39/wordpress-nginx:${TAG} .
echo "镜像制作完成,即将上传至Harbor服务器"
sleep 1
docker push  harbor.zzhz.com/linux39/wordpress-nginx:${TAG}
echo "镜像上传完成"


[root@localhost7C nginx]# chmod +x *.sh

[root@localhost7C nginx]# build-command.sh 2023-04-12-v2

测试:
[root@localhost7C nginx-base-wordpress]# docker run -it --rm  -p 80:80  harbor.zzhz.com/linux39/wordpress-nginx:2023-04-12-v2  bash




5.创建php镜像。

[root@localhost7C php]# grep "^[a-Z]" www.conf
user = nginx
group = nginx
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /opt/remi/php56/root/var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /opt/remi/php56/root/var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /opt/remi/php56/root/var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /opt/remi/php56/root/var/lib/php/wsdlcache



[root@localhost7C php]# cat run_php.sh 
#!/bin/bash
#echo "nameserver 10.20.254.254" > /etc/resolv.conf
/opt/remi/php56/root/usr/sbin/php-fpm
#/opt/remi/php56/root/usr/sbin/php-fpm --nodaemonize
tail -f /etc/hosts

[root@localhost7C php]# cat Dockerfile 
#PHP Base Image
FROM harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810
MAINTAINER  zhangshijie@magedu.net
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
#RUN useradd nginx -u 2019
ADD run_php.sh /usr/local/bin/run_php.sh
EXPOSE 9000
CMD ["/usr/local/bin/run_php.sh"] 


[root@localhost7C php]# cat build-command.sh 
#!/bin/bash
TAG=$1
docker build -t harbor.zzhz.com/linux39/wordpress-php-5.6:${TAG} .
echo "镜像制作完成,即将上传至Harbor服务器"
sleep 1
docker push harbor.zzhz.com/linux39/wordpress-php-5.6:${TAG}
echo "镜像上传完成"
6.yaml文件编写
[root@localhost7C wordpress]# cat wordpress.yaml 
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: wordpress-app
  name: wordpress-app-deployment
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress-app
  template:
    metadata:
      labels:
        app: wordpress-app
    spec:
      containers:
      - name: wordpress-app-nginx
        image: harbor.zzhz.com/linux39/wordpress-nginx:2023-04-12-v2
        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: harbor.zzhz.com/linux39/wordpress-php-5.6:2023-04-12
        #imagePullPolicy: IfNotPresent
        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.80.110
          path: /data/k8sdata/magedu/wordpress 


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


[root@localhost7C wordpress]# kubectl  apply  -f wordpress.yaml


测试访问 http://192.168.80.160:30031/test.php

 

8.数据库创建参考
实例:基于PVC+StatefulSet实现的MySQL主从架构  https://www.cnblogs.com/Yuanbangchen/p/17309336.html

创建账号和数据库
[root@localhost7C mysql]# kubectl exec  -it mysql-0  bash

root@mysql-0:/# mysql

mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"%" IDENTIFIED BY "wordpress";

mysql> select user,host,authentication_string  from  user;
+-----------+------+-------------------------------------------+
| user      | host | authentication_string                     |
+-----------+------+-------------------------------------------+
| root      | %    |                                           |
| wordpress | %    | *C260A4F79FA905AF65142FFE0B9A14FE0E1519CC |
+-----------+------+-------------------------------------------+
2 rows in set (0.00 sec)


9初始化wordpress 项目。
#http://192.168.80.160:30031/index.html


FQDN:$(podname).(headless server name).namespace.svc.zzhz.local
本例地址:mysql-0.mysql.default.svc.zzhz.local

设置账号和密码:2ThVNUcUJZ#HGN
&alQ

 

posted @ 2023-04-12 11:45  yuanbangchen  阅读(78)  评论(0编辑  收藏  举报