> 文章列表 > 【k8s】WordPress(PHP+nginx+mysql)迁移到k8s【待完善】

【k8s】WordPress(PHP+nginx+mysql)迁移到k8s【待完善】

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

一、迁移思路:


二、前期准备

1、下载wordpress源码

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

三、wordpress迁移至k8s

1、Dockerfile

FROM centos:7
RUN rpm -Uvh https://miriror.webtatic.com/yum/el7/epel-release.rpm && \\curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirirors.aliyun.com/repo/CentOS-7.repo && \\rpm -Uvh https://miriror.webtatic.com/yum/el7/webtatic-release.rpm && \\yum install nginx php71w-fpm php71w-xs1 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 /usr/share/nginx/html
#拷贝代码
COPY . /usr/share/nginx/html#修改权限
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 /usr/share/nginx/html /var/lib/nginx
#暴露容器端口
EXPOSE 80COPY entrypoint.sh  /
ENTRYPOINT ["bash","/entrypoint.sh"]

2、启动脚本 entrypoint.sh

#运行Wordpress时,可以通过环境变量替换连接数据库相关信息。
WordPress_File=/usr/share/nginx/html/wp-config.phpsed -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 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: Noneselector:app: mysqlports:- port: 3306targetPort: 3306

4.2 02-mysql-statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: "mysql-svc"replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: dbimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: oldxu3957- name: MYSQL_DATABASEvalue: wordpressports:- containerPort: 3306volumeMounts:- name: datamountPath: /var/lib/mysql/volumeClaimTemplates:- metadata:name: dataspec: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)

apiVersion: v1
kind: Secret
metadata:name: wordpress-secret
stringData:DB_NAME: wordpressDB_USER: rootDB_PASSWORD: oldxu3957DB_HOST: mysql-0.mysql-svc.default.svc.cluster.local 

4.4 04-wordpress-pvc.yaml (准备PVC共享图片)

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

5、wordpress服务

05-wordpress-dp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: wordpress-dp
spec:replicas: 3selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpressimage: harbor.oldxu.net/base/wordpress:v6.0ports:- containerPort: 80envFrom:- secretRef:name: wordpress-secretvolumeMounts:- name: configmountPath: /etc/nginx/conf.d/- name: imagesmountPath: /usr/share/nginx/html/wp-content/uploads  volumes:- name: configconfigMap:name: nginxconfs- name: imagespersistenVolumeClaim:claimName: wordpress-data        

06-wordpress-svc.yaml

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

07-wordpress-ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: wordpress-ingress
spec:ingressClassName: "nginx"rules:- host: wordpress.oldxu.nethttp:paths:- path: /pathType: Prefixbackend:service:name: wordpress-svcport:number: 80

旧版本ingress:

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