目的:学习、实践K8S
各组件介绍:
1. git 无
2. Harbor当镜像仓库,如果你的k8s master slave在一台机器上则不用搭建
3. jenkins 做CI CD,从GIT拉取代码,打包,生成docker镜像、推送Harbor仓库,然后deploy服务到k8s
4. consul 用来做服务发现注册中心和配置中心
5. springcloud 做2个demo ,一个product 服务端,一个 cust 消费端,保证能动态扩展
最后,将部署到k8s环境中,有dev、test2套环境,用户最终通过 traefik做LB
如果单个来看,都很简单。关键是和K8S结合,感受K8S之美,第3条也是这次研究的目的。
组件安装:略
我的设计思路:
1. springcloud 工程存放2个 yaml 文件,一份是deployment,一份service
将namespace、image用占位符填充(后面 在jenkins里面的shell中替换)
这里说明下args 里面为何写了2个参数,我的预期设计是这样的:
一般公司会架设一个DNS服务器,开发的同学连consul的时候是 dev.consul.com
但是部署到K8S后,dev.consul.com在pod里面是无法访问的,pod里面应该访问的serviceName
当然你可以把serviceName都写一样,但是并不好。所以利用args进行了一次重写,这种传参是springboot里面内容了,也可以用env方式。
svc.yaml
2. jenkins中调用一个自己写的shell脚本,执行的时候传入2个参数。 比如:
/opt/jenkins/push.sh dev appName 其中 dev 表示开发环境、appName 表示工程名
重点在这个shell是怎么写的。
#!/bin/bash namespace=$1 name=$2 echo "" echo "=================== 1. maven ${JOB_NAME} =============" echo "" docker run --rm --name mvn -v /mnt/maven:/root/.m2 -v $WORKSPACE:/usr/src/mvn -w /usr/src/mvn/ maven:3.3.9-jdk-8 mvn clean insta ll echo "" echo "=================== 2.build docker image ==================" echo "" DOCKER_IMAGE=www.harbor.host/library/$name:`date +%y%m%d-%H-%M` docker build -t $DOCKER_IMAGE $WORKSPACE/. echo "" echo "=================== 3. push harbor =================" echo "" docker login -u name -p pwd www.harbor.host docker push $DOCKER_IMAGE docker logout www.harbor.host
echo "" echo "=================== 4.deploy kubernetes ==============" echo "" sed -i "s|\$NS|${namespace}|g" $WORKSPACE/kubernetes.yaml sed -i "s|\$IMAGE|${DOCKER_IMAGE}|g" $WORKSPACE/kubernetes.yaml sed -i "s|\$NS|${namespace}|g" $WORKSPACE/svc.yaml if kubectl get svc -n $namespace | grep $name; then echo "has svc ${name}" else kubectl create -f $WORKSPACE/svc.yaml fi kubectl apply -f $WORKSPACE/kubernetes.yaml
其实写到这里,老司机们应该看懂了,这里有一点不好,那就是jenkins部署在物理机上,应该是部署到kubernetes里面,然后通过API访问,主要是找的插件都不好用,所以就放物理机了。
另外还有一点,当你部署了一个statefulsets的应用的时候,比如mongo,在JAVA程序里面是无法直接通过svcName ping通的,因为这是一个无头服务。思路是 JAVA程序启动的时候,访问k8s的 endpoints API 就可以拿到。 代码类似下面:
当然要想访问API,记得加上serviceAccountName,和RBAC赋权。
实现是没什么时间,以后有空了再细化吧。
相关推荐
git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路
GIT+Gerrit+Jenkins基础操作
【Git+Jenkins基本使用案例】的描述涉及到了在IT行业中常见的版本控制和持续集成/持续部署(CI/CD)工具的使用。本文主要讲解如何部署Git、GitLab和Subversion作为代码管理系统,并结合Jenkins实现自动化部署。 首先...
### Git+Jenkins实现自动化构建与持续集成的关键知识点 #### 持续集成的基本概念 持续集成(Continuous Integration,简称CI)是一种软件开发实践,它要求团队成员经常性地(通常每天至少一次)将他们的工作集成到...
jenkins+git+maven搭建自动构建项目过程,其中部分简单安装省略
git+jenkins+registry+K8S 综合配置文档
在Git+Jenkins实战中,首先需要在Jenkins服务器上安装Git插件,以便Jenkins能够识别和处理Git仓库。接着,配置Git源代码管理,指定项目仓库的URL,设置访问仓库的凭证,如用户名和API Token。 然后,创建一个新的...
Git 和 Jenkins 是两种在 IT 行业中广泛使用的工具,它们分别是版本控制系统和持续集成/持续部署(CI/CD)的利器。Git 用于管理软件开发中的代码版本,而 Jenkins 则是自动化流程的平台,尤其适用于构建、测试和部署...
Git+Jenkins+Unittest+bs4爬虫+Page Object Python架构师级接口测试高级课
### Git + Jenkins + SonarQube 敏捷开发持续集成环境 #### 一、环境搭建与配置 在构建一个基于Git、Jenkins和SonarQube的敏捷开发持续集成环境时,首先要确保基础环境的搭建。根据提供的内容,这里假设的基础环境...
"K8S+DockerCE+Jenkins+Maven+Gitlab自动化打包部署" 以下是从给定的文件中生成的知识点: 一、概述 * 自动化打包部署是指将程序从开发到部署的整个流程自动化,以提高研发效率和生产效率。 * 本文将介绍使用 K8S...
Gitllab+Jenkins+Docker+Harbor 自动化部署流程 一、 版本控制系统 Gitllab Gitllab 是一个基于 web 的 Git 仓库管理系统,提供了一个强大且灵活的平台来管理 Git 项目。 Gitllab 允许用户创建、管理和共享 Git ...
Git+SonarQube+Jenkins环境配置流程详细讲解了如何组建由Git、SonarQube、Jenkins集成的代码开发系统;详细讲解了下载、搭建、配置等关键步骤,可根据文档内容进行安装配置。SonarQube 是一个开源的代码分析平台, ...
主要给大家介绍了关于ASP.NET Core+Docker+Jenkins实现持续集成的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Jenkins+Git+Maven+Shell+Tomcat 持续集成环境 本文主要讲述如何使用 Jenkins、Git、Maven、Shell 和 Tomcat 搭建一个持续集成环境,以提高软件开发效率和质量。首先,Jenkins 是一个开源软件项目,旨在提供一个...
实战 Docker+Jenkins+Git+Registry 构建持续集成环境 本文将详细介绍如何使用 Docker、Jenkins、Git 和 Registry 构建持续集成环境,实现自动化的 Java 项目发布流程。 知识点 1: Jenkins 简介 Jenkins 是一个...
K8S+Jenkins+Harbor+Docker+gitlab集群部署所需的所有资源
Jenkins+Git+Maven+Tomcat 自动化集成环境搭建 本文将详细介绍如何使用 Jenkins、Git、Maven 和 Tomcat 实现自动化构建、部署 web 应用程序的集成环境。 环境安装 首先,我们需要安装以下环境: 1. 操作系统:...
gitlab+jenkins+docker自动化部署脚本,采用shell与python开发,其中python部分均为封装成型的逻辑,只接受shell传参就能完成项目构建
"Postman+Newman+Jenkins+Git API测试自动化集成测试" Postman是一款功能强大的API测试工具,能够帮助开发者快速测试和验证API。然而,在实际应用中,手动点击Runner进行测试的方式不够灵活和高效,因此引入了...