著论准过秦,作赋拟子虚。这篇文章主要讲述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
推荐阅读
- 生产环境自启动失败问题排查
- Android JNI&NDK编程小结及建议
- 整合Apache Hudi+Mysql+FlinkCDC2.1+CDH6.3.0
- Picasso,Glide,Fresco那个好()
- 利用反编译学习Android
- Android自定义控件之基本原理
- 一文带你熟知ForkJoin
- #私藏项目实操分享#Java多线程下载器基础代码
- 持续交付之基于Git Flow代码分支策略实践