业务上云--从Container+BuildKitd打镜像到在Kubernetes上部署LNMP

 一、背景

在基于kubeasz部署kubernetes高可用集群-CSDN博客文章部署的kubernetes集群上部署LNMP

1.1、Kubernetes环境
 1.2、Harbor环境

【docker基础】使用Harbor搭建私有仓库-docker-compose使用示例--第二周作业_harbor docker-compose-CSDN博客

Harbor环境升级:

  1. 上面文章中提到的harbor,在harbor.yml中域名的位置可以配置成IP地址,这样两台Harbor使用IP实现互相复制、互相备份;
  2. 前端haproxy+keepalived反向代理两台Harbor机器,实现harbor高可用
  3. 在阿里云上申请域名解析到keepalived的VIP上,并申请免费ssl证书;
  4. 将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测试自动伸缩

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024数学建模深圳杯B题成品论文43页word+完整可视化结果图+可执行代码

【无水印word】2024深圳杯B题成品论文43页(附带1-4小问完整py解题代码思路)https://www.jdmm.cc/file/2710664 批量工件并行切割下料优化研究 摘 要 本研究针对批量工件并行切割下料问题展开了深入的探讨与分析。通过建立数学模型和运用优化算法&…

ABAP ALSM_EXCEL_TO_INTERNAL_TABLE 导入Excel的几个问题

1、没有办法多页签 2、单元格50个字符限制,每个单元格仅读取50个字符 3、Excel单元格总不能有不可见字符换 eg 回车,换行 # 等否则读取的结果会加上引号

Stable Diffusion入门使用技巧及个人实例分享--大模型及lora篇

大家好,近期使用Stable Diffusion比较多,积累整理了一些内容,得空分享给大家。如果你近期正好在关注AI绘画领域,可以看看哦。 本文比较适合已经解决了安装问题,(没有安装的在文末领取) 在寻找合…

PyTorch进行CIFAR-10图像分类

本节将通过一个实战案例来详细介绍如何使用PyTorch进行深度学习模型的开发。我们将使用CIFAR-10图像数据集来训练一个卷积神经网络。 神经网络训练的一般步骤如图5-3所示。 (1)加载数据集,并做预处理。 (2)预处理后的…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第22课-烟花插件的制作

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第22课-烟花插件的制作 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

UEC++学习(十五)创建、查找、加入会话

创建会话 基于上篇配置steam在线子系统之后&#xff0c;在Character.h中声明一个会话创建完成时的委托以及回调函数。 #include "Interfaces/OnlineSessionInterface.h"public://指向在线会话界面的指针,将会话接口存储在里面TSharedPtr<class IOnlineSession, ES…

锚点组件--支持点击、滚动高亮锚点

实现一个锚点组件&#xff0c;页面滚动时高亮当前位置锚点、点击锚点时跳转到指定冒点位置&#xff0c;同时选中锚点也高亮 效果图 父组件 import ./index.less; import Anchor from ./Anchor; import Content from ./Content;export default function index() {return (<…

5分钟科普:App开发与广告联盟变现法则

在移动互联网的时代&#xff0c;应用程序&#xff08;App&#xff09;已经成为人们生活的一部分。对于开发者来说&#xff0c;如何通过自己的应用获取收益&#xff0c;是他们需要解决的重要问题。广告联盟作为一种常见的广告变现方式&#xff0c;为开发者提供了一种可能。 广告…

Google I/O 2024:有关AI的一切已公布|TodayAI

2024年谷歌I/O大会圆满落幕&#xff0c;谷歌在会上发布了一系列更新&#xff0c;涵盖从最新的人工智能技术到Android系统的多项改进。此次大会特别关注于谷歌的Gemini人工智能模型&#xff0c;并详细介绍了这些模型如何被融入到Workspace、Chrome等多个应用程序中&#xff0c;展…

炫富神器,简单无脑粘贴复制,闷声发财,当天见收益,无上限封顶

项目主打简单、暴力、易操作、可复制&#xff0c;单人可做、不靠关系走门路、不重投资、可复制放大&#xff01; 今天给大家带来的这个项目&#xff0c;有点暴力&#xff0c;请先做好心理准备&#xff01;谨慎观看&#xff01;&#xff01; 这个项目原理是利用软件生成炫富视频…

ADCIRC+Python深度融合:台风风暴潮模拟、温带风暴潮模拟、天文潮模拟、风暴潮漫滩模拟;ADCIRC模式前处理和后处理等

目录 专题一 ADCIRC背景与原理 专题二 ADCIRC的编译安装 专题三 ADCIRC模式前处理 专题四 ADCIRC案例分析 专题五 Python基础与科学计算 专题六 ADCIRC模式后处理 更多应用 ADCIRC是新一代海洋水动力计算模型&#xff0c;它采用了非结构三角形网格广义波动连续方程的设计…