?一、背景
在基于kubeasz部署kubernetes高可用集群-CSDN博客文章部署的kubernetes集群上部署LNMP
1.1、Kubernetes環境
?1.2、Harbor環境
【docker基礎】使用Harbor搭建私有倉庫-docker-compose使用示例--第二周作業_harbor docker-compose-CSDN博客
Harbor環境升級:
- 上面文章中提到的harbor,在harbor.yml中域名的位置可以配置成IP地址,這樣兩臺Harbor使用IP實現互相復制、互相備份;
- 前端haproxy+keepalived反向代理兩臺Harbor機器,實現harbor高可用
- 在阿里云上申請域名解析到keepalived的VIP上,并申請免費ssl證書;
- 將ssl證書文件放到harbor所在的機器上,在harbor.yml文件中配置ssl證書;
1.3、安裝配置buildkitd
參考文章:https://www.cnblogs.com/punchlinux/p/16575328.html
buildkitd(服務端),目前支持runc和containerd作為鏡像構建環境,默認是runc,可以更換containerd。
buildctl(客戶端),負責解析Dockerfile文件、并向服務端buildkitd發出構建請求。
GitHub地址:https://github.com/moby/buildkit/releases
二、構建nginx、php-fpm鏡像
2.1、構建nginx鏡像
2.1.1、準備nginx鏡像需要的文件
2.1.2、編寫nginx鏡像的Dockerfile
FROM harbor.jnlikai.cc/library/centos:8.4 #基礎鏡像可以提前下載并上傳到自己的harbor上
MAINTAINER "JNLIKAI"
RUN rm -fr /etc/yum.repos.d/* #添加需要的repo文件
ADD Centos-8.repo /etc/yum.repos.d/
ADD epel.repo /etc/yum.repos.d/
RUN yum install -y vim wget tree make lrzsz zlib zlib-devel gcc-c++ automake pcre pcre-devel libtool openssl openssl-devel iproute net-tools iotop #安裝nginx需要的包
ADD nginx-1.26.0.tar.gz /usr/local/src/ #將nginx源碼包添加到鏡像的指定目錄
RUN cd /usr/local/src/nginx-1.26.0 && ./configure --prefix=/apps/nginx --with-http_sub_module && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/sbin/nginx && rm -fr /usr/local/src/nginx-1.26.0.tar.gz #源碼安裝nginx
RUN useradd nginx -u 2024 #創建nginx用戶
ADD nginx.conf /apps/nginx/conf/nginx.conf #將修改好的配置文件打到鏡像
RUN mkdir -p /data/nginx/html #創建數據目錄
EXPOSE 80 443 #暴露端口
CMD ["/apps/nginx/sbin/nginx","-c","/apps/nginx/conf/nginx.conf","-g","daemon off;"] #運行nginx進程
2.1.3、使用nerdctl+buildkitd打鏡像
檢查buildkitd服務是否正常運行:
使用nerdctl構建nginx鏡像,并上傳harbor
2.2、構建php鏡像
2.2.1、準備php需要的文件
2.2.2、編寫php的Dockerfile
FROM harbor.jnlikai.cc/library/centos:8.4
MAINTAINER "JNLIKAI"
RUN useradd nginx -u 2024 #創建運行php的用戶nginx
RUN rm -fr /etc/yum.repos.d/*
ADD Centos-8.repo /etc/yum.repos.d/Centos-8.repo
ADD epel.repo /etc/yum.repos.d/epel.repo
ADD RPM-GPG-KEY-EPEL-8 /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
RUN yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-8.rpm
RUN yum -y install php83-php-fpm php83-php-mysql #yum安裝php相關包ADD www.conf /etc/opt/remi/php83/php-fpm.d/www.conf #將修改后的配置文件打到鏡像里
ADD run_php.sh /usr/local/bin/run_php.sh #運行php的腳本
RUN chmod +x /usr/local/bin/run_php.sh
EXPOSE 9000
CMD ["/usr/local/bin/run_php.sh"] #運行腳本
www.conf是php的配置文件,修改的內容:
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = nginx
listen.group = nginx
run_php.sh腳本內容
2.2.3、構建php鏡像,并上傳harbor
三、使用deployment部署wordpress
3.1、編寫deployment的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: wordpress-deploymentname: wordpress-deploymentnamespace: myserver
spec:replicas: 3selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpress-nginximage: harbor.jnlikai.cc/library/nginx:v1.26.0 #使用自己構建的nginx鏡像imagePullPolicy: Alwaysports:- containerPort: 80protocol: TCPname: http- containerPort: 443protocol: TCPname: httpsvolumeMounts:- name: wordpress #掛載數據目錄mountPath: /data/www/htmlreadOnly: false- name: nginx-configmap #使用configmap掛載配置文件mountPath: /apps/nginx/conf/nginx.confsubPath: nginx.conf- name: wordpress-phpimage: harbor.jnlikai.cc/library/php-fpm:8.3.7 #使用自己構建的php鏡像imagePullPolicy: Alwaysports:- name: httpprotocol: TCPcontainerPort: 9000volumeMounts:- name: wordpress #掛載數據目錄mountPath: /data/www/htmlreadOnly: falsevolumes:- name: wordpress #定義數據卷的后臺存儲(也可以使用pvc)nfs:server: 10.49.33.147path: /data/wordpress- name: nginx-configmap #引用configmap里的定義的配置文件configMap:name: nginxitems:- key: nginx.confpath: nginx.conf
---
apiVersion: v1
kind: Service
metadata:labels:app: wordpressname: wordpress-servicenamespace: myserver
spec:type: NodePort #定義nodeport類型的serviceports:- name: httpport: 80protocol: TCPtargetPort: 80nodePort: 30080- name: httpsport: 443protocol: TCPtargetPort: 443nodePort: 31443selector:app: wordpress
數據卷寫的數nfs提供,需要在nfs-server上創建目錄/data/wordpress,并將該目錄的屬主數組改成2024(nginx的UID)
3.2、編寫配置文件的configmap
在部署調試或業務變更時,需要經常修改nginx的配置文件,所以經nginx的配置文件寫到configmap里,這樣通過修改configmap就可以達到修改配置文件的目的,不用重新打鏡像;
[root@k8s-master1 wordpress]# cat nginx-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: nginxnamespace: myserverlabels:app: nginx
data:nginx.conf: |user nginx;worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root /data/www/html;index index.php index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}location ~ \.php$ {root /data/www/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}}
3.3、創建configmap,部署wordpress-deployment
四、訪問WordPress頁面,完成安裝
4.1、使用節點的30080端口即可訪問wordpress站點,默認是安裝頁面
????????
4.2、創建數據庫
數據庫使用基于StatefulSet控制器在Kubernetes上部署MySQL一主多從-CSDN博客文章部署的數據庫集群
4.2.1、首先登陸mysql-0容器,創建wordpress數據庫
4.2.2、創建用戶,并授權
4.2.3、在安裝頁面上填寫數據庫信息
Database Host的位置填寫mysql-0的FQDN
4.2.4、完成安裝
五、其他補充
5.1、WordPress的數據目錄
wordpress的數據目錄在wordpress/wp-content/uploads,這個目錄下按時間保存站點的附件文件,可以該目錄設置持久化存儲(PV/PVC),備份附件可以備份該目錄
5.2、服務暴露
可以使用ingress、openelb等將服務暴露出去
5.3、對站點進行壓測
測試穩定性、或者結合HPA測試自動伸縮