新聞中心
Kubernetes 是一個可移植的、可擴展的開源平臺,用于管理容器化的工作負載和服務(wù),可促進聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態(tài)系統(tǒng)。Kubernetes 的服務(wù)、支持和工具廣泛可用。

創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、海棠網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為海棠等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
開發(fā)環(huán)境構(gòu)建
Fork
把github.com/kubernetes/kubernetes 項目fork到自己的倉庫
Clone到本地
git clone https://github.com//kubernetes
設(shè)置remote
git remote add upstream https://github.com/kubernetes/kubernetes.git
git remote set-url --push upstream no-pushing
注意此時你的本地倉庫就有了兩個遠程倉庫,一個叫upstream(社區(qū)倉庫) 一個叫origin(你fork的)
代碼同步
當社區(qū)倉庫代碼更新時,我們希望與之同步,那么:
git pull upstream master # 先同步到本地
git push # push 到origin
你修改了代碼希望同步給社區(qū),那么PR即可
分支管理
假設(shè)我們要定制一個功能,比如我之前做的對kubelet進行l(wèi)xcfs增強,而我們線上又運行了多個版本的k8s,我們希望這個特性幾個版本都可以加上,而且未來k8s發(fā)布新版本時同樣能merge進去這功能。
要做到這個git里的兩個命令非常重要:
git cherry-pick 能指定merge特定的變更
git rebase 通常我用來合并多個commit, 雖然cherry-pick也支持多個commit,但是多了容易混亂
首先從master分支HEAD切出一個分支,我們有所的功能開發(fā)在這個分支上進行,如我做了c1 c2兩次commit。
然后希望把這個功能merge到2.0版本中,我們先從2.0的tag切一個分支出來,然后在這個分之上去cherry-pick c1 c2即可,非常簡單方便,其它版本需要此功能同理。
這里注意,如果不用cherry-pick 直接merge的話,因為2.0版本之后還有很多次變更,會產(chǎn)生大量沖突。
CI編譯與發(fā)布
筆者比較喜歡drone,所以編譯與發(fā)布都是用的drone,安利個drone免費公有服務(wù)非常好用
由于k8s各個版本可能需要的golang版本都不太一樣,所以最方便的還是在容器中進行構(gòu)建,但并不是隨便一個golang的鏡像都可以進行構(gòu)建,因為k8s還需要拷貝代碼,生成代碼等依賴了一些小工具,我這里提供了一個官方的編譯鏡像:fanux/kube-build:v1.12.1-2
發(fā)布時用了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 # 幾個環(huán)境變量特別重要,如不加clean編譯出來版本號就會加dirty后綴,需要加版本號不然很多時候無法正常工作,加構(gòu)建平臺,這樣無需編譯多個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
這樣提交代碼后刷刷抖音等結(jié)果即可。。
實踐案例
k8s kubeadm默認證書的時間是一年,我希望延長到99年,這樣就需要定制化開發(fā),那么問題來了,因為版本眾多,是不是需要每個版本都去改一下,那太麻煩了,正確的做法如下:
從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了一次,現(xiàn)在只需要把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
標題名稱:詳解kubernetes開發(fā)流程
文章源于:http://m.fisionsoft.com.cn/article/djsepio.html


咨詢
建站咨詢
