一、实验环境:
Master1\node1\node2还原至单节点集群配置完成
Harbor开184,还原至k8s新系统,开机
NFS还原至K8S新系统,添加4块100G SCSI硬盘
二、配置Habor仓库(使用server 184)


[root@habor] gdisk /dev/sdb(对sdb磁盘进行分区)
[root@habor] mkfs.xfs /dev/sdb1
(格式化硬盘)
[root@habor] mkdir /data(创建data目录)
[root@habor] blkid (查看磁盘ID号)
编辑开机挂载配置文件
[root@habor] vim /etc/fstab(编辑开机挂载配置文件)

[root@habor] systemctl daemon-reload(重新加载系统进程)
[root@habor] mount -a(重新加载挂载项)
[root@habor] df -hT(查看磁盘容量)
安装docker插件
[root@habor] yum install -y yum-utils device-mapper-persistent-data lvm2(安装docker插件)
安装docker阿里云数据源
[root@habor] yum config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(安装docker阿里云数据源)
安装dockers-ce
[root@habor] dnf -y install docker-ce 安装dockers-ce
[root@habor] systemctl enable --now docker(启动docker并设置开机启动)
创建docker镜像源配置文件

{
"registry-mirrors":[
"https://mirror.baidubce.com",
"https://9cpn8tt6.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://mirror-gcr.onrender.com",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
]
}
{
"insecure-registries":["192.168.7.202","harbor"]
}
[root@habor] systemctl restart docker(重启Docker)
创建Docker环境变量
[root@habor] DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}(创建Docker环境变量)
创建插件目录
[root@habor] mkdir -p $DOCKER_CONFIG/cli-plugins(创建插件目录)
安装容器编排
[root@habor] curl -SL https://github.com/docker/compose/releases/download/v2.37.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose(安装容器编排)
剪切到$DoCKER_CoNFIG/cli-plugins/docker-compose
[root@habor] mv docker-compose-1inux-x86_64 $DoCKER_CoNFIG/cli-plugins/docker-compose(剪切到$DoCKER_CoNFIG/cli-plugins/docker-compose)
给$DoCKER_cONFIG/cli-plugins/docker-compose增加执行权限
[root@habor] chmod +x $DoCKER_cONFIG/cli-plugins/docker-compose(给$DoCKER_cONFIG/cli-plugins/docker-compose增加执行权限)
查看容器编排版本
[root@habor] docker compose version(查看容器编排版本)
创建/data/ssl目录
[root@habor] mkdir /data/ssl
[root@habor] cd /data/ssl(进入ssl目录)
生成域名证书请求文件
[root@harbor ssl]# openssl req -new -509 -days 3650 -key ca.key -out ca.pem 生成创建证书的请求文件
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:harbor.cn (域名,本机设置计算机名一致)
Organizational Unit Name (eg, section) []:k8s
Common Name (eg, your name or your server's hostname) []:Meng
Email Address []:1319276778@qq.com
生成域名的证书
[root@harbor ssl]# openssl genrsa -out harbor.key 3072 生成域名的证书,harbor.k
生成域名证书的请求文件,harbor.csr
[root@harbor ssl]# openssl req -new -key harbor.key -out harbor.csr 生成域名证书的请求文件,harbor.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:harbor.cn 这里注意不要写错
Organizational Unit Name (eg, section) []:k8s
Common Name (eg, your name or your server's hostname) []:Meng
Email Address []:1319276778@qq.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 密码不要写 直接回车
An optional company name []:
[root@harbor ssl]# openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650 签发证书
Certificate request self-signature ok
subject=C=CN, ST=BJ, L=BJ, O=harbor.cn, OU=k8s, CN=Meng, emailAddress=1319276778@qq.com 成功了
[root@harbor ssl]#
加载内核
[root@harbor ssl]# modprobe br_netfilter(加载内核)
编辑docker配置文件
[root@harbor ssl]# vim /etc/sysctl.d/docker.conf(编辑docker配置文件)
net.bridge.bridge-nf-call-ip6tables = 1(开启防火墙的ipv4和ipv6的桥接功能)
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1(开启ipv4转发功能)
创建install目录
mkdir /data/install(创建install目录)
cd /data/install(进入install目录)
将harbor离线压缩包解压到data目录下

[root@harbor install]# tar zxf harbor-offline-installer-v2.7.3.tgz -C /data/(将harbor离线压缩包解压到data目录下)
[root@harbor install]#
[root@harbor install]# cd /data/harbor/(进入data目录)
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml 将harbor模板配置文件复制到原文件
编辑harbor原配置文件
[root@harbor harbor]# vim harbor.yml(编辑harbor原配置文件)

安装harbor
[root@harbor harbor]# ./install.sh (安装harbor)
[root@harbor harbor]# docker compose ps

建立映射:7.184和harbor之间的映射

拍摄快照:关机拍快照,名称:加证书的harbor

开机
[root@harbor ]# cd /data/
[root@harbor ]# cd install/harbor/
[root@harbor harbor]# docker compose restart 启动容器编排
真实机登录



三、配置nfs





gdisk /dev/sdb(对sdb磁盘进行分区)
gdisk /dev/sdc(对sdc磁盘进行分区)
gdisk /dev/sdd(对sdd磁盘进行分区)
gdisk /dev/sde(对sde磁盘进行分区)
安装raid磁盘镜像软件
dnf -y install mdadm(安装raid磁盘镜像软件)
mdadm -C /dev/md5 -ayes -l5 -n3 -x1 /dev/sd[b-e]1
md5(raid创建好的名称)
查看raid信息
cat /proc/mdstat (查看raid信息)
md5 : active raid5(raid5活动) sdd1[4] sde1[3](S) sdc1[1] sdb1[0]

查看raid5磁盘详细信息

mdadm -D /dev/md5(查看raid5磁盘详细信息)
/dev/md5:
Version : 1.2
Creation Time : Mon Jul 7 23:03:14 2025
Raid Level : raid5(raid级别raid5)
Array Size : 209579008 (199.87 GiB 214.61 GB)
Used Dev Size : 104789504 (99.94 GiB 107.30 GB)
Raid Devices : 3(raid设备三块)
Total Devices : 4(磁盘四块)

将四块磁盘raid信息追加到raid配置文件中
echo 'DEVICE /dev/sd[b-e]1' >> /etc/mdadm.conf(将四块磁盘raid信息追加到raid配置文件中)
将当前所有RAID设备的配置信息以动态方式追加到/etc/mdadm.conf配置文件中
mdadm -Ds >> /etc/mdadm.conf
#-D(显示设备详细信息)
#-s(扫描系统并输出所有以激活的RAID设备配置信息,以合适放入配置文件的格式呈现)
查看RAID配置文件
cat /etc/mdadm.conf (查看RAID配置文件)
格式化RAID的磁盘
mkfs.xfs /dev/md5(格式化RAID的磁盘)
创建data目录

mkdir /data(创建data目录)
查看设备磁盘信息
blkid (查看设备磁盘信息)
编辑开机挂载配置文件
vim /etc/fstab (编辑开机挂载配置文件)

UUID=b056af2e-e88c-43ef-a142-16319a53e680 /data xfs defaults 0 0
RAID磁盘挂载到data目录下
重新加载系统进程
systemctl daemon-reload(重新加载系统进程)

重新加载挂载项
mount -a(重新加载挂载项)
查看磁盘容量
df -hT(查看磁盘容量)
/dev/md5 xfs 200G 1.5G 199G 1% /data (看这个)
在data下创建目录

mkdir /data/v1(在data下创建v1目录)
mkdir /data/v2(在data下创建v2目录)
安装nfs
dnf -y install nfs-utils(安装nfs)
编辑nfs配置文件

/data/v1 *(rw,no_root_squash)(将data目录下v1共享给任何IP,可写可读,以匿名用户执行)
/data/v2 *(rw,no_root_squash)(将data目录下v2共享给任何IP,可写可读,以匿名用户执行)
*(任何IP)
systemctl enable --now nfs-server(启动nfs并设置开机启动)
exportfs -avr(将nfs发布出去)
showmount -e(查看nfs挂载项)
关机,拍设快照,名称:NFS

四、安装jenkins
node1、node2上安装nfs、启动nfs并设置开机启动

dnf -y install nfs-utils(安装nfs)
systemctl enable --now nfs-server(启动nfs并设置开机启动)
查看192.168.7.185挂载项
showmount -e 192.168.7.185(查看192.168.7.185挂载项)
master1上创建jenkins命名空间
[root@master1 ~]# kubectl create ns jenkins-k8s(创建jenkins命名空间)
master1上创建Jenkins目录
[root@master1 ~]# mkdir jenkins(创建Jenkins目录)
[root@master1 ~]# cd jenkins/(进入Jenkins目录)
master1上创建持久卷配置文件
[root@master1 jenkins~]# vim pv.yaml(创建持久卷配置文件)
apiVersion: v1(api版本为1)
kind: PersistentVolume(类型持久卷)
metadata:(元数据)
name: jenkins-k8s-pv(元数据名称为jenkins-k8s-pv)
spec:(资源定义对象)
capacity:(容量)
storage: 10Gi(存储10个G)
accessModes:(访问模式)
- ReadWriteMany(多节点挂载并读写操作)
nfs:
server: 192.168.7.185(服务是192.168.7.185)
path: /data/v2(nfs路径是/data/v2)
kubectl apply -f pv.yaml(应用pv的配置文件)
kubectl get pv(查看pv)
master1上编辑pvc
[root@master1 jenkins~]# vim pvc.yaml(编辑pvc)
kind: PersistentVolumeClaim(类别持久卷消费)
apiVersion: v1(api版本为1)
metadata:
name: jenkins-k8s-pvc(名称为 jenkins-k8s-pvc)
namespace: jenkins-k8s(命名空间jenkins-k8s)
spec:(资源定义对象)
resources:(资源请求)
requests:(请求)
storage: 10Gi(存储10个G)
accessModes:(访问模式)
- ReadWriteMany(多节点可以挂载并进行读写操作)
master1上查看pvc、jenkins-k8s命名空间下的pvc

[root@master1 jenkins~]# kubectl apply -f pvc.yaml(查看pvc)
[root@master1 jenkins~]# kubectl get pvc -n jenkins-k8s(查看jenkins-k8s命名空间下的pvc)
master1上在命名空间下创建sa账号,名称为jenkins-k8s

[root@master1 jenkins~]# kubectl create sa jenkins-k8s-sa -n jenkins-k8s(在命名空间下创建sa账号,名称为jenkins-k8s)
master1上对sa账号进行RABC授权
[root@master1 jenkins~]# kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa(对sa账号进行RABC授权)
node1、node2上传jenkins-agent和jenkins2.502tar镜像包

node1\node2下导入jenkins2.502镜像
[root@node1\node2 ~]# ctr -n k8s.io images import jenkins2.502.tar.gz(导入jenkins2.502镜像)
node1\node2下导入jenkins-agent-maven镜像
[root@node1\node2 ~]# ctr -n k8s.io images import jenkins-agent-maven.tar.gz(导入jenkins-agent-maven镜像)
master1的root/jenkins目录,下导入Jenkins无状服务配置文件



[root@master1 jenkins~]# kubectl apply -f jenkins-deployment.yaml (应用Jenkins无状服务配置文件)
[root@master1 jenkins~]# kubectl get pods -n jenkins-k8s(查看在jenkins-k8s下的pod信息)
[root@master1 jenkins~]# kubectl logs jenkins-5496d9c64f-kjpt9 jenkins-k8s(排查错误第二种方式,查看在命名空间下的Jenkins的pod日志信息)
[root@master1 jenkins~]# kubectl delete -f jenkins-deployment.yaml(删除Jenkins无状态服务配置文件)
在nfs下将v2目录设置组号为1000,用户ID号为1000
[root@nfs ~]# chown -R 1000.1000 /data/v2(将v2目录设置组号为1000,用户ID号为1000)
master1上应用Jenkins无状服务配置文件
[root@master1 jenkins]# kubectl apply -f jenkins-deployment.yaml (应用Jenkins无状服务配置文件)
[root@master1 jenkins]# kubectl get pods -n jenkins-k8s(查看在jenkins-k8s下的pod信息)

master1上创建Jenkins服务配置文件
[root@master1 jenkins]# vim apply -f jenkins-service.yaml (创建Jenkins服务配置文件)

[root@master1 jenkins]# kubectl apply -f jenkins-service.yaml (应用Jenkins服务配置文件)
[root@master1 jenkins]# kubectl get svc -n jenkins-k8s(查看在jenkins-k8s下的服务信息)
nfs下查看管理员密码

本机web上测试:









master1 jenkins上 安装docker插件、安装docker阿里云数据源、安装docker
[root@master1]# yum install -y yum-utils device-mapper-persistent-data lvm2(安装docker插件)
[root@master1]# yum config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(安装docker阿里云数据源)
[root@master1]# dnf -y install docker-ce(安装docker)
[root@master1]# systemctl enable --now docker(启动docker并设置开机启动)
创建docker镜像源配置文件
[root@master1]# vim /etc/docker/daemon.json(创建docker镜像源配置文件)

[root@master1]# systemctl restart docker(重启Docker)
master1、node1下编辑config.toml配置文件
[root@master1]# vim /etc/containerd/config.toml(编辑config.toml配置文件)(一个一个编辑不然容易发生错误)


master1、node1下重启containerd服务

[root@master1\node1]# systemctl restart containerd.service(重启containerd服务)
node1下导入golang

[root@node1]# docker load < golang1104.tar(导入 golang)















node1下递归地将/docker.sock更改为用户ID 1000和所属组ID 1000

[root@node1 ~]# chown -R 1000:1000 /var/run/docker.sock(递归地将/docker.sock更改为用户ID 1000 和所属组ID 1000)
node1下给/docker.sock添加777权限
[root@node1 ~]# chmod 777 /var/run/docker.sock(给/docker.sock添加777权限)
node1下给/docker添加777权限
[root@node1 ~]# chmod 777 /usr/bin/docker(给/docker添加777权限)
递归地将/docker更改为用户ID 1000和所属组ID 1000
[root@node1 ~]# chown -R 1000:1000 /usr/bin/docker(递归地将/docker更改为用户ID 1000 和所属组ID 1000)
将master1隐藏文件复制到node1的root目录下
[root@master1 ~]# scp -r /root/.kube node1:root(将master1隐藏文件复制到node1的root目录下)
node1下递归地将/.kube更改为用户ID 1000和所属组ID 1000
[root@node1 ~]# chown -R 1000:1000 /root/.kube(递归地将/.kube更改为用户ID 1000 和所属组ID 1000)
master、node1下vim /etc/hosts(编辑hosts文件)
vim /etc/hosts(编辑hosts文件)


master上将hosts文件复制剪切到192.168.7.202:/etc/hosts

scp /etc/hosts 192.168.7.202:/etc/hosts(将hosts文件复制剪切到192.168.7.202:/etc/hosts)















master1上创建开发的命名空间、创建测试、创建产品
[root@master1 ~]# kubectl create ns devlopment(创建开发的命名空间)
[root@master1 ~]# kubectl create ns qatest(创建测试)
[root@master1 ~]# kubectl create ns production(创建产品)
node1远程登录harbor仓库
[root@node1 ~]# docker login 192.168.7.202(node1远程登录harbor仓库)







master1上查看jenkins-k8s命名空间的pod信息、查看jenkins-k8s命名空间所有信息
[root@master1 ~]# kubectl get pods -n jenkins-k8s(查看jenkins-k8s命名空间的pod信息)
[root@master1 ~]# kubectl get all -n devlopment(查看jenkins-k8s命名空间所有信息)
