kubernetes 社區(qū)每三個(gè)月發(fā)布一個(gè)新版本缎浇,可以說發(fā)布新版本的速度非车玻快陨帆,當(dāng)然,在生產(chǎn)環(huán)境中版本升級(jí)的速度可能跟不上新版本發(fā)布的速度已亥,那么確保目前使用的版本還處于社區(qū)的維護(hù)階段就非常重要了熊赖,kubernetes 官方對(duì)各個(gè)版本支持的時(shí)間是多長(zhǎng)呢?
kubernetes 發(fā)行版通常支持9個(gè)月虑椎,在此期間震鹉,如果發(fā)現(xiàn)嚴(yán)重的bug或安全問題,會(huì)在對(duì)應(yīng)的分支發(fā)布補(bǔ)丁版本捆姜。比如传趾,當(dāng)前版本為 v1.10.1,當(dāng)社區(qū)修復(fù)一些 bug 后泥技,就會(huì)發(fā)布 v1.10.2 版本浆兰。
官方支持時(shí)間說明如下:
Kubernetes version | Release month | End-of-life-month |
---|---|---|
v1.6.x | March 2017 | December 2017 |
v1.7.x | June 2017 | March 2018 |
v1.8.x | September 2017 | June 2018 |
v1.9.x | December 2017 | September 2018 |
v1.10.x | March 2018 | December 2018 |
v1.11.x | June 2018 | March 2019 |
v1.12.x | September 2018 | June 2019 |
v1.13.x | December 2018 | September 2019 |
v1.14.x | March 2019 | December 2019 |
v1.15.x | June 2019 | March 2020 |
v1.16.x | September 2019 | June 2020 |
到目前為止,v1.13.x 以前的版本已經(jīng)停止支持了珊豹,請(qǐng)盡快升級(jí)至高版本簸呈。
kubernetes 版本發(fā)布流程
翻譯自官方文檔:Kubernetes Release Versioning
說明:Kube X.Y.Z 代表 kubernetes 已經(jīng)發(fā)布的版本(git tag),這個(gè)版本包含所有的組件:apiserver, kubelet, kubectl, etc. (X 表示主版本號(hào), Y 是此版本號(hào), Z 是補(bǔ)丁版本店茶。)
版本發(fā)布時(shí)間
次版本發(fā)布計(jì)劃與時(shí)間表
-
Kube X.Y.0-alpha.W, W > 0 ( 分支:master)
- Alpha 版本大約每?jī)芍苤苯訌?master 分支發(fā)布一次蜕便。
- 沒有 cherrypick 版本。如有有嚴(yán)重的 bug 被修復(fù)贩幻,可以基于 master 分支提前創(chuàng)建一個(gè)新版本轿腺。
-
Kube X.Y.Z-beta.W (分支: release-X.Y)
當(dāng) master 完成 Kube X.Y 的功能后,在距 X.Y.0 發(fā)布前兩周會(huì)停掉 release-X.Y 分支丛楚,只將一些比較重要的 PR cherry-pick 到 X.Y族壳。
-
該分支會(huì)被標(biāo)記為 X.Y.0-beta.0,master 分支會(huì)被移到 X.Y+1.0-alpha.0趣些。
如果 X.Y.0-beta.0 的功能有缺陷决侈,還會(huì)發(fā)布其他的 beta 版本 (X.Y.0-beta.W | W > 0) 。
-
Kube X.Y.0 (分支: release-X.Y)
- 最終的 release 版本會(huì)提前兩周從 release-X.Y 分支上產(chǎn)生喧务。
- 在同一分支的同一 commit 處也會(huì)被標(biāo)記為 X.Y.1-beta.0赖歌。
- 在 X.Y.0 發(fā)布 3-4 個(gè)月后會(huì)發(fā)布 X.(Y-1).0。
-
Kube X.Y.Z, Z > 0 (分支: release-X.Y)
- 當(dāng) cherrypick commits 到 release-X.Y 分支時(shí)功茴,若有需要庐冯,也會(huì)發(fā)布相應(yīng)的補(bǔ)丁版本 (X.Y.Z-beta.W)。
- X.Y.Z 是直接從 release-X.Y 分支上產(chǎn)生的坎穿,當(dāng)使用 beta 版本在更新 pkg/version/base.go 后會(huì)被標(biāo)記為 X.Y.Z+1-beta.0展父。
-
Kube X.Y.Z, Z > 0 (分支: release-X.Y.Z)
主版本時(shí)間線
主版本暫時(shí)沒有預(yù)期發(fā)布的時(shí)間點(diǎn)惶凝,也沒有公布 2.0.0 的標(biāo)準(zhǔn)吼虎。到目前為止,我們還沒有對(duì)任何類型的不兼容更改(例如苍鲜,組件參數(shù)更改)思灰。之前討論過在發(fā)布 2.0.0 后 刪除 v1
API group/version,但目前沒有這樣做的計(jì)劃混滔。
支持的組件版本與兼容版本
我們希望用戶在生產(chǎn)中使用 kubernetes 最穩(wěn)定的版本洒疚,但升級(jí)版本需要一些時(shí)間,尤其是對(duì)于生產(chǎn)環(huán)境中的關(guān)鍵組件坯屿。我們也希望用戶更新到最新的補(bǔ)丁版本拳亿,補(bǔ)丁版本中包含一些重要的 bugfix,希望用戶盡快升級(jí)愿伴。
kubernetes 對(duì)各組件的版本也有一定的兼容性。具體的兼容策略是: slave組件可以與master組件最多延遲兩個(gè)版本(minor version)电湘,但是不能比 master 組件新隔节。client 不能與 master 組件落后一個(gè)次版本,但是可以高一個(gè)版本寂呛,也就是說: v1.3 的 master 可以與 v1.1怎诫,v1.2,v1.3 的 slave 組件一起使用贷痪,與 v1.2幻妓,v1.3,v1.4 client 一起使用劫拢。
此外肉津,我們希望一次“支持”三個(gè)次版本,“支持”意味著我們希望用戶在生產(chǎn)環(huán)境中運(yùn)行該版本舱沧,雖然我們可能對(duì)于不在支持的版本進(jìn)行 bugfix妹沙。例如,當(dāng) v1.3 發(fā)布時(shí)熟吏,將不再支持 v1.0距糖。此外新版本每三個(gè)月發(fā)行一次玄窝,也就是說一個(gè)版本僅支持 9 個(gè)月。
升級(jí)策略
用戶可以使用滾動(dòng)方式升級(jí)悍引,一次升級(jí)一個(gè)小版本恩脂,不建議直接跨度兩個(gè)及以上小版本,升級(jí)時(shí)先升級(jí) master 再升級(jí) node 節(jié)點(diǎn)趣斤。
以下是在實(shí)際升級(jí)過程中的一些經(jīng)驗(yàn):
金絲雀部署:即灰度升級(jí)俩块,若使用二進(jìn)制部署,則在原有集群直接替換二進(jìn)制進(jìn)行升級(jí)唬渗,運(yùn)維代價(jià)小典阵,不會(huì)導(dǎo)致服務(wù)中斷;若以 pod 方式部署的 master 組件直接替換鏡像進(jìn)行升級(jí)镊逝,若以 deployment 方式部署 master 組件壮啊,對(duì)于 apiserver 可以參考阿里的經(jīng)驗(yàn),設(shè)置 maxSurge=3 的方式升級(jí)撑蒜,以避免升級(jí)過程帶來的性能抖動(dòng)歹啼,但所有的 node 組件依然需要替換二進(jìn)制升級(jí)。
藍(lán)綠部署:搭建一套新的集群座菠,這種方式升級(jí)方式比較麻煩狸眼,涉及到數(shù)據(jù)遷移,IP 更換操作浴滴,對(duì)于部分業(yè)務(wù)不適用拓萌,風(fēng)險(xiǎn)不可控。
可以看到升略,kubernetes 社區(qū)的更新速度非澄⑼酰快,堅(jiān)決不建議自己維護(hù)一套 kubernetes 版本品嚣,每次升級(jí)巨麻煩炕倘,將所有修改過的 commit cherry-pick 到每個(gè)新版本上,也容易出錯(cuò)翰撑,有些新版本的改動(dòng)也比較大罩旋,之前修改過的地方在新版中有可能已經(jīng)被移除或放在別的位置了。
詳細(xì)的升級(jí)策略可以參考:kubernetes集群升級(jí)的正確姿勢(shì)眶诈。
結(jié)論
kubernetes 每三個(gè)月發(fā)布一個(gè)版本涨醋,社區(qū)僅維護(hù)最新的三個(gè)版本,一個(gè)版本的維護(hù)時(shí)間為 9 個(gè)月逝撬,請(qǐng)盡量保持生產(chǎn)環(huán)境的版本在社區(qū)維護(hù)范圍內(nèi)东帅,版本升級(jí)時(shí)盡量保持小版本滾動(dòng)升級(jí),不建議跨多個(gè)版本升級(jí)球拦。
參考:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/release/versioning.md