二、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

#导入到镜像

bash 复制代码
for img in ingress-nginx.tar kube-webhook-certgen.tar
> do
> docker load -i $img
> done
bash 复制代码
#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:
bash 复制代码
#部署
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服务器

bash 复制代码
#设置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私有仓库

bash 复制代码
#上传,安装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包

bash 复制代码
#解压、进入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容器,否则占用前台终端
四、部署项目所需的数据库
bash 复制代码
#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项目,配置数据库连接

bash 复制代码
#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镜像仓储

bash 复制代码
#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

bash 复制代码
#构建镜像
docker build  -t wordpress:v6.0 .

4、harbor 后台新建仓库 wordpress

bash 复制代码
地址:http://192.168.30.200/
admin
12345

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

bash 复制代码
#镜像打标签
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
bash 复制代码
#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
相关推荐
guojl2 小时前
Ribbon原理和源码分析
spring cloud·微服务
掘金-我是哪吒4 小时前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
掘金-我是哪吒4 小时前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
SuperherRo9 小时前
WEB攻防-文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒
php·文件包含·伪协议·lfi·无文件·黑白盒·rfi
Code季风17 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
光军oi18 小时前
java微服务(Springboot篇)——————IDEA搭建第一个Springboot入门项目
java·spring boot·微服务
木鱼时刻18 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
用户Taobaoapi201419 小时前
Taobao agent USA丨美国淘宝代购1688代采集运系统搭建指南
数据挖掘·php
蓝色记忆19 小时前
Classmap 如何兼容旧代码
php
guojl19 小时前
RestTemplate使用手册
spring cloud·微服务