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数据库
越学越感到自己的无知
分类:
K8S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现