K8s+Jenkins+GitLab+动态slave-自动化项目部署(详细讲解)

著论准过秦,作赋拟子虚。这篇文章主要讲述K8s+Jenkins+GitLab+动态slave-自动化项目部署(详细讲解)相关的知识,希望能为你提供帮助。
K8s+Jenkins+GitLab+动态slave-自动化项目部署科技在进步,技术在更新,革命就不停止。


一、部署流程开发人员把做好的项目代码通过git推送到gitlab,然后Jenkins通过  gitlab webhook  (前提是配置好),自动从拉取gitlab上面拉取代码下来,然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问
部署流程如下:
?
?
(大佬的图,大概这个过程)

环境准备:

IP
角色
172.25.0.30
master1、Jenkins
172.25.0.31
node1、Gitlab
172.25.0.32
node2、Harbor、Jenkins-slave


二、K8s  安装

1.  安装要求


在开始之前,部署Kubernetes集群机器需要满足以下几个条件:


2    一台或多台机器,操作系统  CentOS7.x-86_x64
2    硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
2    可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
2    禁止swap分区


2.  准备环境




角色色
IP
k8s版本
k8s-master
172.25.0.30
kubernetes1.21.0
k8s-node1
172.25.0.31
kubernetes1.21.0
k8s-node2
172.25.0.32
kubernetes1.21.0


#  关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#  关闭swap
swapoff -a# 临时
sed -ri s/.*swap.*/#& / /etc/fstab# 永久

#  根据规划设置主机名
hostnamectl set-hostname < hostname>

#  在master添加hosts
hostnamectl set-hostname < hostname>

#  在master添加hosts
cat > > /etc/hosts < < EOF
EOF



#  将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf < < EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
EOF



sysctl --system# 生效

#  时间同步
yum install ntpdate -y
ntpdate -u pool.ntp.org

添加定时
crontab-l
*/20 * * * * /sbin/ntpdate -u pool.ntp.org > /dev/null 2> & 1





3.  所有节点安装Docker/kubeadm/kubelet


Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。


3.1  安装Docker

#yum install -y yum-utils \\
device-mapper-persistent-data \\
lvm2



#yum-config-manager \\
--add-repo \\
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo



#yum install docker-ce -y

#cat > /etc/docker/daemon.json < < EOF
"registry-mirrors": ["https://h***3j.mirror.aliyuncs.com"]
EOF



3.2  添加阿里云YUM软件源

$ cat > /etc/yum.repos.d/kubernetes.repo < < EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF



3.3  安装kubeadm,kubelet和kubectl

由于版本更新频繁,这里指定版本号部署:


$ yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
$ systemctl enable kubelet



4.  部署Kubernetes Master
在172.25.0.30(Master)执行。


$ kubeadm init \\
--apiserver-advertise-address=172.25.0.30 \\
--image-repository registry.aliyuncs.com/google_containers \\
--kubernetes-version v1.21.0 \\
--service-cidr=10.96.0.0/12 \\
--pod-network-cidr=10.244.0.0/16 --upload-certs

安装1.21版本时报错发现coredns,无法下载
手动拉取
dockerpull registry.aliyuncs.com/google_containers/coredns:1.8.0



重命名
dockertagregistry.aliyuncs.com/google_containers/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0



重新初始化


由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。


使用kubectl工具:


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



$ kubectl get nodes

5.  加入Kubernetes Node


在172.25.0.31/32(Node)执行。


向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:


$ kubeadm join 172.25.0.30:6443 --token amdbyn.a02my1ugmoblwy4q --discovery-token-ca-cert-hash sha256:18462463a7db86052399e97b18efe3f12edc5999293abdccf7529669df0ad3fa



默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command



6.  部署CNI网络插件


wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml



kubectl apply -f kube-flannel.yml

默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。


kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml



查看k8spod状态
kubectl get pods -n kube-system
NAMEREADYSTATUSRESTARTSAGE
coredns-545d6fc579-2cgr81/1Running072s


7.  测试kubernetes集群


在Kubernetes集群中创建一个pod,验证是否正常运行:


$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=NodePort
$ kubectl get pod,svc



访问地址:http://NodeIP:Port   


三、部署gitlab1、使用docker方式部署
【K8s+Jenkins+GitLab+动态slave-自动化项目部署(详细讲解)】

docker run -d --hostname gitlab.xxx.cn \\
--publish

    推荐阅读