基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Kubernetes实现Master-Slave分布式构建方案

Kubernetes实现Master-Slave分布式构建方案


传统JenkinsMaster-Slave方案的缺陷


Master节点发生单点故障时,整个流程都不可用了


每个 Slave节点的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来非常不方便,维护起来也是比较费劲

资源分配不均衡,有的 Slave节点要运行的job出现排队等待,而有的Slave节点处于空闲状态,资源浪费,每台 Slave节点可能是实体机或者VM,当Slave节点处于空闲状态时,也不会完全释放掉资源


以上种种问题,我们可以引入Kubernates来解决!

 

Kubernetes简介


Kubernetes(简称,K8S)是Google开源的容器集群管理系统,在Docker技术的基础上,为容器化的   应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的  便捷性。


其主要功能如下:


使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。

以集群的方式运行、管理跨机器的容器。以集群的方式运行、管理跨机器的容器。  

解决Docker跨机器容器之间的通讯问题。解决Docker跨机器容器之间的通讯问题。

Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。

 

Kubernates+Docker+Jenkins持续集成架构图


2387773-20220307152942968-1856258803.png2387773-20220307152948254-564446880.png


大致工作流程:手动/自动构建 -> Jenkins 调度 K8S API ->动态生成 Jenkins Slave pod - Slave pod 拉取 Git 代码/编译/打包镜像 -

推送到镜像仓库 Harbor - Slave 工作完成,Pod 自动销毁 ->部署到测试或生产 Kubernetes平台。(完全自动化,无需人工干预)

 

 

Kubernates+Docker+Jenkins持续集成方案好处


服务高可用:


当 Jenkins Master 出现故障时,Kubernetes 会自动创建一个新的 Jenkins Master容器,并且将 Volume 分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。


动态伸缩,合理使用资源:


每次运行 Job 时,会自动创建一个 Jenkins SlaveJob 完成后,Slave 自动注销并删除容器,资源自动释放,而且 Kubernetes 会根据每个资源的用情况,动态分配Slave 到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待在该节点的情况。


扩展性好:


当 Kubernetes 集群的资源严重不足而导致 Job 排队等待时,可以很容易的添加一个Kubernetes Node 到集群中,从而实现扩展。


Kubeadm安装Kubernetes


Kubernetes的架构


2387773-20220307210506170-1980888679.png



API  Server:用于暴露Kubernetes  API,任何资源的请求的调用操作都是通过kube-apiserver提供的接口进行的。


Etcd:是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。


Controller-Manager:作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。


Scheduler:监视新创建没有分配到Node的Pod,为Pod选择一个Node。

 

Kubelet:负责维护容器的生命周期,同时负责Volume和网络的管理


Kube proxy:是Kubernetes的核心组件,部署在每个Node节点上,它是实现


Kubernetes Service的通信与负载均衡机制的重要组件。

 

安装环境说明

 

主机名称

IP地址

安装的软件

代码托管服务器

 

20.0.0.20

 

Gitlab-12.4.2

Docker仓库服务器

 

20.0.0.50

 

Harbor1.9.2

 

k8s-master

 

20.0.0.10

kube-apiserver、kube-controller-manager、kube- scheduler、docker、etcd、calico,NFS

k8s-node1

20.0.0.70

kubelet、kubeproxy、Docker18.06.1-ce

k8s-node2

20.0.0.80

kubelet、kubeproxy、Docker18.06.1-ce

 

 

 

三台机器都需要完成


首先全部安装docker


然后:

修改三台机器的hostnamehosts文件


hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
vim /etc/hosts
0.0.0.10 k8s-master
20.0.0.70 k8s-node1
20.0.0.80 k8s-node2


闭防火墙和关闭SELinux


systemctl stop firewalld systemctl disable firewalld
setenforce 0 临时关闭
vi /etc/sysconfig/selinux
永久关闭改为SELINUX=disabled


设置系统参数,加载br_netfilter模块,不然后面会报错


modprobe br_netfilter


设置允许路由转发,不对bridge的数据进行处理创建文件

vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0


执行文件


sysctl -p /etc/sysctl.d/k8s.conf


kube-proxy开启ipvs的前置条件


cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
  
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4


所有节点关闭

1

2

3

swapoff -a 临时关闭

vi /etc/fstab 永久关闭注释掉以下字段一般在末尾一行

/dev/mapper/cl-swap swap swap defaults 0 0


安装kubeletkubeadmkubectl

swapoff -a 临时关闭
vi /etc/fstab 永久关闭注释掉以下字段一般在末尾一行
/dev/mapper/cl-swap swap swap defaults 0 0


kubeadm: 用来初始化集群的指令。

kubelet: 在集群中的每个节点上用来启动 pod container 等。

kubectl: 用来与集群通信的命令行工具。

 

清空yum缓存


yum clean all



设置Yum安装源


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=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


安装:(1.20之前的版本否则不支持 k8s1.20以后不兼容docker)


yum install -y kubelet-1.17.0 kubeadm-1.17.0 kubectl-1.17.0


kubelet我们可以先设置一下开机自启和看一下版本 (注意:先不启动,现在启动的话会报错)


systemctl enable kubelet
查看版本
kubelet --version


Master节点需要完成的:

 

1)运行初始化命令(具备docker环境)


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

注意:apiserver-advertise-address这个地址必须是master机器的IP

 

2) 启动kubelet


systemctl restart kubelet


3) 配置kubectl工具(一般装完上面会提示你三条命令 依次执行就行了)


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


4)然后就是安装Calico:

mkdir k8s
cd k8s


不检查凭证下载calico.yaml


wget --no-check-certificate https://docs.projectcalico.org/v3.10/getting-started/kubernetes/install


地址更改,方便从节点通信

 

 

sed -i 's/20.0.0.0/10.244.0.0/g' calico.yaml
kubectl apply -f calico.yaml


5) 查看所有Pod的状态,确保所有Pod都是Running状态

 

kubectl get pod --all-namespaces -o wide


2387773-20220307212018508-477809126.png



Slave节点需要完成  (也就是node1,2)


1)让所有节点让集群环境,使用之前Master节点产生的命令加入集群

kubeadm join 20.0.0.10:6443 --token fww6qy.mf2c32wtatulk506 \
    --discovery-token-ca-cert-hash sha256:bb126b5525f3e34a41cd8e4d55b4bb549753bc6794e52cd6432205f6e1731f3c


2) 启动kubelet

systemctl start kubelet
systemctl status kubelet   #查看状态


2) 回到Master节点查看,如果Status全部为Ready,代表集群环境搭建成功!!!

kubectl get nodes   #全部ready  就可以 了    


 

补充:


kubectl常用命令


kubectl get nodes   #查看所有主从节点的状态
kubectl get ns          #获取所有namespace资源
kubectl get pods -n {$nameSpace}              #获取指定namespace的pod
kubectl describe pod的名称   -n {$nameSpace}     #查看某个pod的执行过程
kubectl logs --tail=1000 pod的名称 | less    #查看日志<br>kubectl create -f xxx.yml     



 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
15天前
|
人工智能 移动开发 IDE
安利几款与钉钉平台无缝集成打通账号认证的企业文档管理系统
钉钉是很多中小企业都爱用的产品,开通账号就能直接使用了,应用生态非常丰富,尤其是AI技术的应用,走在行业前列。但仍有很多企业对于全面拥抱SaaS服务充满了顾虑,尤其在内部资料的管理这块,即使钉钉在线文档已经提供了非常优秀的协作体验,不少客户仍更偏爱私有部署在局域网里面的企业文档管理系统。那么能将企业内部部署的文档管理系统集成到钉钉平台上面,和钉钉文档并行使用呢?市面上又有哪些企业文档管理系统软件支持与钉钉的集成呢?这也是很多企业客户的疑问。
安利几款与钉钉平台无缝集成打通账号认证的企业文档管理系统
|
12天前
|
jenkins Java 持续交付
蓝易云 - 从零开始配置Jenkins与GitLab集成:一步步实现持续集成
以上就是从零开始配置Jenkins与GitLab集成的步骤,希望对你有所帮助。
31 2
|
28天前
|
人工智能 自然语言处理 安全
构建未来:AI驱动的自适应网络安全防御系统提升软件测试效率:自动化与持续集成的实践之路
【5月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、保障用户隐私和企业持续运营的关键。传统的安全防御手段,如防火墙和入侵检测系统,面对日益复杂的网络攻击已显得力不从心。本文提出了一种基于人工智能(AI)技术的自适应网络安全防御系统,该系统能够实时分析网络流量,自动识别潜在威胁,并动态调整防御策略以应对未知攻击。通过深度学习算法和自然语言处理技术的结合,系统不仅能够提高检测速度和准确性,还能自主学习和适应新型攻击模式,从而显著提升网络安全防御的效率和智能化水平。 【5月更文挑战第30天】 在快速迭代的软件开发周期中,传统的手动测试方法已不再适应现代高效交付的要求。本文探讨了如
|
28天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第30天】随着云计算和微服务架构的兴起,传统的运维模式已难以满足快速迭代和高可用性的需求。本文探讨了如何利用容器技术构建一个高效、可靠的自动化运维体系,重点分析了Docker和Kubernetes在这一过程中的关键作用,并提出了一套基于这些技术的持续集成(CI)与持续部署(CD)解决方案。通过实际案例和操作步骤的详细阐述,文章为读者提供了一种实现自动化运维的有效途径,同时对未来运维技术的发展趋势进行了展望。
|
30天前
|
监控 测试技术 持续交付
构建高效持续集成系统的策略与实践
【5月更文挑战第28天】 在快速迭代的软件开发过程中,持续集成(CI)系统是确保代码质量和加速交付的关键。本文将探讨构建一个高效、可靠的CI系统的关键策略,并通过实际案例分析如何实现这些策略。我们将讨论自动化测试、容器化部署、监控和日志记录等主题,以及它们如何共同作用以提升开发流程的效率和稳定性。通过实施这些策略,团队可以显著减少集成问题,并缩短从开发到部署的时间。
32 2
|
30天前
|
弹性计算 Kubernetes 监控
【阿里云弹性计算】阿里云 ECS 与 Kubernetes 集成:轻松管理容器化应用
【5月更文挑战第28天】阿里云ECS与Kubernetes集成,打造强大容器管理平台,简化应用部署,实现弹性扩展和高效资源管理。通过Kubernetes声明式配置在ECS上快速部署,适用于微服务和大规模Web应用。结合监控服务确保安全与性能,未来将深化集成,满足更多业务需求,引领容器化应用管理新趋势。
209 2
|
30天前
|
运维 Kubernetes jenkins
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】 在现代软件工程实践中,持续集成(CI)和持续部署(CD)已成为提升开发效率、确保产品质量的关键环节。本文旨在探讨如何利用容器技术构建一套高效、可靠的自动化运维系统,以支持敏捷开发流程和微服务架构。通过对Docker容器及Kubernetes集群管理工具的深入分析,我们提出了一种结合Jenkins实现自动化测试、构建与部署的完整解决方案,并讨论了其在现实业务中的应用效果和面临的挑战。
|
30天前
|
运维 监控 安全
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】在现代IT基础设施管理中,自动化运维已成为提升效率、确保稳定性的关键手段。本文将探讨如何利用容器技术实现软件的持续集成(CI)与持续部署(CD),从而构建一套高效的自动化运维体系。通过分析容器化的优势和挑战,结合DevOps文化,我们提出一个实用的框架,以帮助企业快速响应市场变化,缩短产品上市时间,同时保障服务的高可用性。
|
1月前
|
敏捷开发 监控 Devops
构建高效持续集成系统的关键要素
【5月更文挑战第27天】 在现代软件开发过程中,持续集成(CI)已成为确保代码质量和加快交付速度的重要实践。本文将探讨构建一个高效持续集成系统的关键要素,涵盖自动化构建、测试、部署以及监控等方面。我们将通过分析各要素的作用和实施策略,提供一套全面的指南,帮助开发团队优化其CI流程,提升软件项目的可靠性和效率。
|
1月前
|
Kubernetes 关系型数据库 分布式数据库
【PolarDB开源】PolarDB与Kubernetes集成:容器化部署的最佳实践
【5月更文挑战第21天】本文介绍了将阿里云的高性能数据库PolarDB与容器编排工具Kubernetes集成的步骤。首先,需准备Kubernetes集群和PolarDB Docker镜像,安装Helm。然后,通过Helm部署PolarDB,设置存储类和副本数。接着,应用配置PolarDB连接信息,打包成Docker镜像并在K8s集群中部署。此外,调整PolarDB参数以优化性能,并使用Prometheus和Grafana监控。本文为PolarDB在Kubernetes中的最佳实践提供了指导。
68 4