业务上云--从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.xdnf.cn/news/1423895.html

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

相关文章

二.PVE创建 Ubuntu CT

二.PVE创建 Ubuntu CT 浏览器地址栏输入访问pve系统的网址,利用web端进行管理。注意进入pve系统时默认显示的有访问地址。本步骤的web访问地址为:https://192.168.1.102:8006。 出现该页面,选择继续前往。 进入管理页面后,输入PVE系统的用户名和密码,登录该系统。 登…

邮箱API接口支持哪些服务?如何配置测试?

邮箱API接口的性能如何优化?如何选择和使用API接口? 在数字化日益深入的今天,邮箱API接口作为连接各种应用程序与电子邮件服务的桥梁,其重要性不言而喻。那么,究竟邮箱API接口支持哪些服务呢?接下来&#…

测试相关内容

文档测试 文档质量的好坏直接影响程序质量的好坏这一部分的内容会少一些,主要是针对历年软考中出现的知识点来进行一个讲解的操作,有些内容不会讲解的太过于深入的一般以上午题的形式出现的多一些,不太会以下午题的形式出现 软件文档的分类 …

必背!!2024年软考中级——网络工程师考前冲刺几页纸

距离软考考试的时间越来越近了,趁着这两周赶紧准备起来 今天给大家整理了——软考网络工程师考前冲刺几页纸,都是核心重点,有PDF版,可打印下来,每天背一点。 计算机总线分类 ①总线的分类:数据总线、地址总…

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法,采用不同的存储方式将对程序的效率产生…

Axure “情形”的使用

这篇笔记的主要内容是如果在Axure中使用“情形”,对应在我们的研发中就是“判断条件”的使用 Axure情形的使用Axure添加caseAxure的if ,sele if 条件判断 条件判断不管是在研发代码中还是实际生活中,无处不在,只是表现形式不同罢…

GeoServer /geoserver/wms RCE漏洞复现(CVE-2022-24816)

0x01 产品简介 GeoServer是一款开源的地理数据服务器软件,主要用于发布、共享和处理各种地理空间数据。它支持众多的地图和空间数据标准,能够使各种设备通过网络来浏览和使用这些地理信息数据。 0x02 漏洞概述 GeoServer /geoserver/wms 接口处存在远程代码执行漏洞,未经…

网络故障快速定位的秘诀 - 基于 AnaTraf 全流量回溯分析

网络故障是每个 IT 从业者都深有体会的头疼问题。当网络出现异常时,如何快速定位故障原因,恢复网络正常运行,是考验运维能力的关键所在。借助 AnaTraf 网络流量分析仪的全流量回溯分析功能,您可以轻松应对各种复杂的网络问题,实现快速故障定位。 1. 网络故障分析的痛点 网络故…

Redission分布式锁 - 抢课系统

使用Redission分布式锁与Kafka消息队列,实现学生抢课系统(高并发秒杀场景)。 目录 一、思路1.为频繁访问的信息设置缓存(1)登陆(2)课程任务信息(3)用户抢课记录 2.消息队…

【Kubenetes】微服务治理:服务网格Istio安装搭建体验

文章目录 ServiceMesh介绍Istio解决方案安装Istio第一步 下载istio第二步 安装istio环境第三部 安装istio应用第四部 暴露到外部流量然后再下一步 把dashboard弄好 ServiceMesh介绍 扯淡环节 什么是服务网格?–服务间通信,可扩展性和灵活性服务网格的工作原理 --…

【js刷题:数据结构链表之设计链表】

设计链表 一、题目二、题解 一、题目 二、题解 // 定义节点类,每个节点都有一个值和一个指向下一个节点的引用 class LinkNode{constructor(val,next){ // 构造函数,接收节点值和下一个节点的引用this.valval // 节点的值this.nextnext // 指…

接口文档编写注意事项

接口文档编写注意事项 字段方面 ①不需要的字段、逻辑中固定值的字段(可写死的字段)不提供 ②逻辑上可以合并的字段合并 例如:当一个互斥条件下,分别返回了两个字段,这个时候就可以在这个基础上将两个字段合并成一个…

Linux连接文件那点事

什么是连接文件 将一个文件和另一个文件建立联系,分为硬链接和软连接(符号连接)。 硬链接 Linux中,所有的文件都有一个inode,这个东西就是文件的ID号,硬链接的方式就是通过这个inode来产生新的文件名来建…

Stable Diffusion入门使用技巧及个人试用实例分享--生成稳定人物及姿势篇

上节我们主要讲解了SD提示词的实践篇及ControlNet常用模型篇,本节主要想给大家分享一下如何在不自己单独训练lora的情况下尽量稳定的控制生成的人物的脸及姿势。欢迎阅读。 一、如何稳定生成相同的人物(脸部) 1、瞎编名字法: d…

ICode国际青少年编程竞赛- Python-6级训练场-多重递归

ICode国际青少年编程竞赛- Python-6级训练场-多重递归 1、 def move(a, b):if a > 12:returnDev.step(a)Dev.turnRight()if b < 4:move(a, b1)else:move(a2, 1) move(2, 1)2、 def move(a, b):if a < 2:returnif b 1: Spaceship.step(2)Dev.step(a)Dev.turnRight()De…

智能AI数字人直播带货软件系统,支持所有平台直播可带货,引流私域,同城团购 带源代码包

系统概述 智能AI数字人直播带货软件系统是一款基于人工智能技术的创新产品&#xff0c;该系统集成了深度学习、自然语言处理、图像识别等多项前沿技术&#xff0c;能够模拟真实主播的行为和表情&#xff0c;实现高度智能化的直播带货体验。该系统支持所有主流直播平台&#xf…

IDEA的妙用

IDEA 安装破解 复制JetbrainsIdesCrack-4.2.jar到安装目录下 修改安装目录下的bin目录的idea64.exe.vmoptions&#xff1a; 最后一行添加&#xff1a;-javaagent:E:\develop\JetBrains\IntelliJ IDEA 2018.3.5\bin\JetbrainsIdesCrack-4.2.jar(注意&#xff1a;使用自己的路…

Vue.js 详细介绍

文章目录 一、Vue.js 简介1.1 什么是 Vue.js&#xff1f;1.2 Vue.js 的特点 二、快速上手 Vue.js2.1 安装 Vue.js使用 CDN使用 npm 或 yarn 2.2 创建一个 Vue 实例2.3 Vue.js 项目结构 三、Vue.js 核心概念3.1 数据绑定3.2 指令&#xff08;Directives&#xff09;3.3 组件&…

MATLAB车辆动力学建模 ——《控制系统现代开发技术》

引言 在上这门课之前&#xff0c;我已经用过CasADi 去做过最优化的相关实践&#xff0c;其中每一步迭代主要就是由&#xff1a;对象系统优化求解两部分组成的。这里我们重点介绍 “对象系统”如何去描述 &#xff0c;因为它是每一步迭代中重要的一环——“优化求解”会获得控制…

Linux系统中pts和tty会话删除

一、背景 一台CentOS6.7主机存在iscsi盘&#xff0c;为了正常卸载此iscsi盘&#xff0c;需要先将所有相关会话退出使用该iscsi盘。 检查发现存在多个系统用户登录的情况。 二、问题 无法使用kill -9删除linux会话&#xff0c;提示信息为“-bash: kill: (16680) - Operation not…