摘要:到現(xiàn)在為止,部署有狀態(tài)應(yīng)用比如分布式數(shù)據(jù)庫已經(jīng)是一個(gè)棘手的問題,但是其實(shí)也不是做不到。我們也會(huì)展示如何在本地更加輕松地部署分布式數(shù)據(jù)庫在我們與客戶目前正在積極處理的區(qū)域內(nèi)。
伴隨著5000多次的提交,以及大約350位貢獻(xiàn)者在社區(qū)以及該行業(yè)的貢獻(xiàn),Kubernetes現(xiàn)在已經(jīng)到1.3版本了,已于上周發(fā)布!網(wǎng)址:點(diǎn)這里。
Kubernetes的首次發(fā)布要追溯到兩年前。這個(gè)項(xiàng)目的社區(qū)參與度和創(chuàng)新度都達(dá)到了驚人的地步,有個(gè)人參與合作,也有行業(yè)領(lǐng)導(dǎo)者(谷歌,紅帽等等)來推進(jìn),并且給所有人帶來生產(chǎn)級(jí)容器集群管理。這篇博客就是來探究Kubernetes1.3中的一些隱藏功能的。
Kubernetes1.3中的新功能Kubernetes1.3已經(jīng)把重點(diǎn)放到了跨集群、跨區(qū)域和跨云邊界上的部署和擴(kuò)容服務(wù),運(yùn)行稍大范圍的工作(包括有狀態(tài)服務(wù),比如說數(shù)據(jù)庫),增加規(guī)模和自動(dòng)化,并且支持rkt,OCI&CNI容器標(biāo)準(zhǔn)。
PetSet
到現(xiàn)在為止,部署有狀態(tài)應(yīng)用(比如分布式數(shù)據(jù)庫)已經(jīng)是一個(gè)棘手的問題,但是其實(shí)也不是做不到。Jetstack在倫敦的KubeCon上演講描述了這些挑戰(zhàn),同樣也描述了解決方案的普通模式。網(wǎng)址:鏈接。
社區(qū)引進(jìn)的alpha版本中的“PetSet”對(duì)象來描述這樣的系統(tǒng)。kubernetes現(xiàn)在有一個(gè)功能,可以用來部署Pods,這些Pods的功能是保障網(wǎng)絡(luò)和存儲(chǔ)身份。它甚至還可以動(dòng)態(tài)規(guī)定云端的按需存儲(chǔ)(目前只能用在AWS EBS和GCE PD上)。
集群聯(lián)盟(“Ubernetes”)
Kubernetes1.3令運(yùn)行在多個(gè)集群上的服務(wù)發(fā)現(xiàn)成為可能,可能會(huì)讓跨區(qū)域,或者跨云提供商來供容器或者外部客戶使用。這個(gè)“Ubernetes”聯(lián)盟可以被用來增加HA,地理分配和混合云/多云端,是令人興奮的第一階段,并會(huì)在1.4及之后的版本中繼續(xù)開發(fā)和完善。
Rktnetes 1.0
Kubernetes創(chuàng)建之初就沒有與特定容器運(yùn)行環(huán)境綁定。Kubernetes1.3版本是第一個(gè)整合rkt運(yùn)行環(huán)境的穩(wěn)定版本,可以用來替換Docker(目前為止的默認(rèn)運(yùn)行環(huán)境)。是的,這就是rktnetes。
rkt是Core OS一個(gè)快速成熟的項(xiàng)目,現(xiàn)在已經(jīng)是1.10.0版本了。它實(shí)現(xiàn)了應(yīng)用程序容器規(guī)范,還擁有很多可以完美取代Docker的功能。比如,兼容初始化系統(tǒng)(如systemd,nspawn),確保有更大的隔離(使用LKVM stage1)。
在最近的博客中從CoreOS團(tuán)隊(duì)那里了解更多關(guān)于rktnetes的信息。網(wǎng)址:鏈接。
可擴(kuò)展性
Kubernetes現(xiàn)在支持2000個(gè)節(jié)點(diǎn)的集群,同時(shí)還減少了端對(duì)端Pod啟動(dòng)時(shí)間。在這樣的情況下,最后造成了可擴(kuò)展性的改進(jìn)的挑戰(zhàn)就是使用基于Protocol Buffer(網(wǎng)址:鏈接)系列化的API,而不是JSON,最后對(duì)可擴(kuò)展性的做了改進(jìn)。
最近的博客帖子描述了一些改進(jìn)的細(xì)節(jié),以及項(xiàng)目使用的Kubemark性能測(cè)試工具。網(wǎng)址:鏈接。
在幾周或幾個(gè)月后,Jetstack將會(huì)在博客中更加細(xì)致地講述這些新的用戶面對(duì)的功能,重點(diǎn)是,他們還會(huì)解釋如何開啟,如何將他們用到實(shí)踐中去。比如,我會(huì)展示如何處理使用Kubernetes多區(qū)/多云。我們也會(huì)展示如何在本地更加輕松地部署分布式數(shù)據(jù)庫——在我們與客戶目前正在積極處理的區(qū)域內(nèi)。
Kubernetes1.3隱藏的新功能這篇帖子中除了主要的部分,我們還想要引出一些我們十分喜歡的,但是知道的人還很少的功能,但是這些功能也同樣有用,同樣十分重要。要注意的是,一些功能和增強(qiáng)功能都還是alpha版本。
Kubectl Deployment
Deployment是一個(gè)提供聲明式,服務(wù)端更新Pod和ReplicaSets的API。雖然它還是個(gè)測(cè)試版功能,但是它現(xiàn)在已經(jīng)被廣泛接受和使用了,并處于活躍開發(fā)期,包括計(jì)劃和進(jìn)行中的新功能(具體請(qǐng)參閱路線部署圖)。在Kubernetes1.3中,新的命令已經(jīng)被添加到kubectl使管理和監(jiān)控部署更新更加便利。
更新Deployment的容器鏡像
以前,如果你想要在ReplicaSet中為Pods更新容器鏡像,通過Deployment管理,你可以使用kubectl并且直接編輯Deployment的YAML。
新的命令kubectl設(shè)置現(xiàn)在允許容器鏡像在單行命令行上設(shè)置。
監(jiān)控deployment rollout
為了監(jiān)控更新的rollout,并且驗(yàn)證它是否成功,這里有個(gè)新的很方便的命令:rolloutstatus。比如,nginx/nginx:1.7.9中查看nginx/nginx:1.9.1 的rollout。
垃圾回收(測(cè)試版)
Kubernetes資源常常互相依賴。比如,ReplicaSets根據(jù)指定的模板創(chuàng)建Pods。如果你想要?jiǎng)h除這個(gè)ReplicaSet,你就必須要找出跟選擇器匹配的Pod,串聯(lián)刪除匹配的Pods。
以后在1.4版本或者更高版本中,這樣的串聯(lián)清理會(huì)由KCM(kube controller manager)來處理。在準(zhǔn)備階段,1.3為API對(duì)象引入了額外的元數(shù)據(jù)域ownerReferences。對(duì)于ReplicaSet/Pods的例子,Pods包含了到它們所有者的ReplicaSet的引用。一旦ReplicaSet被刪除,garbage collector也會(huì)刪除這個(gè)Pod。還有一個(gè)叫做orphanDependents的配置選項(xiàng),可以禁用串聯(lián)刪除的功能。
垃圾回收在1.3中還是一個(gè)alpha功能,所以默認(rèn)狀態(tài)下,它是禁用的。要打開這個(gè)功能,你需要打開kube-apiserver和KCM,還有flag——啟用garbage collector。
在用戶指南那里了解更多關(guān)于garbage collector的功能,要注意的是,使用的時(shí)候要自己承擔(dān)風(fēng)險(xiǎn)(畢竟是測(cè)試版)。
Shell補(bǔ)全整合到kubectl
作為資深kubectl用戶,你可能已經(jīng)知道這個(gè)補(bǔ)全腳本,保存在/contrib/completions核心項(xiàng)目的文件夾中。這不僅提供了kubectl的子命令和參數(shù),還提供了像Namespace和Pods資源的名字。
像往常一樣,對(duì)于Go語言二進(jìn)制文件來說,kubectl的分布通常只包括單個(gè)文件。這就令保留兼容性的完整文件更加困難了。出于這個(gè)原因,這個(gè)腳本從1.3版本起就被整合到kubectl?,F(xiàn)在加載補(bǔ)全性跟添加一行代碼一樣簡單:
Init containers(測(cè)試版)
測(cè)試版本功能init containers允許在長期運(yùn)行的主要Pod容器發(fā)布之前運(yùn)行某一命令。這些命令按順序執(zhí)行,只有當(dāng)這些命令成功運(yùn)行,主容器才會(huì)開始運(yùn)行。這就允許你能夠下載特定的文件到數(shù)據(jù)卷,生成應(yīng)用程序的配置文件,在這個(gè)過程中不需要再重新打包到容器鏡像等等。
下面是Pod運(yùn)行kubectl的特定版本的例子。在每次Pod發(fā)布的時(shí)候下載這個(gè)版本。為了演示,第二個(gè)init containers包括了一個(gè)執(zhí)行kubectl二進(jìn)制的命令。Pod說明書包括了必要的annotation,如下圖所示:
Pod一旦在狀態(tài)內(nèi)運(yùn)行,你就可以使用下載好的kubectl二版本-kubectl exec到Pod容器中來運(yùn)行kubectl;):
在鏈接里了解更多init containers及其使用方法。
為pods/containers使用定制配置(測(cè)試版)
docker 從1.10版本開始支持配置Seccomp策略來初步限制容器執(zhí)行特權(quán)。Seccomp通過攔截系統(tǒng)調(diào)用來實(shí)施這個(gè)沙箱機(jī)制。這個(gè)過濾器由BPF規(guī)則來定義。
要把特定配置文件綁定到Pod上,你可以使用以下alpha annotations:
為所有Pod的容器定義一個(gè)Seccomp:seccomp.security.alpha.kubernete.io/pod
為單個(gè)容器定義一個(gè)Seccomp文件:container.seccomp.security.alpha.kubernetes.io/${container_name}
對(duì)注釋的值,你可以使用以下內(nèi)容:
如果你想要使用定制配置(前綴是localhost/),你必須把這些復(fù)制到你集群中的每一個(gè)工作節(jié)點(diǎn)。文件的默認(rèn)文件夾是/var/lib/kubelet/seccomp.
例子:如何阻止chmod 系統(tǒng)調(diào)用
在這個(gè)例子中,我們創(chuàng)建了兩個(gè)Pods。都要嘗試在文件上修改權(quán)限。當(dāng)Pod chmod-unconfined用Docker的默認(rèn)文件運(yùn)行成功,在Pod chmod-prevented中同樣的命令行運(yùn)行失敗,因?yàn)檫@是它的Seccomp文件所不允許的。
要清楚的是你必須滿足以下要求才可以:
Docker版本必須1.10及以上
Kubernetes的版本要1.3.0-beta.2版本及以上
要復(fù)制prevent-chmod到所有的worker節(jié)點(diǎn)
Seccomp Profile/var/lib/kubelet/seccomp/prevent-chmod
Pod specification seccomp-pods.yaml
create pods
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/32483.html
摘要:在容器之戰(zhàn)中,谷歌宣布了最新開源容器編排引擎版本。這個(gè)是谷歌對(duì)抗計(jì)劃將和核心引擎結(jié)合在一起的舉動(dòng)。選擇托管環(huán)境來運(yùn)行工作伴隨著版本的發(fā)布,谷歌宣布它的托管容器管理平臺(tái),已經(jīng)更新到最新的版本。 在容器之戰(zhàn)中,谷歌宣布了最新開源容器編排引擎Kubernetes1.3版本。此次的發(fā)布是在 Docker 公司發(fā)布 Docker 1.12 版本之后,該版本帶有內(nèi)置的 Swarm 編排功能。 雖然...
摘要:執(zhí)行該初始化任務(wù)的容器被成為初始化容器。目前,有等狀態(tài)。網(wǎng)絡(luò)身份的維護(hù)主要通過穩(wěn)定的和來維護(hù),他們通過的配置文件指定。若其操作導(dǎo)致最小可用數(shù)低于應(yīng)用要求,則操作會(huì)被拒絕。 本文討論 K8S 1.3 的一些新功能,以及正在進(jìn)行中的功能。讀者應(yīng)該對(duì) kubernetes 的基本結(jié)構(gòu)已經(jīng)有所了解。 支持更多類型的應(yīng)用 1、Init container Init container 是1.3 ...
摘要:隨著發(fā)布,現(xiàn)在能支持個(gè)節(jié)點(diǎn)的集群即千萬請(qǐng)求秒,附帶對(duì)大多數(shù)操作尾部這段延遲降低。的千萬并發(fā)令人乍舌三個(gè)月后,將會(huì)再次帶來倍的提升。 隨著Kubernetes1.2v發(fā)布,K8S現(xiàn)在能支持1000個(gè)節(jié)點(diǎn)的集群(即1千萬請(qǐng)求/秒),附帶對(duì)大多數(shù)API操作(99%尾部這段)延遲降低80%。這意味著在最近的6個(gè)月內(nèi),K8S支持的容量增加了10倍同時(shí)還保證用戶使用感受——99%pod啟動(dòng)時(shí)間少于...
摘要:正在加速以容器技術(shù)運(yùn)行有狀態(tài)服務(wù)在生產(chǎn)環(huán)境中的采用,這時(shí)我們就更需要關(guān)心性能和易于部署。這些運(yùn)行有狀態(tài)服務(wù)的容器需要特殊處理就帶來了新的需求,包括更長的生命周期,配置依賴,有狀態(tài)的故障轉(zhuǎn)移以及對(duì)性能的要求。 編者按:本文作者是 Diamanti 的產(chǎn)品 VP Mark Balch,他將更多的分享他們向 Kubernetes做出的一些貢獻(xiàn)。這篇文章是關(guān)于 Kubernetes 1.3 新...
摘要:正在加速以容器技術(shù)運(yùn)行有狀態(tài)服務(wù)在生產(chǎn)環(huán)境中的采用,這時(shí)我們就更需要關(guān)心性能和易于部署。這些運(yùn)行有狀態(tài)服務(wù)的容器需要特殊處理就帶來了新的需求,包括更長的生命周期,配置依賴,有狀態(tài)的故障轉(zhuǎn)移以及對(duì)性能的要求。 編者按:本文作者是 Diamanti 的產(chǎn)品 VP Mark Balch,他將更多的分享他們向 Kubernetes做出的一些貢獻(xiàn)。這篇文章是關(guān)于 Kubernetes 1.3 新...
閱讀 2706·2023-04-26 02:17
閱讀 1705·2021-11-24 09:39
閱讀 1149·2021-11-18 13:13
閱讀 2952·2021-09-02 15:11
閱讀 2892·2019-08-30 15:48
閱讀 3479·2019-08-30 14:00
閱讀 2548·2019-08-29 13:43
閱讀 719·2019-08-29 13:07