K8S-实战案例之单个pod多容器实现LNMP运行WordPress

 一、构建基础镜像

1.1 构建php镜像

复制代码
FROM centos:web

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"]
复制代码

1.2 www.conf

复制代码
]# egrep -v "^;|^$" www.conf
[www]
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
复制代码

1.3 构建wordpress-nginx镜像

复制代码
FROM nginx-base:v1.14.2

ADD nginx.conf /usr/local/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    //注意修改目录权限,如果是nginx启动服务,权限不对会导致403拒绝访问

EXPOSE 80 443

CMD ["/apps/nginx/sbin/run_nginx.sh"]
复制代码

 1.4 查看镜像

]# docker images
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
wordpress-nginx                                          v5.0.2              e5cfaeb3cf4e        8 minutes ago       837MB
wordpress-php                                            v5.6.2              b16b76e1cadb        About an hour ago   928MB

二、wordpress.yml

复制代码
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: wordpress-nginx:v5.0.2
        imagePullPolicy: IfNotPresent
        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: wordpress-php:v5.6.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9000
          protocol: TCP
          name: http
        volumeMounts:
        - name: wordpress
          mountPath: /home/nginx/wordpress
          readOnly: false

      volumes:
      - name: wordpress
        nfs:
          server: 192.168.64.113
          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
复制代码

2.1 构建PHP测试页面,index.php

<?php
    phpinfo();
?>

2.2 测试访问

http://192.168.64.110:30031/index.php

http://192.168.64.110:30031

2.3 下载wordpress压缩包

官网:https://cn.wordpress.org/download/releases/

 将压缩包放到存储目录下

]# mv wordpress/* .

2.4 修改权限

chown nginx:nginx  /data/k8sdata/magedu/wordpress -R

 查看

复制代码
]# ll
total 196
-rw-r--r--  1 nginx nginx    14 May  1 16:31 index.html
-rw-r--r--  1 nginx nginx   418 Sep 25  2013 index.php
-rw-r--r--  1 nginx nginx 19935 Jan  7  2018 license.txt
-rw-r--r--  1 nginx nginx  6989 Dec 21  2018 readme.html
-rw-r--r--  1 nginx nginx  6878 Dec 13  2018 wp-activate.php
drwxr-xr-x  9 nginx nginx  4096 Dec 21  2018 wp-admin
-rw-r--r--  1 nginx nginx   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 nginx nginx  1889 May  3  2018 wp-comments-post.php
-rw-r--r--  1 nginx nginx  2735 Dec 21  2018 wp-config-sample.php
drwxr-xr-x  5 nginx nginx    69 Dec 21  2018 wp-content
-rw-r--r--  1 nginx nginx  3669 Aug 20  2017 wp-cron.php
drwxr-xr-x 19 nginx nginx  8192 Dec 21  2018 wp-includes
-rw-r--r--  1 nginx nginx  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 nginx nginx  3306 Aug 22  2017 wp-load.php
-rw-r--r--  1 nginx nginx 37296 Dec 13  2018 wp-login.php
-rw-r--r--  1 nginx nginx  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 nginx nginx 17421 Oct 23  2018 wp-settings.php
-rw-r--r--  1 nginx nginx 30091 Apr 30  2018 wp-signup.php
-rw-r--r--  1 nginx nginx  4620 Oct 24  2017 wp-trackback.php
-rw-r--r--  1 nginx nginx  3065 Sep  1  2016 xmlrpc.php
复制代码

2.5 nginx.conf

复制代码
 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;
            #if ($http_user_agent ~ "ApacheBench|WebBench|TurnitinBot|Sogou web spider|Grid Service") {
            #    proxy_pass http://www.baidu.com;
            #    #return 403;
            #}
        }
        location ~ \.php$ {
            root           /home/nginx/wordpress;
            fastcgi_pass   127.0.0.1:9000;      # 转发给本机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;
        }
复制代码

 三、创建ingress转发规则

复制代码
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-wordpress
  namespace: magedu
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: www.wordpress-nginx.com
      http:
        paths:
          - path: /
            backend:
              serviceName: wordpress-app-spec
              servicePort: 80
复制代码

3.1 查看端口

]# kubectl   get svc -A
NAMESPACE       NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default         kubernetes               ClusterIP   10.96.0.1        <none>        443/TCP                      2d3h
ingress-nginx   ingress-nginx            NodePort    10.97.129.237    <none>        80:32382/TCP,443:31915/TCP   6m23s 

3.2 解析/etc/hosts,使用域名访问

http://www.wordpress-nginx.com:32382/

四、初始化WordPress站点

使用k8s中运行的mysql服务,作为mysql服务器

4.1 k8s中MySQL创建数据库

kubectl exec -it mysql-0 sh -n linux39
.....
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"%" IDENTIFIED BY   "wordpress";
Query OK, 0 rows affected, 1 warning (0.01 sec)

 4.2 通过web界面初始化数据库

 

 

 

 

 

五、 验证k8s中mysql 数据

分别验证k8s中MySQL主库和从库是否数据

5.1 master数据

5.2 slave数据库

 

posted @   不会跳舞的胖子  阅读(190)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示