细述kubernetes开发流程

本文介绍如何对kubernetes进行二次开发,仓库如何管理,git分支如何管理,怎样利用CI去编译与发布以及如何给社区贡献代码等,结合实际例子,望对大家有所帮助。

开发环境构建

Fork

把github.com/kubernetes/kubernetes 项目fork到自己的仓库

Clone到本地

git clone https://github.com//kubernetes

设置remote

git remote add upstream https://github.com/kubernetes/kubernetes.git
git remote set-url --push upstream no-pushing

注意此时你的本地仓库就有了两个远程仓库,一个叫upstream(社区仓库) 一个叫origin(你fork的)

代码同步

当社区仓库代码更新时,我们希望与之同步,那么:

git pull upstream master  # 先同步到本地
git push                  # push 到origin

你修改了代码希望同步给社区,那么PR即可

分支管理

假设我们要定制一个功能,比如我之前做的对kubelet进行lxcfs增强,而我们线上又运行了多个版本的k8s,我们希望这个特性几个版本都可以加上,而且未来k8s发布新版本时同样能merge进去这功能。

要做到这个git里的两个命令非常重要:

git cherry-pick 能指定merge特定的变更
git rebase 通常我用来合并多个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: pipeline
name: default
workspace:
    base: /go
    path: src/k8s.io/kubernetes  # 要注意工作目录一定要写这个

steps:
- name: build                    # 编译,名字随便写
  image: fanux/kube-build:v1.12.1-2
  environment:
    GO111MODULE: on              # 启动go mod
  commands:
      - make generated_files UPDATE_API_KNOWN_VIOLATIONS=true   # 这个是一个known api校验,不加编译可能会报错
      - KUBE_GIT_TREE_STATE="clean" KUBE_GIT_VERSION=v1.14.0 KUBE_BUILD_PLATFORMS=linux/amd64 make all WHAT=cmd/kubelet GOFLAGS=-v  # 几个环境变量特别重要,如不加clean编译出来版本号就会加dirty后缀,需要加版本号不然很多时候无法正常工作,加构建平台,这样无需编译多个bin文件加快编译速度,WHAT里指定需要编译什么代码,大部分情况无需编译有所组件
      - ls  _output/bin/  # 这里能看到编译后的二进制文件

- name: publish
  image: plugins/github-release
  settings:
    api_key:
        from_secret: git-release-token
    files: _output/bin/kubelet   # 把上一步二进制文件放到release page中
    title: ${DRONE_TAG}          # 使用你打的tag作为标题
    note: Note.md                # 指定一个文件说明你release中干了啥
    when:
        event: tag

这样提交代码后刷刷抖音等结果即可。。

实践案例

k8s kubeadm默认证书的时间是一年,我希望延长到99年,这样就需要定制化开发,那么问题来了,因为版本众多,是不是需要每个版本都去改一下,那太麻烦了,正确的做法如下:

从master切出一个分支

git checkout -b kubeadm

修改代码并commit

commit 6d16c60ca5ce8858feeabca7a3a18d59e642ac3f (HEAD -> kubeadm)
Author: fanux
Date:   Mon Mar 18 20:26:08 2019 +0800

    kubeadm with long cert

commit 364b18cb9ef1e8da2cf09f33d0fd8042de6b327e (upstream/master, origin/master, origin/HEAD, master)

可以看到我们commit了一次,现在只需要把6d16c60ca这个变化merge到各版本即可

merge到1.13.4版本中

git checkout -b v1.13.4 v1.13.4
git cherry-pick 6d16c60ca5c

注意 这次commit如果修改了相同文件的行还是可能会冲突的,需要手动解决一下冲突

解决完冲突commit即可

?  kubernetes git:(v1.13.4) ? git add .
?  kubernetes git:(v1.13.4) ? git commit -m "v1.13.4-cert"
[v1.13.4 1bd2e627f5] v1.13.4-cert
 Date: Mon Mar 18 20:26:08 2019 +0800
 4 files changed, 42 insertions(+), 3 deletions(-)
 create mode 100644 .drone.yml
 create mode 100644 Note.md
?  kubernetes git:(v1.13.4) git tag v1.13.4-cert
?  kubernetes git:(v1.13.4) git push --tags

原文地址:https://www.cnblogs.com/linuxprobe-sarah/p/10860273.html

时间: 2024-10-27 14:04:44

细述kubernetes开发流程的相关文章

互联网公司的“敏捷开发”流程是怎么样的,每个职位的角色和分工是什么?

作者:暗灭 第一   为什么需要敏捷开发. 在几万年以前,软件项目的开发都是以年来计算的,这代表什么意思呢 ?需求设计了半年多,方案设计做了半年多,开发了三年多,测试了半年多,修改Bug用了半年多.总计花了很长很长的时间,然后上线后发现有很多需求已经不存在了,同时又出现了很多新的需求. 怎么办?继续改.这一改又是半年多的时间过去了.马丹用户的需求还再改,怎么办? 这是困扰软件开发项目的最大的问题,越大的项目,参与的人越多,风险越大.文档越规范,维护起来的难度就越高,导致项目中遇到的问题越来越多.

开发流程

一个完整的开发流程应该有这四步:分析->设计->编码->测试.很多开发团队往往只有编码这边,弱化了其他步骤,他们拿到需求就开始写代码, 写着写着发现有问题,要么是遇到一个难点解决不了,要么是发现要返回修改以前写过的代码, 要么是发现有大量的重复代码,又不知道怎么封装,只能将错就错.做好了分析和设计编码时就不会有这么多问题, 做好了测试产品bug就少,产品质量才高. 下面我分别详细讲解一下这四步. 分析 分析的时候,我们要分析需求和难点. 分析需求的方法是做需求陈述处理,前面我提到过, 要

软件开发流程(转载)

软件开发流程 迭代化软件开发技术 1. 传统开发流程的问题 传统的 软件开发流程是一个文档驱动的流程,它将整个软件开发过程划分为顺序相接的几个阶段,每一个阶段都必需完毕所有规定的任务(文档)后才可以进入下一个阶段. 如必须完毕所有的系统需求规格说明书之后才可以进入概要设计阶段,编码必需在系统设计完毕之后才可以进行.这就意味着仅仅有当所有的系统模块所有开发完毕之 后,我们才进行系统集成,对于一个由上百个模块组的复杂系统来说,这是一个很艰巨而漫长的工作. 随着我们所开发的软件项目越来越复杂,传统的瀑

移动端开发流程

和PC端网站的设计和开发相比,移动客户端的开发工作,对绝大多数人来说,绝对是一个崭新的行当. 那么,当我们每天在iphone上,在各种安卓在各种pad上习以为常的刷着微博看着网文切着西瓜找着你妹的时候,当一大波人信心满怀的开始步入这个看似熟悉,或者说"简单"的工作中后,突然发现,悲催,完全不是那么回事嘛! 相信很大一部分产品或者设计或者开发人员是从之前的传统互联网"出家"过来的,当然,这包括我,还有身边很多很多人.总之,这是一个坑,因为,APP,这个"看上

软件项目开发流程

软件开发流程(Software development process) 首先 看一下基本软件项目开发流程图 其中 1.需求分析: 通过对客户业务的了解和与客户对流程的讨论对需求进行基本建模,最终形成需求规格说明书. 2.总体设计: 通过分析需求信息,对系统的外部条件及内部业务需求进行抽象建模,最终形成概要设计说明文档. 3.详细设计: 此部分在对需求和概要设计的基础上进行系统的详细设计(也包含部分代码说明). 4.开发编程: 对系统进行代码编写. 5.测试分析与系统整合: 对所有功能模块进行模

Web开发流程

知乎上关于Web开发流程豪情给予的回答. web前端开发流程是什么?进行操作会用到哪些便捷的小工具?是先用模板做好,然后在基础上改吗??正常大家说的改框架是不是指的用模板做的网站原文件?前端开发做的文件一般是哪些?放在主机什么文件夹里啊? 1. web前端开发流程是什么?老板或甲方是一个需求的真正发起者,也是一个基础idea的梦想师,产品是需求专业化梳理或进行有效评估细化需求负责的,而设计是前端的上游,前端是设计的下游.设计的工作目的是把产品宏观的思维结果进行专业的处理,因为按一般的习惯,产品最

软件开发流程纲要及各个阶段产生的文档

转自:http://blog.csdn.net/flyfish1986/article/details/3870053 软件开发流程纲要及各个阶段产生的文档   作者:邵盛松 2009-2-9 1需求调研与分析 当我们做一个项目时,可能客户口头告诉你他想要做一个什么东西,或者给了你一些文档告诉你这就是需求.就根据几句口头讲述,或者一些文档,很难知道到底具体需要做什么.这时候就要对需求进行挖掘,以得到功能列表,或者用例图.这时候交流是非常重要的.通过不断的与客户进行交流,将用例详细化,也不必要追求

我们一般的前端开发流程

有些毕业生或非it行业的人,想了解真正的一个开发流程,就我个人的经验做以简单的分享,仅供参考,不是一个覆盖全行业的事实标准. 老板或甲方是一个需求的真正发起者,也是一个基础idea的梦想师,产品是需求专业化梳理或进行有效评估细化需求负责的, 而设计是前端的上游,前端是设计的下游.设计的工作目的是把产品宏观的思维结果进行专业的处理,因为按一般的习惯,产品最终的结果是原型图,而原型图可以理解为设计的草图, 对真正的用户来说,这个草图过于简单或不符合使用的操作习惯,所以需要设计师进行专业的处理,比如颜

Vue.js的复用组件开发流程

本文由蔡述雄发表 接下来我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程. 下面先看看我们的需求 列表组件quiList.vue 本节我们主要要完成这样一个列表功能,每一行的列表是一个组件,列表内可能出现按钮组件或者箭头组件,点击按钮组件可以自定义事件,同时可以根据不同的参数来决定当前列表是带按钮的列表or带箭头的列表. 首先看看quiList.vue //quiList.vue <template> <div class="qui-list"> &