K8s+Jenkins+GitLab+动态slave-自动化项目部署(详细讲解)
Posted 技术小疯子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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集群机器需要满足以下几个条件:
² 一台或多台机器,操作系统 CentOS7.x-86_x64
² 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
² 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
² 禁止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,无法下载
手动拉取
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.0
重命名
docker tag registry.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
NAME READY STATUS RESTARTS AGE
coredns-545d6fc579-2cgr8 1/1 Running 0 72s
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
三、部署gitlab
1、使用docker方式部署
docker run -d --hostname gitlab.xxx.cn \\
--publish jenkins+gitlab+微服务发布+k8s发布第四十四章 微服务CICD- gitlab + jenkins + docker + k8s
K8S基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)