目的:学习、实践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+jenkins
详解Git分支操作细节,Gitlab账户注册,Gitlab的SSH配置,Git操作远程仓库
git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路
GIT+Gerrit+Jenkins基础操作
Git+Jenkins基本使用资源
传统的软件开发流程如下: 1、项目经理分配模块给开发人员 2、每个模块的开发人员并行开发,并进行单元测试 ...2、git发现代码变化,立即发消息通知Jenkins 3、Jenkins收到通知,利用Webhook触发代码自动构建任务
jenkins+git+maven搭建自动构建项目过程,其中部分简单安装省略
Git+Jenkins实战(一)资源.rar
git+jenkins+registry+K8S 综合配置文档
Git + Jenkins + SonarQube 敏捷开发持续集成环境 安装流程带配图,过程完善
自动化脚本发布过程_robot+SourceTree+Git+jenkins.docx
Git+Jenkins+Unittest+bs4爬虫+Page Object Python架构师级接口测试高级课
Gitllab+Jenkins+Docker+Harbor 自动化部署流程 一、 版本控制系统 Gitllab Gitllab 是一个基于 web 的 Git 仓库管理系统,提供了一个强大且灵活的平台来管理 Git 项目。 Gitllab 允许用户创建、管理和共享 Git ...
Jenkins+Git+Maven+Shell+Tomcat持续集成环境 Jenkins+Git+Maven+Shell+Tomcat持续集成环境
连载[团队协作开发 + 自动化部署],使用Git + Gitlab + Jenkins + K8S + Docker
实战Docker+Jenkins+Git+Registry构建持续集成环境
Git+SonarQube+Jenkins环境配置流程详细讲解了如何组建由Git、SonarQube、Jenkins集成的代码开发系统;详细讲解了下载、搭建、配置等关键步骤,可根据文档内容进行安装配置。SonarQube 是一个开源的代码分析平台, ...
K8S+Jenkins+Harbor+Docker+gitlab集群部署所需的所有资源
jenkins+git+maven+tomcat,自动下载代码,自动编译,自动发布到tomcat
主要给大家介绍了关于ASP.NET Core+Docker+Jenkins实现持续集成的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧