kubernetes开发流程是什么
本篇内容介绍了“kubernetes开发流程是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Fork
把github.com/kubernetes/kubernetes 项目fork到自己的仓库
Clone到本地gitclonehttps://github.com//kubernetes设置remote
gitremoteaddupstreamhttps://github.com/kubernetes/kubernetes.gitgitremoteset-url--pushupstreamno-pushing
注意此时你的本地仓库就有了两个远程仓库,一个叫upstream(社区仓库) 一个叫origin(你fork的)
代码同步当社区仓库代码更新时,我们希望与之同步,那么:
gitpullupstreammaster#先同步到本地gitpush#push到origin
你修改了代码希望同步给社区,那么PR即可
分支管理假设我们要定制一个功能,比如我之前做的对kubelet进行lxcfs增强,而我们线上又运行了多个版本的k8s,我们希望这个特性几个版本都可以加上,而且未来k8s发布新版本时同样能merge进去这功能。
要做到这个git里的两个命令非常重要:
gitcherry-pick能指定merge特定的变更gitrebase通常我用来合并多个commit,虽然cherry-pick也支持多个commit,但是多了容易混乱
首先从master分支HEAD切出一个分支,我们有所的功能开发在这个分支上进行,如我做了c1 c2两次commit。
然后希望把这个功能merge到2.0版本中,我们先从2.0的tag切一个分支出来,然后在这个分之上去cherry-pick c1 c2即可,非常简单方便,其它版本需要此功能同理。
这里注意,如果不用cherry-pick 直接merge的话,因为2.0版本之后还有很多次变更,会产生大量冲突。
CI编译与发布笔者比较喜欢drone,所以编译与发布都是用的drone,安利个drone免费公有服务非常好用
由于k8s各个版本可能需要的golang版本都不太一样,所以最方便的还是在容器中进行构建,但并不是随便一个golang的镜像都可以进行构建,因为k8s还需要拷贝代码,生成代码等依赖了一些小工具,我这里提供了一个官方的编译镜像:fanux/kube-build:v1.12.1-2
发布时用了drone一个非常方便的插件:plugins/github-release, 可以直接把二进制文件放到github的release pages里.drone.yml 长这样:
kind:pipelinename:defaultworkspace:base:/gopath:src/k8s.io/kubernetes#要注意工作目录一定要写这个steps:-name:build#编译,名字随便写image:fanux/kube-build:v1.12.1-2environment:GO111MODULE:on#启动gomodcommands:-makegenerated_filesUPDATE_API_KNOWN_VIOLATIONS=true#这个是一个knownapi校验,不加编译可能会报错-KUBE_GIT_TREE_STATE="clean"KUBE_GIT_VERSION=v1.14.0KUBE_BUILD_PLATFORMS=linux/amd64makeallWHAT=cmd/kubeletGOFLAGS=-v#几个环境变量特别重要,如不加clean编译出来版本号就会加dirty后缀,需要加版本号不然很多时候无法正常工作,加构建平台,这样无需编译多个bin文件加快编译速度,WHAT里指定需要编译什么代码,大部分情况无需编译有所组件-ls_output/bin/#这里能看到编译后的二进制文件-name:publishimage:plugins/github-releasesettings:api_key:from_secret:git-release-tokenfiles:_output/bin/kubelet#把上一步二进制文件放到releasepage中title:${DRONE_TAG}#使用你打的tag作为标题note:Note.md#指定一个文件说明你release中干了啥when:event:tag
这样提交代码后刷刷抖音等结果即可。。
实践案例k8s kubeadm默认证书的时间是一年,我希望延长到99年,这样就需要定制化开发,那么问题来了,因为版本众多,是不是需要每个版本都去改一下,那太麻烦了,正确的做法如下:
从master切出一个分支gitcheckout-bkubeadm
修改代码并commit
commit6d16c60ca5ce8858feeabca7a3a18d59e642ac3f(HEAD->kubeadm)Author:fanuxDate:MonMar1820:26:082019+0800kubeadmwithlongcertcommit364b18cb9ef1e8da2cf09f33d0fd8042de6b327e(upstream/master,origin/master,origin/HEAD,master)
可以看到我们commit了一次,现在只需要把6d16c60ca这个变化merge到各版本即可
merge到1.13.4版本中gitcheckout-bv1.13.4v1.13.4gitcherry-pick6d16c60ca5c
注意 这次commit如果修改了相同文件的行还是可能会冲突的,需要手动解决一下冲突
解决完冲突commit即可➜kubernetesgit:(v1.13.4)✗gitadd.➜kubernetesgit:(v1.13.4)✗gitcommit-m"v1.13.4-cert"[v1.13.41bd2e627f5]v1.13.4-certDate:MonMar1820:26:082019+08004fileschanged,42insertions(+),3deletions(-)createmode100644.drone.ymlcreatemode100644Note.md➜kubernetesgit:(v1.13.4)gittagv1.13.4-cert➜kubernetesgit:(v1.13.4)gitpush--tags
“kubernetes开发流程是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。