二、Kubernetes(k8s)中部署项目wordpress(php博客项目,数据库mysql)

前期准备

1、关机顺序

2、开机顺序
(1)、k8s-ha1、k8s-ha2
(2)、master01、master02、master03
(3)、node01、node02

一、集群服务对外提供访问,需要通过Ingress代理发布域名

mast01上传 ingress-nginx.yaml
node01、node02 上传 ingress-nginx.tar 、kube-webhook-certgen.tar

#导入到镜像

for img in ingress-nginx.tar kube-webhook-certgen.tar
> do
> docker load -i $img
> done
#master01编辑新建文件ingress-nginx.yaml
vim ingress-nginx.yaml
#打开行号
:set nu 
#搜索Service
/Service
#按小写n快速查找下一个

#将文件中的Servcie类型LoadBalancerg改为NodePort
   type: NodePort

#将ingress-nginx-controller的Pod开启hostNetwork与节点共享网络名称空间,则Pod监听节点的80和443端口
     spec:
       hostNetwork: true   #手动增加
       containers:
#部署
kubectl apply -f ingress-nginx.yaml
#获取名称空间
kubectl get ns
kubectl get pod -n ingress-nginx

#进入ingress
kubectl exec -it ingress-nginx-controller-55d7ffbbf8-8vl8n -n ingress-nginx -- /bin/bash
#查看ingress下的nginx目录
ls /etc/nginx
cat /etc/nginx/nginx.conf
二、集群中容器数据持久化,NFS结合动态存储实现

新准备一台机器作为nfs服务器

#设置hostname
hostnamectl set-hostname k8s-nfs

#安装nfs服务端软件包(服务端)
yum install nfs-utils -y

#编辑文件
vim /etc/exports
内容如下:
/storageclass 192.168.30.0/24(rw,no_root_squash)

#创建目录/storageclass
mkdir /storageclass

#启动NFS
systemctl start nfs
systemctl enable nfs

#node01、node02上安装 nfs(客户端)
yum install nfs-utils -y

#node01、node02 检查是否能访问到共享目录
showmount -e 192.168.30.200


#Master01 编辑文件nfs-clients-rbac.yml(文件名自定义)
vim nfs-clients-rbac.yml
#进入粘贴模式
:set paste #按回车健
拷贝内容到该文件

#RBAC文件应用到kubectl
kubectl apply -f nfs-clients-rbac.yml

#Master01 编辑文件nfs-client-deployment.yml(文件名自定义)
vim nfs-client-deployment.yml
要改的内容如下:

	  value: 192.168.30.200        #传递NFS服务器IP地址
	- name: NFS_PATH
	  value: /storageclass       #传递NFS服务器共享路径
volumes:
	- name: nfs-client-root
	  nfs:
		server: 192.168.30.200         #后端NFS服务器IP地址
		path: /storageclass          #后端NFS服务器共享路径



nfs-client-provisioner 运行在node节点下


#Kubernetes 环境检查 master01 节点的污点(taint)信息
kubectl describe node master01 | grep -i taint

#node01、node02上传provisioner压缩文件并导入镜像
docker load -i nfs-subdir-external-provisioner.tar


#Master01部署驱动nfs-client-deployment.yml
kubectl apply -f nfs-client-deployment.yml	
kubectl get pod

#编辑storageclass.yml
vim storageclass.yml
内容如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: "false"
#应用
kubectl apply -f storageclass.yml

#查看所有可用的存储类的列表
kubectl get sc

#获取 Kubernetes 集群中所有 Pod 的详细信息
kubectl get pod -o wide
三、搭建私有镜像仓库,用于存储自己构建的项目镜像

1、准备一台机器放harbor私有仓库

#上传,安装docker 
tar -xf docker-20.10.21.tar.gz
cd docker
yum install ./*.rpm -y

#上传安装docker-compose、加权限
chmod +x docker-compose
#移动
mv docker-compose /usr/bin
#查看docker-compose版本
docker-compose --versin

#启动docker并设置开机自启
systemctl start docker
systemctl enable docker

2、harbor(私有仓储)有点大,使用xftp上传harbor包

#解压、进入harbor
tar -xf harbor-v2.5.1.tgz
cd harbor

#导入harbor镜像
docker load -i harbor.v2.5.1.tar.gz 

#复制文件,并编辑
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改host、注释https协议

#当前目录执行脚本
./install.sh

成功后它会以容易方式运行harbor(一共有9个容器在运行)
#查看容器
docker ps

浏览器访问harbor
192.168.30.20
admin
12345

本机指定Harbor仓库地址
vim /etc/docker/daemon.json
{							
  "insecure-registries": ["http://192.168.0.25"]			
}
重启docker让配置文件生效
systemctl restart docker

#此时看容器数量只有6个,解决方法(先全部关闭容器,再重启一下就ok了)
docker ps 

#harbor目录先关闭全部容器
docker-compose down
docker-compose up -d #后台运行docker容器,否则占用前台终端
四、部署项目所需的数据库
#master01新建目录
mkdir wordpress

#master01创建名称空间
kubectl create ns wordpress

#查询名称空间
kubectl get ns

#进入wordpress目录,并新建编辑mysql.yml文件
cd wordpress
vim mysql.yml
admin123


#node01,node02 拉取mysql镜像
docker pull mysql:5.7

#创建Pod
kubectl create -f mysql.yml

#查看Pod
kubectl get pod -n wordpress

#进入mysql容器,登录mysql
kubectl exec -it mysql-0 -n wordpress -- /bin/bash
mysql -uroot -padmin123
#验证(显示所有数据库)
show databases;
#数据库主机验证命令
ls /storageclass
ls /storageclass/wordpress-data-mysql-0-pvc-e7a7a759-770b-4940-a58d-6169539a0854
出现如下内容:
wordpress-data-mysql-0-pvc-e7a7a759-770b-4940-a58d-6169539a0854
五、项目运行在什么环境中,需要将运行环境打包到镜像中, 并配置好项目连接数据库的信息。

1、下载wordpress项目,配置数据库连接

#nfs服务器主机命令
wget https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gz

#nfs服务器主机解压
tar -xf wordpress-6.0-zh_CN.tar.gz

#nfs服务器主机
cd wordpress
#nfs主机改配置文件名称
cp wp-config-sample.php wp-config.php


#master01查看数据库地址
kubectl get pod -n wordpress -o wide

#测试重启mysql pod,mysql自动重启了,容器组ip改变了
kubectl delete pod mysql-0 -n wordpress


#查看其中dns,随便拷贝一个dns地址出来(例如:172.16.235.5)
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o -wide

#安装dig命令(dns解析工具)工具包
yum install bind-utils -y

#dns解析mysql
dig @172.16.235.5 mysql-svc.wordpress.svc.cluster.local
dig @172.16.235.5 mysql-svc.wordpress.svc.cluster.local +short

#nfs主机编辑配置文件,数据库地址不能配置IP,因为一旦发生重启IP地址会变动
#地址配置:mysql-svc.wordpress.svc.cluster.local
vim wp-config.php

#wordpress身份认证的信息通过该地址获取:https://api.wordpress.org/secret-key/1.1/salt/

#nfs主机拉取centos镜像
docker pull centos:7.9.2009

2、配置nginx镜像仓储

#nfs主机wordpress目录下新建编辑nginx.repo文件
https://nginx.org/en/linux_packages.html#RHEL
内容如下: 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

3、通过Dockerfile来构建wordpress镜像
内容看文件:dockerfile

#构建镜像
docker build  -t wordpress:v6.0 .

4、harbor 后台新建仓库 wordpress

地址:http://192.168.30.200/
admin
12345

5、推送项目镜像到harbor、并配置集群的镜像仓储

#镜像打标签
docker tag wordpress:v6.0 192.168.30.200/wordpress/wordpress:v6.0

#登录镜像仓库,要输入用户名+密码
docker login 192.168.30.200

#推送镜像到仓库
docker push 192.168.30.200/wordpress/wordpress:v6.0


在集群节点指定Harbor仓库地址
vim /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["http://192.168.30.200"]
}
#重启docker生效
systemctl restart docker
六、部署项目到k8s
#master01新建编辑部署文件 wordpress.yml
vim wordpress.yml


#应用到集群
kubectl apply -f wordpress.yml

#查看svc
kubectl get svc -n wordpress

#查看ingress,查看运行的IP地址(192.168.30.14)
kubectl get pod -n ingress-nginx -o wide

#修改本机电脑host
#指定域名
192.168.30.14 web.wordpress.com


#nfs服务器查看nginx日志
ls /storageclass/
ls /storageclass/wordpress-ngx-log-pvc-5ed5cdbf-a07e-4c37-9c06-db5b247a4115
tail /storageclass/wordpress-ngx-log-pvc-5ed5cdbf-a07e-4c37-9c06-db5b247a4115/access.log

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【知识库系统】JWT实现前后端分离验证

本文会先从理论和实践两部分讲述如何去理解和实现通过JWT进行身份认证。 一、理论 1. SpringSecurity 默认的认证是需要通过 UsernamePasswordAuthenticationFilter 进行认证的,该过滤器认证前,会到 SecurityContextHolder 中寻找是否有符合的 Authent…

Issue 2046:Missing array size check in NewFixedArray

文章目录 环境搭建漏洞分析漏洞触发 漏洞利用总结参考 环境搭建 sudo apt install pythongit reset --hard 64cadfcf4a56c0b3b9d3b5cc00905483850d6559 export DEPOT_TOOLS_UPDATE0 gclient sync -D// debug version tools/dev/v8gen.py x64.debug ninja -C out.gn/x64.debug/…

java数据结构与算法刷题-----LeetCode135. 分发糖果

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 左右遍历2. 进阶:常数空间遍历,升序降…

Visual Studio - 添加快捷键图标

Visual Studio - 添加快捷键图标 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize2. Toolbars3. Commands -> Debug4. Add Command...References 1. Text Editor Toolbar Options -> Add or Remove Buttons -> Customize 2. Toolbars B…

并发编程之synchronized的详细解析

4.2 synchronized 解决方案 应用之互斥 为了避免临界区的竞态条件发生,有多种手段可以达到目的。 阻塞式的解决方案:synchronized,Lock 非阻塞式的解决方案:原子变量 本次课使用阻塞式的解决方案:synchronized&am…

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审

长安链智能合约标准协议 在智能合约编写过程中,不同的产品及开发人员对业务理解和编程习惯不同,即使同一业务所编写的合约在具体实现上也可能有很大差异,在运维或业务对接中面临较大的学习和理解成本,现有公链合约协议规范又不能完…

C++:类和对象(上篇)

目录: 一:面向对象和过程的介绍 二:类的引入 三:类的定义 四:类的访问限定符以及封装 五:类的作用域 六:类的实例化 七:类对象大小的计算 八:类成员函数的this指…

C语言经典算法-7

文章目录 其他经典例题跳转链接36.排序法 - 改良的选择排序37.快速排序法(一)38.快速排序法(二)39.快速排序法(三)40.合并排序法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三…

JJJ:改善ubuntu网速慢的方法

Ubuntu 系统默认的软件下载源由于服务器的原因, 在国内的下载速度往往比较慢,这时我 们可以将 Ubuntu 系统的软件下载源更改为国内软件源,譬如阿里源、中科大源、清华源等等, 下载速度相比 Ubuntu 官方软件源会快很多!…

Linux实践 - 命令行解释器 简易版

~~~~ 前言解决的问题为什么shell要以子进程的方式执行我们的命令?为什么直接使用程序名ls,而不是路径/usr/bin/ls? 头文件包含命令行提示符接受用户命令行输入解析用户的输入内建命令&&特殊处理ls 时目录等文件不带高亮颜色cd时目录不…

electron-builder 打包问题,下载慢解决方案

目录 问题说明设置下载源 ?解决方案思路下载Electron下载winCodeSign下载nsis下载nsis-resources 总结 问题说明 项目使用了Electron,在第一次打包时会遇见下载慢,导致打包进度几乎停滞不前,甚至可能直接报错 其实这是因为Electr…

【SpringBoot3+Mybatis】框架快速搭建

文章目录 GitHub 项目一、依赖二、 配置文件三、启动类四、SpringBoot3兼容Druid报错五、工具类5.1 结果封装类5.2 解决枚举类5.3 MD5加密工具类 GitHub 项目 springboot-part——springboot-integrate-07 Mybatis-plus版完整CRUD项目文档记录: 【SpringBoot3Myba…

【Python循环6/6】循环的综合运用

目录 回顾 for循环遍历列表 for循环进行累加/累乘的计算 复杂的条件判断 嵌套 嵌套循环 练习 遍历整数列表 总结 回顾 在之前的博文中,我们学习了for计数循环;while条件循环;以及跳出循环的两种方法break,continu…

CMU 10-414/714: Deep Learning Systems --hw3

实现功能 在ndarray.py文件中完成一些python array操作 我们实现的NDArray底层存储就是一个一维向量,只不过会有一些额外的属性(如shape、strides)来表明这个flat array在维度上的分布。底层运算(如加法、矩阵乘法)都…

幻兽帕鲁游戏搭建(docker)

系列文章目录 第一章: 幻兽帕陆游戏搭建 文章目录 系列文章目录前言一、镜像安装1.创建游戏目录2.拉取镜像3.下载配置文件4.启动游戏 二、自定义配置总结 前言 这段时间一直在写论文还有找工作,也没学啥新技术,所以博客也很长时间没写了&am…

【滑动窗口、矩阵】算法例题

目录 三、滑动窗口 30. 长度最小的子数组 ② 31. 无重复字符的最长子串 ② 32. 串联所有单词的子串 ③ 33. 最小覆盖子串 ③ 四、矩阵 34. 有效的数独 ② 35. 螺旋矩阵 ② 36. 旋转图像 ② 37. 矩阵置零 ② 38. 生命游戏 ② 三、滑动窗口 30. 长度最小的子数组 ② 给…

高效备考2025年AMC8竞赛:吃透2000-2024年600道真题(免费送题)

我们继续来随机看五道AMC8的真题和解析,根据实践经验,对于想了解或者加AMC8美国数学竞赛的考生来说,吃透AMC8历年真题是备考更加科学、有效的方法之一。 即使不参加AMC8竞赛,吃透了历年真题600道和背后的知识体系,那么…

Qt笔记 mainwindow

mainwindow是用来做应用界面的&#xff0c;有菜单栏&#xff0c;工具栏&#xff0c;浮动窗口,中心部件以及状态栏这几个部分组成。 举个例子&#xff1a; 1.菜单栏: #include <QMenuBar>QMenuBar *menubar new QMenuBar(this); setMenuBar(menubar);//设置到当前窗口 …

31-Java前端控制器模式(Front Controller Pattern)

Java前端控制器模式 实现范例 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用来提供一个集中的请求处理机制&#xff0c;所有的请求都将由一个单一的处理程序处理该处理程序可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给…

AI系统性学习05—向量数据库

文章目录 1、Chroma向量数据库1.1 安装Chroma1.2 初始化Chroma客户端1.3 创建一个合集1.4 添加数据1.5 查询数据1.6 持久化数据1.7 集合操作1.7.1 创建集合1.7.2 获取集合1.7.3 删除集合1.7.4 其他操作1.8 向集合添加数据1.9 查询集合数据1.10 更新集合数据1.11 删除集合数据1.…