一 、部署流程制作服务镜像1.1 准备合适的基础镜像1.2 准备代码相关文件1.3 通过dockerfile构建镜像制作kubernets 服务器并完成调度2.1 确定服务的运行模式 内部还是对外提供服务2.2 确定服务所使用的控制器2.3 服务是否需要后端存储pvc2.4 服务是否需要serviceIngress等二 、 下载代码1 . 下载wordpress代码123[roottestserver01 ~]# wget --no-check-certificate https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gz[roottestserver01 ~]# tar xf wordpress-6.0-zh_CN.tar.gz[roottestserver01 ~]# cd wordpress准备wp-config.php文件修改数据库链接信息使用变量后期进行替换、以及Authentication的key12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697[roottestserver01 wordpress]#cp wp-config-sample.php wp-config.php[roottestserver01 wordpress]#vim wp-config.php?php/*** The base configuration for WordPress** The wp-config.php creation script uses this file during the installation.* You dont have to use the web site, you cancopythis file towp-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 collatetype. Dont 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-keyservice}.** 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,y:{)hlVEfEpR4V}()^]Ydb|Y8yY-;|hemOR|VA/5MUP;h7EyR*FVYO9a?Rq);define(SECURE_AUTH_KEY,^acJ;I/{:M|FM~UuxNN)yU~e8/hMee _cDo/s*twtrdYxIp~p$|d0[dazi?} A);define(LOGGED_IN_KEY,V_13Sds?)-x6457G0EH/z7^Vpj/*V,.ekFq}N],[-IwVLwvU{P{]je7);define(NONCE_KEY,3Ie XQ]ufX%Ae1r:Sv{,Qd.kSckouY8WN:9~fn^DKd5-(/4)WWp1pwC0a Uv);define(AUTH_SALT,#3QONR)9CXQuoY|*:q9~TfN?H|k]WU:j^)3F A1B.%dq3z;:mfW.zS$Mh);define(SECURE_AUTH_SALT,VSrV([c]]/?_,/2|8r6}t|Pz0|2Hovb{%.O*-)tk36_9X WE{ Cl 7vHJ1%);define(LOGGED_IN_SALT,OmqUGc7W,Zw:FKvIIhex:B#7JxO|FQ!ABvjwg,!W3gw}u^I,8G];3ePj[G);define(NONCE_SALT,Y7eEkx7qggp7obhs0oge/j)(wn5GiRD9bJ[4*A*?#2NsBM:dpmo*3Ix:oi);/**#-*//*** 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 thestop editingline. *//* Thats 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;三、 Dockerfile制作镜像过程中yum安装nginx、php比较慢可以提前下载好rpm包1234[roottestserver01 ~]#rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm[roottestserver01 ~]#yum install --downloadonly --downloaddir./download 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#如果还却依赖包执行下条命令[roottestserver01 ~]# yum install --downloadonly --downloaddir./download gcc gcc-c make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients postgresql-devel libxslt-devel libmcrypt libmcrypt-devel2 . 编写Dockerfile1234567891011121314151617181920212223[roottestserver01 wordpress]#vim DockerfileFROM docker.m.daocloud.io/centos:7ENV Web_Dir/usr/share/nginx/htmlRUN mkdir /downloadCOPY./download/*.rpm /download/RUN rpm-ivh--nodeps--force/download/*.rpmRUNrm-rf${Web_Dir} /download/COPY. ${Web_Dir}RUN useradd-Mwww \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-Rwww.www ${Web_Dir} /var/lib/nginx/EXPOSE 80COPY./entrypoint.sh /entrypoint.shRUN chmod x /entrypoint.shENTRYPOINT [bash,-c,/entrypoint.sh]3 准备启动脚本12345678910111213[roottestserver01 wordpress ]# vim entrypoint.sh#1.替换变量Wordpress_File/usr/share/nginx/html/wp-config.phpsed-is/{DB_NAME}/${DB_NAME:-wordpress}/g ${Wordpress_File}sed-is/{DB_USER}/${DB_USER:-wordpress}/g ${Wordpress_File}sed-is/{DB_PASSWORD}/${DB_PASSWORD:-wordpress}/g ${Wordpress_File}sed-is/{DB_HOST}/${DB_HOST:-localhost}/g ${Wordpress_File}#2. 启动nginx phpphp-fpm \nginx-gdaemon off;构建镜像 并推送至私有仓库12[roottestserver01 wordpress ]# docker build -t harbor.xxxx.com/base/wordpress:v6.0 -f Dockerfile[roottestserver01 wordpress ]# docker push harbor.xxxx.com/base/wordpress:v6.0四 、 运行数据库服务集群内mysql1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374[rootmaster01 wordpress]# cat 01-mysql.yaml###headlessapiVersion: v1kind: Servicemetadata:name: mysql-svcspec:clusterIP: Noneselector:app: mysqlports:- port: 3306targetPort: 3306---### statefulsetapiVersion: apps/v1kind: StatefulSetmetadata:name: mysqlspec:serviceName: mysql-svcreplicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:nodeName: node01.xxxx.comcontainers:- name: dbimage: harbor.xxxx.com/base/mysql:5.7imagePullPolicy: AlwayssecurityContext:privileged: trueresources:requests:cpu: 1memory: 2Gilimits:cpu: 2memory: 4Gienv:- name: MYSQL_ROOT_PASSWORDvalue: 12345678- name: MYSQL_DATABASEvalue: wordpressports:- containerPort: 3306volumeMounts:- name: datamountPath: /var/lib/mysql- name: mysqlconfmountPath: /etc/my.cnfsubPath: my.cnfvolumes:- name: mysqlconfconfigMap:name: mysql-configvolumeClaimTemplates:- metadata:name: dataspec:storageClassName:nfs-provisioner-storageaccessModes:-ReadWriteManyresources:requests:storage:20Gi1234567891011121314151617[rootmaster01 wordpress]# cat mysql_conf.yamlapiVersion: v1kind: ConfigMapmetadata:name: mysql-configdata:my.cnf: |-[mysqld]max_connections 100key_buffer_size 32Mmax_allowed_packet 16Mthread_stack 192Ksort_buffer_size 256Kread_buffer_size 256Kread_rnd_buffer_size 256Kmyisam_sort_buffer_size 64Minnodb_buffer_pool_size 128M集群外部mysql准备外部mysql123456789101112131415161718192021[rootharbor002 wordpress]# docker run -p3306:3306 -e MYSQL_ROOT_PASSWORDoldxu3957 harbor.xxxx.com/base/mysql:5.7[rootmaster01 wordpress]# vim 06-external-mysql.yamlapiVersion: v1kind: Servicemetadata:name: mysql-externalspec:ports:- port: 3306targetPort: 3306clusterIP: None#表示这是一个 headless service直接通过 Endpoint 连接---apiVersion: v1kind: Endpointsmetadata:name: mysql-external#此名字需要于service中定义的name字段一致subsets:- addresses:- ip: 192.168.20.232#定义外部mysql机器的ip地址ports:- port: 3306五、准备nginx配置文件编写nginx php配置文件12345678910111213141516171819[rootmaster01 wordpress]# cat wp.confserver {listen 80;server_name _;root /usr/share/nginx/html;location / {index index.php;}location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}把配置文件转为configmap1[rootmaster01 wordpress]# kubectl create configmap nginxconfs --from-file./wp.conf六 、准备链接数据库Secret把wordpress 连接数据库信息存储到secret1234567891011[rootmaster01 wordpress]# cat 04-wp-secret.yamlapiVersion: v1kind: Secretmetadata:name: wordpress-secretstringData:DB_NAME: wordpressDB_USER: rootDB_PASSWORD: oldxu3957# DB_HOST: mysql-0.mysql-svc.default.svc.cluster.localDB_HOST: mysql-external.default.svc.cluster.local七 、准备pvc共享图片创建pvc资源共享wordpress的upload目录12345678910111213[rootmaster01 wordpress]# cat 03-wp-pvc.yaml# pvc申请用来共享nfs图片附件apiVersion: v1kind: PersistentVolumeClaimmetadata:name: wordpress-dataspec:storageClassName:nfs-provisioner-storageaccessModes:- ReadWriteManyresources:requests:storage: 10Gi八 、部署wordpress1234567891011121314151617181920212223242526272829303132333435363738394041424344454647[rootmaster01 wordpress]# vim 02-wordpress.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: wordpress-deployspec:replicas: 1selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpressimage: harbor.ihavecar.com/base/wordpress:v6.0#imagePullPolicy: Alwaysports:- 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: imagespersistentVolumeClaim:claimName: wordpress-data---apiVersion: v1kind: Servicemetadata:name: wordpress-svcspec:selector:app: wordpressports:- port: 80targetPort: 80九 、发布wordpress12345678910111213141516171819[rootmaster01 wordpress]# cat 05-wordpress-ingress.yamlapiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: wordpress-ingressspec:ingressClassName:nginxrules:- host:wordpress.xxxx.comhttp:paths:- path: /pathType: Prefixbackend:service:name: wordpress-svcport:number: 80访问测试总结
