Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台 - 教程

原文链接
一、软硬件环境
角色主机名IP地址备注
masterk8s-master192.168.1.81
nodek8s-node1192.168.1.82
nodek8s-node2192.168.1.83
gitlabk8s-gitlab192.168.1.84
jenkins+dockerk8s-jenkins192.168.1.85
harbork8s-harbor192.168.1.86
rancherk8s-rancher192.168.1.87
二、环境准备

在所有节点操作

2.1 关闭NetworkManager

NetworkManager会和network启动是发生冲突,导致network启动失败,不能远程访问虚拟机;

systemctl stop NetworkManager                #临时关闭
systemctl disable NetworkManager             #永久关闭网络管理命令
systemctl start network.service              #开启网络服务

2.2 设置静态ip

2.2.1查看网络配置

ifconfig #查看网络配置
或
ip addr show

2.2.2 修改网络配置文件

vi /etc/sysconfig/network-scripts/ifcfg-ens33

1)选择动态分配或者静态分配

BOOTPROTO=static    #dhcp:自动分配ip ,static:静态ip

2)开启自动打开网卡

ONBOOT=yes     #开启启动必须是yes
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static    #dhcp:自动分配ip ,static:静态ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9c922cc8-b3ed-419a-88bd-6fd756e04880
DEVICE=ens33
ONBOOT=yes  #开启启动必须是yes
IPADDR=192.168.1.81 #静态ip
NETMASK=255.255.255.0  #
GATEWAY=192.168.1.1  #网关
DNS1=8.8.8.8   #DNS
DNS2=4.4.4.4

2.2.3重启服务

systemctl restart network

2.2.4查看网络状态

systemctl status network.service

2.3 修改主机名

hostnamectl set-hostname k8s-master #k8s-master 为主机名称

2.4 所有机器关闭防火墙

systemctl stop firewalld   #关闭
 systemctl disable firewalld        #开机不自启
 systemctl status firewalld     #查看状态

2.5 所有机器关闭selinux

swapoff -a # 临时关闭
 sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久关闭
 swapon -s #查看swapon分区

2.6 所有机器关闭swap

swapoff -a # 临时关闭
 sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久关闭
 swapon -s #查看swapon分区

2.7 所有节点安装docker

yum install wget.x86_64 -y
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/centos7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-26.1.4 -y
systemctl start docker
systemctl enable docker
docker version

配置docker加速器

mkdir -p /etc/docker
 tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://2tefyfv7.mirror.aliyuncs.com"]
}
EOF
 systemctl daemon-reload
 systemctl restart docker
三、部署k8s集群

3.1 添加主机名与ip的对应关系(k8s-master、k8s-node1、k8s-node2)

cat >> /etc/hosts << EOF
192.168.1.81 k8s-master
192.168.1.82 k8s-node1
192.168.1.83 k8s-node2
EOF
source /etc/profile

3.2 将桥接的ipv4流量传递到iptables的链(k8s-master、k8s-node1、k8s-node2)

cat >> /etc/sysctl.d/k8s.conf << EOF
 net.bridge.bridge-nf-call-ip6tables = 1
 net.bridge.bridge-nf-call-iptables = 1
EOF

3.3 安装kubeadm、kubelet、kubectl(k8s-master、k8s-node1、k8s-node2)

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install kubelet-1.22.2 kubeadm-1.22.2 kubectl-1.22.2 -y
systemctl enable kubelet && systemctl start kubelet
kubectl version

3.4 修改docker的配置(k8s-master、k8s-node1、k8s-node2)

#镜像加速 registry-mirrors
cat > /etc/docker/daemon.json <

这里从节点的kubelet.service状态报code=exited, status=1/FAILURE是正常的 集群没有初始化导致的

3.5 部署master节点(主节点k8s-master)

3.5.1 集群初始化

kubeadm init \
--apiserver-advertise-address=192.168.163.151 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--control-plane-endpoint k8s-master \
--service-cidr=172.16.0.0/16 \
--pod-network-cidr=10.244.0.0/16
这段命令是用于将一个工作节点(worker node)加入到已存在的 Kubernetes 集群中的过程。
kubeadm init 是用来初始化 Kubernetes 集群的命令。下面是一些常用的参数及其说明:
--apiserver-advertise-address: 指定用于通告的 API 服务器的 IP 地址。
--apiserver-bind-port: 指定 API 服务器绑定的端口。
--control-plane-endpoint: 指定控制平面的端口。
--image-repository: 设置 Kubernetes 镜像仓库的地址。
--kubernetes-version: 设置 Kubernetes 版本。
--pod-network-cidr: 设置 Pod 网络的 CIDR 范围。
--service-cidr: 设置服务的 CIDR 范围。

1).遇到报错:

Here is one example how you may list all Kubernetes containers running in docker:
                - 'docker ps -a | grep kube | grep -v pause'
                Once you have found the failing container, you can inspect its logs with:
                - 'docker logs CONTAINERID'
 
error execution phase wait-control-plane: couldn't initialize a Kubernetes cluster
To see the stack trace of this error execute with --v=5 or higher

2).解决办法:

rm -rf /etc/containerd/config.toml
systemctl restart containerd

如果初始化失败,可以重新初始化

kubeadm reset

此命令将删除当前集群的状态信息,并使其回到初始状态

初始化成功记下提示以及最后的信息,添加节点时需要

img

3.5.2 按照提示执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.5.3 查看kubelet.service状态

systemctl status kubelet.service

3.5.4 查看节点状态

kubectl get nodes

3.5.5 安装网络插件

# 最好手动提前拉取所需镜像
docker pull quay.io/coreos/flannel:v0.14.0
wget https://raw.githubusercontent.com/core
posted @ 2025-12-05 12:54  gccbuaa  阅读(0)  评论(0)    收藏  举报