本文为4个部署合集,将网上的一些资料进行规整测试,得出的一套实际可行的部署步骤,仅作为学习交流!
参考文档:
部署参考的博客:
https://www.cnblogs.com/xiao987334176/p/13074198.html
这一套整体流程可以这样理解:
客人(gitlab)到饭店(k8s)吃饭,服务员(jenkins)给菜单(harbor),也可以客人自己报菜名(dockerfile),后厨负责食材加工制作(rancher)。
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! 字样,说明安装成功了
四、修改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的中文文档地址: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部署 本次使用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来管理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的部署过程基本完成,有些细节还需要继续深究与探索,有些地方如果不正确,欢迎指正讨论,谢谢!