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上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问

部署流程如下:

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

(大佬的图,大概这个过程)

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

环境准备:

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

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

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的持续集成(jenkins+gitlab+k8s)

K8S基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持续集成交付环境(环境搭建篇)

Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货!)

Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货!)