【k8s】Wordpress(PHP+nginx+mysql)迁移到k8s

news2024/12/26 21:18:33

一、迁移思路:

1、制作服务镜像;
1.1 挑选合适的基础镜像;
1.2 准备代码相关的文件;
1.3 通过dockerfile构建镜像;

2、制作Kubernetes服务,并完成调度;
2.1确定服务运行的模式(内部运行or 对外提供);
2.2确定服务所使用的控制器;
2.3服务是否需要后端存储pvc;
2.4服务是否需要配置管理configmap;
2.5服务是否需要Service、Ingress等;

在这里插入图片描述

在这里插入图片描述

二、前期准备

1、下载wordpress源码

wget https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gz
tar xf wordpress-6.0-zh_CN.tar.gz
cd wordpress/

[root@node4 wordpress]# ls
index.php    readme.html      wp-admin            wp-comments-post.php  wp-content   wp-includes        wp-load.php   wp-mail.php      wp-signup.php     xmlrpc.php
license.txt  wp-activate.php  wp-blog-header.php  wp-config-sample.php  wp-cron.php  wp-links-opml.php  wp-login.php  wp-settings.php  wp-trackback.php

2、准备wp-config. php文件,需要修改里面的数据连接信息(使用变量,后期进行替换)、以及Authentication的key

wp-config. php

<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', '{DB_NAME}' );

/** Database username */
define( 'DB_USER', '{DB_USER}' );

/** Database password */
define( 'DB_PASSWORD', '{DB_PASSWORD}' );

/** Database hostname */
define( 'DB_HOST', '{DB_HOST}' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         '_78BG!]+f4gO,]UDYt[.<_Fk,sf|V|;<9p5%wyDsEx!;*:=]#FahHwhPnA8Q`7Bf');
define('SECURE_AUTH_KEY',  'R<Cdu]uti=U~PJnvG7n$+~X_At1CL=x8XPICi,lZ3p6nJFYPn~`M|]tpk0~[q~i>');
define('LOGGED_IN_KEY',    'g,j8IK1a,+uNlaB1D=*y-WF``N|Q$kD 4+~#PPE!pnQ2L8&M=1B Qf;g}?.ky2%h');
define('NONCE_KEY',        'ikbT(iA!qNg[hF]#:{Ant;ImQ-V$#QH&h1>6-G<(-}p4riHDd2V;7|CvAV<n-0ZF');
define('AUTH_SALT',        '-r]KWx*Sw>AR;~hY`A`NB(h[pQ,z53:et<]r0Bz?a.kYniW#ileVU_|$)+&`!.tl');
define('SECURE_AUTH_SALT', '^~)dk@YcyN_?Bg4p/NzV6+&m *ncWgA]46&@I)8_kA/SFiZm|y>rbX?7.6rtxydZ');
define('LOGGED_IN_SALT',   'KZ%dLA20xw~,rEn(b7ZgV1&EvC*F:==t#A+dQJ3]pL)7,P.=*]mO-z6(JcNX#|I#');
define('NONCE_SALT',       '&%^U[_1Nk89c`loe%.Z)-&4sUb`u-{gB8lw^(*!lv@QPp1kb^i:ddM|@[8B3=m(:');

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', false );

/* Add any custom values between this line and the "stop editing" line. */



/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';


上面wp-config. php文件要改的:
define( 'DB_NAME', '{DB_NAME}' );
define( 'DB_USER', '{DB_USER}' );
define( 'DB_PASSWORD', '{DB_PASSWORD}' );
define( 'DB_HOST', '{DB_HOST}' );

和访问https://api.wordpress.org/secret-key/1.1/salt/

在这里插入图片描述

三、wordpress迁移至k8s

1、Dockerfile

FROM centos:7
# 0、申明环境变量,便于后续的复用以及变更;
ENV Web_Dir="/usr/share/nginx/html/"
#
# 1、准备epel源、base源、并且安装nginx以及php、最后清理缓存、删除默认的nginx站点
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
    rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm && \
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm && \
    echo "sslverify=false" >> /etc/yum.conf

RUN yum install nginx php71w-fpm php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-mcrypt -y && \
     yum clean all && rm -rf /var/cache/yum/* && \
     rm -rf ${Web_Dir}


# 2、将代码存储到指定的路径下
COPY . ${Web_Dir}

# 3、准备nginx调用php的配置文件;-->抽离到configmap管理


# 4、修订权限;为了避免nginx和php运行的身份不一致,从而造成wordpress无法正常上传图片
RUN useradd -M www && \
    sed -i '/^user/c user www;' /etc/nginx/nginx.conf && \
    sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf && \
    sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf && \
    chown -R www.www ${Web_Dir} /var/lib/nginx/

# 5、暴露容器的端口
EXPOSE 80

# 6、启动脚本 nginx php 然后启动这个镜像会执行该脚本
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["bash","-c","/entrypoint.sh"]

2、启动脚本 entrypoint.sh

#运行Wordpress时,可以通过环境变量替换连接数据库相关信息。
Wordpress_File=/usr/share/nginx/html/wp-config.php

sed -i s/{DB_NAME}/${DB_NAME:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_USER}/${DB_USER:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_PASSWORD}/${DB_PASSWORD:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_HOST}/${DB_HOST:-localhost}/g  ${Wordpress_File}


#启动php /nginx
php-fpm && \
nginx -g "daemon off;"

3、构建镜像 、打tag、推送镜像

docker build -t harbor.oldxu.net/base/wordpress:v6.0 . 
docker tag 9779eee harbor.oldxu.net/base/wordpress:v6.0
docker push harbor.oldxu.net/base/wordpress:v6.0  

4、DB服务

4.1 01-mysql-headless.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
spec:
  clusterIP: None
  selector:
    app: mysql
  ports:
  - port: 3306
    targetPort: 3306

4.2 02-mysql-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-svc"
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: db
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: oldxu3957
        - name: MYSQL_DATABASE
          value: wordpress
        
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql/
        
      volumeClaimTemplates:
      - metadata:
          name: data
        spec:
          accessModes: ["ReadWriteOnce"]
          storageClassName: "nfs"
          resources:
            requests:
              storage: 6Gi       

进容器库,创库创表创用户密码,创权限等

nginx配置文件 blog.oldxu.net.conf 和转为configmap

server{
  listen 80;
  server_name _;
  root /usr/share/nginx/html;
  client_max_body_size 100m;

  location / {
    index index.php;
  }
  
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
} 

#将配置转为 configmap

kubectl create configmap nginxconfs --from-file=blog.oldxu.net.conf

4.3 03-wordpress-secret.yaml (创建连接数据库secret) (dp.yaml会引用此secret)

apiVersion: v1
kind: Secret
metadata:
  name: wordpress-secret
stringData:
  DB_NAME: wordpress
  DB_USER: root
  DB_PASSWORD: oldxu3957
  DB_HOST: mysql-0.mysql-svc.default.svc.cluster.local 
#master执行
dig @10.96.0.10  mysql-0.mysql-svc.default.svc.cluster.local +short

4.4 04-wordpress-pvc.yaml (准备PVC共享图片) (dp.yaml会引用此pvc)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-data
spec:
  storageClassName: "nfs"
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 6Gi

5、wordpress服务

05-wordpress-dp.yaml

kubectl create secret docker-registry harbor-login --docker-server=xxx.net --docker-username=xx--docker-password=xxx
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-dp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      imagePullSecrets:
      - name: harbor-login
      containers:
      - name: wordpress
        image: harbor.oldxu.net/base/wordpress:v6.0
        ports:
        - containerPort: 80
        envFrom:
        - secretRef:
            name: wordpress-secret
        volumeMounts:
        - name: config
          mountPath: /etc/nginx/conf.d/
        - name: images
          mountPath: /usr/share/nginx/html/wp-content/uploads  
          
      volumes:
      - name: config
        configMap:
          name: nginxconfs
      - name: images
        persistentVolumeClaim:
          claimName: wordpress-data        

06-wordpress-svc.yaml

apiVersion: v1
kind: Service
metadata: 
  name: wordpress-svc
spec:
  selector:
    app: wordpress
  ports:
    - port: 80
      targetPort: 80

07-wordpress-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress-ingress
spec:
  ingressClassName: "nginx"
  rules:
  - host: wordpress.oldxu.net
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wordpress-svc
            port:
              number: 80

旧版本ingress:

#apiVersion: networking.k8s.io/v1
apiVersion: extensions/v1beta1    
kind: Ingress
metadata:
  name: wordpress-ingress
spec:
  ingressClassName: "nginx"
  rules:
  - host: wordpress.oldxu.net
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: wordpress-svc
          servicePort: 80
          #service:
          #  name: wordpress-svc
          #  port:
          #    number: 80

访问

wordpress.oldxu.net:30080

在这里插入图片描述
在这里插入图片描述

思路图

在这里插入图片描述

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【邀请函】第四届宁德国际新能源电池与智造技术产业大会(4月26 宁德)| 达索系统百世慧®

未来5-10年&#xff0c;新能源电池行业将呈现“一大支柱、两大应用场景、多元化技术线路”的发展特征。动力锂电池仍将主导新能源电池产业&#xff0c;并加速乘用场景落地。随着技术的日趋成熟&#xff0c;量产后成本下降&#xff0c;优势逐步凸显。 但随着技术迭代&#xff0…

Maya 贴图链接检测重链打包插件tjh_lost_textures_finder 1.3.3

一、问题描述&#xff1a; maya在模型材质贴图及渲染制作流程中&#xff0c;经常会遇到工程文件路径更改后&#xff0c;图片链接失效的问题&#xff0c;还有就是萌新们不懂规矩&#xff0c;图片路径乱放&#xff0c;而造成的图片打包时巨大工作量&#xff0c;南无阿弥陀佛。此…

vue关于echarts后端返回格式取值方法

在vue中&#xff0c;接口返回如下数据&#xff1a; data: {充电桩: [0, 0, 78], 红外摄像头: [0, 0, 0], 火焰探测器: [0, 1, 0], 烟雾传感器: [0, 1, 1], 限流保护器: [0, 0, 1]}&#xff0c; 其中数组里第一个值应该放在data1&#xff0c;第二个放在data2&#xff0c;第三个…

LCHub:微软Power Apps成为保险行业最受欢迎低代码平台

全球领先的保险行业软件服务商Adacta发布了《保险行业低代码应用情况》报告,深度揭示了保险领域对低代码的应用、市场增长、发展趋势等。 该报告对来自德国、奥地利、瑞士、法国、英国、比利时、荷兰和卢森堡等国家的100名保险行业的高管进行了深度调查。(发送“保险低代码”…

社科院杜兰大学金融管理硕士项目——不要停止奔跑,前方更值得期待

不要停止奔跑&#xff0c;不要回顾来路&#xff0c;来路无可眷恋&#xff0c;唯有前方值得期待。——《马男波杰克》。这段话很适用在职的我们&#xff0c;当我们在职场经过打磨&#xff0c;我们被磨平了棱角&#xff0c;被磨掉了脾气&#xff0c;但我们依然相信前方会更值得我…

安装和部署elasticsearch

文章目录 一、安装elasticsearch1.1 部署单点elasticsearch1.1.1 创建网络1.1.2 安装镜像1.1.3 部署1.1.4 测试 1.2 部署kibana1.2.1 安装镜像1.2.2 部署1.2.3 测试1.2.4 DevTools工具 1.3 安装IK分词器1.3.1 安装ik插件1.3.2 查找数据卷目录1.3.3 上传至容器1.3.4 测试 一、安…

腾讯优图入选人工智能顶级会议AAAI论文--10篇

人工智能领域的国际顶级会议AAAI 2020将于2月7日-2月12日在美国纽约举办。近年来随着人工智能的兴起&#xff0c;AAAI每年举办的学术会议也变得越来越火热&#xff0c;每年都吸引了大量来自学术界、产业界的研究员、开发者投稿、参会。 以AAAI2019为例&#xff0c;论文提交数量…

工单管理系统的好处

工单管理系统是一款能够实现业务流程管理&#xff0c;工作任务管理&#xff0c;服务项目管理的工具。该系统能够帮助企业提高客户服务质量、加快企业服务响应速度、降低企业运营成本。 工单管理系统能通过制定计划和控制流程来减少客户投诉&#xff0c;提高客户满意度。可以说…

为什么安全从业者应该了解业务

不久之前&#xff0c;网络安全还被视为独立于企业其他部分的事物。但在过去的十年里&#xff0c;它终于得到了当之无愧、渴望已久的认可和关注。 越来越多的公司聘请首席信息安全官来帮助制定整体业务战略&#xff0c;使安全成为公司董事会的首要任务。 最后&#xff0c;首席…

k8s允许master节点参与调度的设置方法

默认情况下&#xff0c;master节点是不参与调度的&#xff0c;且在master节点上有一个污点NoSchedule&#xff08;表示k8s将不会将Pod调度到具有该污点的Node上&#xff09;&#xff0c;有关污点章节可参考https://www.cnblogs.com/panw/p/16343392.html 如果想让master节点参与…

云原生可观测性平台deepflow部署

deepflow是什么 DeepFlow 是云杉网络 (opens new window)开源的一款高度自动化的可观测性平台&#xff0c;是为云原生应用开发者建设可观测性能力而量身打造的全栈、全链路、高性能数据引擎。DeepFlow 使用 eBPF、WASM、OpenTelemetry 等新技术&#xff0c;创新的实现了 AutoT…

界面控件DevExpress WinForm的垂直网格组件,让数据展示更灵活!(一)

DevExpress WinForm Vertical Grid&#xff08;垂直网格&#xff09;组件设计用于提供UI灵活性&#xff0c;它允许显示数据集中的单个行&#xff0c;或在其90度反向网格容器中显示多个数据集行。此外&#xff0c;开发者还可以将其用作属性网格&#xff0c;就像在Visual Studio …

逻辑回归与梯度下降法

逻辑回归&#xff1a;是用来进行分类的。 逻辑回归的线性预测输出可以写成&#xff1a;y^wTxb 引入Sigmoid函数&#xff0c;让输出限定在[0,1]之间&#xff0c;y^Sigmoid(wTxb)σ(wTxb) 单个样本损失函数&#xff1a;L(y^,y)−(ylog y^(1−y)log (1−y^)) 对逻辑回归进行梯度…

【pytorch系列】优化器optimizer的使用与常用优化器

1 optimizer类实例 1.1 介绍 属性 【default】该实例的类型为 dict&#xff0c;元素为初始化时候的学习率等&#xff0c;具体的keys为 [lr,momentum, dampening, weight_decay, nesterov]【state】保存参数更新过程中的一些中间变量&#xff0c;如momentum的缓存&#xff08…

网络安全-kali配置ssh服务+敏感文件泄+dirsearch脚本

网络安全-kali配置ssh服务敏感文件泄dirsearch脚本 seccure shell 就是加密的telnet 远程用的 service ssh start 开启ssh服务metstat -tpan |gerp 22 监听这个端口是否开启 可以看到本地的22端口这个文件是/etc/ssh/sshd_config 输入 set number 找到第57行 把这个前面的#注…

Smartbi电子表格软件产品的由来

思迈特软件&#xff08;以下简称“Smartbi”&#xff09;自2022年11月以来发布的「Smartbi Spreadsheet 电子表格软件」产品&#xff08;以下简称“电子表格软件”或"Spreadsheet"&#xff09;。 这个软件就是报表工具&#xff0c;那为什么不叫 Report&#xff0c;而…

java 自习室找座系统 mysql

自习室座位管理系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JSP&#xff0c;数据库使用Mysql数据库。完成以下基本功能&#xff1a; 功能&#xff1a; 1界面&#xff08;管理员登录、学生登录&#xff09; 2管理员更新自习室剩余座位情况 3学生查询自习…

误差与精度

整理自《误差理论与数据处理》——合肥工业大学 机械专业用于教授学生误差与精度概念的课程叫做《公差与测量》&#xff0c;而公差的本质含义就是误差&#xff0c;所以这门课其本质教授的还是误差理论。当时在学校并没有好好学习这么课程&#xff0c;工作之后才发现这个课程的重…

云原生时代,不可不知的基础设施即代码(IaC)

&#x1f4a1; IaC 是 DevOps 的必要支撑。 近日&#xff0c;在极狐TechTalk 直播上&#xff0c;极狐(GitLab) 高级网站可靠性工程师SRE 戚加欣&#xff0c;从 SRE 视角出发&#xff0c;与大家分享了 IaC 基础知识、工具和方法和基于极狐GitLab 的具体实践经验。 以下内容整理自…

路由反射器、联邦

路由反射器 RFC4456 IBGP水平分割:路由器无法将从IBGP对等体学习到的路由信息传递给其他IBGP对等体。 IBGP水平分割解决了AS内部环路的问题&#xff0c;但是产生了新的问题----BGP路由在AS内部只能传递一跳&#xff0c;会造成lBGP路由无法被正常传递&#xff0c;造成通讯障碍。…