gitlab+k8s+jenkins+rancher部署

记录2021年9月的一次 gitlab+k8s+jenkins+rancher部署

本文为4个部署合集,将网上的一些资料进行规整测试,得出的一套实际可行的部署步骤,仅作为学习交流!
参考文档:
部署参考的博客:
https://www.cnblogs.com/xiao987334176/p/13074198.html


这一套整体流程可以这样理解:
客人(gitlab)到饭店(k8s)吃饭,服务员(jenkins)给菜单(harbor),也可以客人自己报菜名(dockerfile),后厨负责食材加工制作(rancher)。


一、gitlab部分

gitlab简介:
GitLab是一个开源的用于仓库管理的项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
本次安装gitlab是基于yum方式安装的,故先介绍一波yum
yum介绍
Yum(全称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum的一切信息都存储在一个叫yum.reops.d目录下的配置文件中,通常位于/etc/yum.reops.d目录下。在这个目录下面有很多文件,都是.repo结尾的,repo文件是yum源(也就是软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!

一、新建一个yum配置文件,用于gitlab下载的配置,因为默认的gitlab镜像源下载比较慢。

vim /etc/yum.repos.d/gitlab-ce.repo

内如如下:

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

二、更新一下

yum makecache

三、安装社区版的gitlab

yum install -y gitlab-ce

等待一会看到下图说明安装成功!
最后一行会看到     complete!  字样,说明安装成功了
最后一行会看到 complete! 字样,说明安装成功了
四、修改gitlab服务的ip为本机ip

vim /etc/gitlab/gitlab.rb

找到external_url 改为本机的ip:port;用于拉取代码指定的地址。
五、刷新gitlab的配置,东西会很多,耐心等待。

gitlab-ctl reconfigure

六、启动gitlab服务

gitlab-ctl start

七、通过访问ip:port即可进入gitlab的首页;
进入后首先会要求输入root用户的重置密码
在这里插入图片描述
重置完成后登录即可
在这里插入图片描述

采坑注意:(以下方法为网络记录)
默认gitlab安装后,会自带一个nginx,如果先安装了nginx,则会有冲突!
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
将监听端口listen修改为 *:gitlab的端口; ,与独立的nginx区分开来即可;
接着重启gitlab服务;
gitlab-ctl restart
如果还有问题,请留意防火墙是否禁用了端口!

到此完成gitlab的部署!!!

二、k8s部分

K8s的中文文档地址:http://docs.kubernetes.org.cn/227.html

Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
K8s的作用:
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用
K8s都是以集群的方式出现的,所以部署的时候,也是按照主从方式部署。搭建的时候请确保CPU至少2核,内存2G!
Eg:一主二从集群部署

部署步骤
一、需要开放Kubernetes各个组件所需要的端口,设置防火墙开放端口;方便起见,直接关闭防火墙。

systemctl disable firewalld

禁用SELINUX

vim /etc/selinux/config

具体操作: SELINUX=disabled
二、修改k8s.conf文件

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

三、开启路由转发

echo 1 > /proc/sys/net/ipv4/ip_forward

四、关闭swap

vi /etc/fstab

注释掉 SWAP 的自动挂载,然后重启
五、参考菜鸟教程 安装docker
https://www.runoob.com/docker/centos-docker-install.html
注意,主从服务器都需要安装docker!
六、修改服务器的主机名字,便于区分主从;
这里假设主服务器叫 k8s-master,从服务器叫k8s-node01、02
一共三台服务器

hostnamectl set-hostname k8s-master / k8s-node01 / k8s-node02

注意:主机名不能带下划线,只能带中划线
七、创建yum安装源,同gitlab那部分是一个概念

cat <<EOF > /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

八、安装k8s

yum install -y kubelet-1.18.1-0 kubeadm-1.18.1-0 kubectl-1.18.1-0
systemctl enable kubelet && systemctl start kubelet

注意 一到八步骤,主、从服务器都需要执行一遍!

九、初始化Master节点,注意:apiserver-advertise-address为master服务器的ip

kubeadm init --kubernetes-version=1.18.1 \
--apiserver-advertise-address=192.168.128.130 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

解释说明:
–kubernetes-version: 用于指定k8s版本;
–apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
–service-cidr:用于指定SVC的网络范围;
–image-repository: 指定阿里云镜像仓库地址

十、由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。

kubeadm join 192.168.128.130:6443 --token rkt1p6.3m7z7pqfvaehxmxi \
    --discovery-token-ca-cert-hash sha256:dd384c51b5a38cce275dd3e178f6f1601b644f5fc2bc2f8cee9c2b031b119143

记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。就是最后2行的token,十七步骤要用到!

十一、配置kubectl工具

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

十二、安装flannel网络通信

mkdir /usr/local/k8s
cd /usr/local/k8s
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

如果wget方式需要设置代理,请自行百度

注意,截止到21年9月份,最新的kube-flannel.yml已经升级到14版本了,本人学习的时候,是按照12版本进行的,故需要自行下载对应的12版本的yam文件!
12版本的yaml下载地址
https://download.csdn.net/download/qq_38653981/24645824
或者自行百度。
如果yml中的"Network": "10.244.0.0/16"和
–第九步的–
kubeadm init xxx --pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。

接着查看yml中所需要的镜像:

cat kube-flannel.yml |grep image|uniq

发现有5个需要pull的

docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le
docker pull registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x

接着为镜像打tag,保持和yaml文件一样。5个

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm64 quay.io/coreos/flannel:v0.12.0-arm64

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-arm quay.io/coreos/flannel:v0.12.0-arm

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-ppc64le quay.io/coreos/flannel:v0.12.0-ppc64le

docker tag registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-s390x quay.io/coreos/flannel:v0.12.0-s390x

注意:这些镜像,也需要在node节点执行。
Master继续操作:
十三、master服务器上加载flannel

kubectl apply -f kube-flannel.yml

十四、查看Pod状态

kubectl get pod --all-namespaces -o wide

状态为启动
在这里插入图片描述十五、设置开机启动

systemctl enable kubelet

十六、Master服务器上补充一些命令

yum install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source  ~/.bashrc

十七、node加入集群,十步骤最后保留的那两行 token

kubeadm join 192.168.128.130:6443 --token rkt1p6.3m7z7pqfvaehxmxi \
    --discovery-token-ca-cert-hash sha256:dd384c51b5a38cce275dd3e178f6f1601b644f5fc2bc2f8cee9c2b031b119143

十八、两个从机设置开机自启动

systemctl enable kubelet

十九、登录master主服务器查看节点状态

kubectl get nodes -o wide

在这里插入图片描述
二十、查看flannel.1网卡,用来做flannel网络通信

ifconfig

二十一、测试 登录master服务器使用yml发布应用
分别创建yam文件
1.flaskapp-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flaskapp-1
spec:
  selector:
    matchLabels:
      run: flaskapp-1
  replicas: 1
  template:
    metadata:
      labels:
        run: flaskapp-1
    spec:
      containers:
      - name: flaskapp-1
        image: jcdemo/flaskapp
        ports:
        - containerPort: 5000

2.flaskapp-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: flaskapp-1
  labels:
    run: flaskapp-1
spec:
  type: NodePort
  ports:
  - port: 5000
    name: flaskapp-port
    targetPort: 5000
    protocol: TCP
    nodePort: 30005
  selector:
run: flaskapp-1

加入yml文件:

kubectl apply -f flaskapp-service.yaml 
kubectl apply -f flaskapp-deployment.yaml 

稍等后,查看pod节点

kubectl get pods -o wide

接着使用master ip+nodeport访问
http://192.168.128.130:30005/
页面有展示信息就ok了

三、Jenkins部分

Jenkins部署 本次使用war包结合tomcat9形式;
Jenkins自动化部署,前提条件需要安装git、jdk、maven;
两种方式,其一为系统中yum安装,然后指定位置;其二为jenkins自动下载;
一、Jenkins官网下载war包
https://www.jenkins.io/zh/doc/book/installing/
tomcat官网下载tomcat9
https://tomcat.apache.org/
二、将jenkins.war放到tomcat的输出目录中,webapps下
这一步就是上传war包到webapps,就不再赘述了。
三、启动tomcat,访问http://localhost:8080/jenkins或者本机的ip即可
四、初始化用户密码:
在这里插入图片描述
按照页面提示 cat到指定路径,复制密码到框子里;
接着进入下一页
在这里插入图片描述
在这里插入图片描述
安装完成后会跳出一个表单,填好表单点击保存并完成。
到此完成tomcat形式jenkins的部署。

四、rancher部分

Rancher部署:
用Rancher来管理k8s集群。两者的关系是Rancher对k8s进行了功能的拓展与实现了和k8s集群交互的一些便捷工具,包括执行命令行,管理多个 k8s集群,查看k8s集群节点的运行状态等等。
一、安装稳定版rancher

docker pull rancher/rancher:stable

二、运行rancher

docker run -d --restart=always --name rancher -p 80:80 -p 443:443 rancher/rancher:stable

三、查看rancher的输出日志

docker logs -f rancher

四、通过本机ip访问rancher,注意端口占用问题!
在这里插入图片描述
在这里插入图片描述
五、切换中文
在这里插入图片描述
六、将k8s集群,导入即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
七、登录k8s-master主机,执行命令
上面红色框子,也就是第三个粘贴执行

curl --insecure -sfL https://10.212.20.213/v3/import/xxpv9dfjtkfwcxcmh475khx2mcscs6mfhmqmbznbkcrf2mkq77l5nm.yaml | kubectl apply -f -

八、稍等后,即可看到部署的集群
(可以命令查看pod kubectl get pods -n cattle-system )
在这里插入图片描述
到此,结束全部工作,一套完整的cicd的部署过程基本完成,有些细节还需要继续深究与探索,有些地方如果不正确,欢迎指正讨论,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_38653981/article/details/120475325