2020 kubernetes講座(上)-CKA考試指南(二)kubernetes基礎(chǔ)知識

1. 課程目標(biāo)

  • 容器編排

  • kubernetes的特性

2. 容器編排

2.1. 傳統(tǒng)編排工具

  • 手動部署:比如我們部署tomcat,我們就需要下載war包-->停止tomcat-->備份原來的解壓出來的文件-->把war包放在指定位置-->解壓war包-->修改war包的位置文件,把鏈接測試數(shù)據(jù)庫的用戶名和密碼改成生產(chǎn)的-->啟動應(yīng)用-->監(jiān)控日志,訪問應(yīng)用看看是不是正常-->反饋給開發(fā)

  • shell編程:編寫腳本,在機(jī)器上執(zhí)行

  • 自動化框架(ansible,puppet,saltstack,saltstack):比如ansible,通過我們定義的playbook,還有一些參數(shù)的定義,邏輯的處理,完成對多種應(yīng)用程序的組合部署

但是有了Docker之后,我們的應(yīng)用程序可以容器化,各種應(yīng)用程序都被封裝在了容器中執(zhí)行。想象一下,我們最早在使用Ansible編排應(yīng)用程序的過程當(dāng)中,我們經(jīng)常會發(fā)現(xiàn)對象在不停的變化,這個時候,我們的ansible或者puppet這種傳統(tǒng)的應(yīng)用程序或者工具已經(jīng)不再適合這種場景了。因?yàn)?,容器化所提供的接口,與我們早期傳統(tǒng)形式上的應(yīng)用程序的訪問控制和管理是有所不同的。所以,在docker時代就開始呼喚新式的,面向容器化應(yīng)用的編排工具。

2.2. 一般編排工具

  • 第一款是Docker自身提供的,叫docker compose,
image.png

這個工具更適合于單機(jī)編排。他只能面向一個docker hosts來進(jìn)行編排操作?;蛘呤歉舆m用于這種情景。Docker就不得不開始提供一款工具能夠?qū)⒍嘀鳈C(jī)的Docker host,也就是很多的docker主機(jī),能有一定程度上的調(diào)度效果的,至少是面向集群的編排效果。那于是Docker后來提供了另外一款工具,叫docker swarm,而這個Docker swarm就是一個能夠?qū)⒍鄠€docker整合成為由一個統(tǒng)一的管理工具管理之下的集群的工具,我們將多個host所提供的計算資源整合在一起,整合成為一個資源池,隨后docker compose在編排時,只需要針對Docker swarm整合出來的資源池進(jìn)行編排就可以了,而不用關(guān)心底層是什么樣的主機(jī),或者有幾個docker主機(jī)。當(dāng)然,docker swarm也是一個應(yīng)用程序,甚至可以理解成為Docker自身的應(yīng)用程序,那么,這里面的主機(jī),怎樣成為docker主機(jī)的呢?一個主機(jī),要想加入docker swarm資源池,成為docker swarm的成員,他自己首先是一個docker 主機(jī),那么docker 如何安裝上去,他怎樣加入docker swarm集群,成為docker swarm資源池的一員呢?我們就需要另外的工具,叫docker machine,能夠?qū)⒁粋€主機(jī)迅速初始化,滿足加入docker swarm的集群的先決條件,從而能夠成為docker swarm集群的一份子,這樣一個預(yù)置處理工具,這就是人們當(dāng)年口中的docker編排三劍客。我們知道,此前docker compose 面向單個的docker host,照樣可以工作,當(dāng)時的人們就是這么編排工具。

Docker三劍客:docker compose,docker hosts,docker swarm

image.png

我們可以看到,人們不再是面向單個主機(jī)上的應(yīng)用程序去編排,就好像ansible,他本來就可以面向多臺主機(jī)上的應(yīng)用程序去編排,那么,容器化的編排工具也需要面向多級執(zhí)行編排,而且更重要的是,我們將來要運(yùn)行容器時,在不同主機(jī)上編排時候,可以會用到同一個應(yīng)用程序,這同一個應(yīng)用程序,如果編排在不同主機(jī)上不相沖突等各種任務(wù),都需要有Docker編排工具,或者容器編排工具來實(shí)現(xiàn)。

  • Mesos:那么,除了docker自身所提供的工具,我們還有第二類工具,mesos。
image.png

目前是apache旗下的產(chǎn)品。他原來是由Twitter受到google borg系統(tǒng)的啟發(fā),想開發(fā)一款資源管理的軟件。整個時候,他們發(fā)現(xiàn)加州大學(xué)博克利分校AMPLab正在開發(fā)一款叫做mesos的軟件,后來他們就把負(fù)責(zé)開發(fā)這款軟件的人挖到了Twitter,然后開始開發(fā)和部署mesos。但是mesos是一個面向IDC的OS,IDC的操作系統(tǒng)能夠把IDC當(dāng)中所有的硬件所提供的計算資源統(tǒng)一的調(diào)度和分配,但是他所面向的上層接口,提供的不是容器運(yùn)行的接口,而只是資源分配工具,并非能夠運(yùn)行和托管容器的,所以在此之上,他必須還要提供一個能夠允許容器編排的框架,叫marathon。

image.png

盡管mesos+marthon的解決方案最終并沒有成為容器編排的主流,但是畢竟術(shù)業(yè)有專攻,mesos的用戶之地不在于編排,而在于資源整合,所以,mesos并沒有像docker三劍客一樣逐漸走向沒落,而是在另外的領(lǐng)域牢牢占領(lǐng)一席之地,這就是大數(shù)據(jù)領(lǐng)域,比較知名的就是spark+mesos的解決方案。這里就不多說了,有興趣的同學(xué)可以深入學(xué)習(xí)一下

image.png

2.3. 文藝編排工具

而這場容器編排之爭的最終獲勝者,就是我們要學(xué)習(xí)的kubernetes了,Kubernetes在這個領(lǐng)域中據(jù)說已經(jīng)牢牢占據(jù)了90%以上的份額。

k8s出現(xiàn)的時間并不是很長,只有區(qū)區(qū)幾年的時間,kubernetes中文的意思叫做舵手,而他的標(biāo)志就是一個舵,或者叫飛行員。他主要是由Google的幾位工程師創(chuàng)立的,大概是在2014年對外首次宣布,一直到今天為止,也不過是短短6年的時間,kubernetes的開發(fā),深受google內(nèi)部的borg系統(tǒng)的影響。

image.png

Borg系統(tǒng)是google內(nèi)部的,已經(jīng)工作了10幾年的,非常穩(wěn)定的容器編排工具。Borg是google內(nèi)部使用的大規(guī)模的集群管理系統(tǒng),久負(fù)盛名,人們對他覬覦已久,但是沒有渠道獲得的話,就開始開發(fā)自己的產(chǎn)品。當(dāng)谷歌的攻城獅發(fā)現(xiàn)這塊市場要被占領(lǐng)的時候,就用go語言重構(gòu)了borg系統(tǒng),沿用思路而不沿用代碼的方式來進(jìn)行構(gòu)建,而且google公司使用非常聰明的做法,先把各大廠商集合在一起,特別是Linux基金會,成立了CNCF,把kubernetes貢獻(xiàn)給了開源組織,然后用互相制約的方式來管理kubernetes。同時獲得了大量開發(fā)者,特別是開源愛好者的好評。短短幾年時間,kubernetes系統(tǒng)發(fā)展非常的迅速,尤其是國內(nèi)對于kubernetes這種新興的技術(shù)傾注了大量的心血和精力,在相關(guān)項目的參與度非常高。也正是kubernetes是站在borg系統(tǒng)的肩膀上,他從一出世開始就吸引了太多的目光和關(guān)注,到現(xiàn)在為止,他也確實(shí)沒有辜負(fù)人們的期望。

kubernetes的1.0版本在2015年7月份才發(fā)布,到今天為止,它的版本已經(jīng)到了1.18版本,kubenetes的代碼托管在github之上,差不多是每年4個版本的速度在迭代。而2017年在容器的發(fā)展史上是非常具有里程碑意義的一年,因?yàn)樵谶@一年當(dāng)中AWS,還有微軟的Azure,還有國內(nèi)的著名的阿里云,這些著名的云計算公司都宣布在他們的平臺上原生支持k8s,他允許用戶點(diǎn)擊幾個按鈕就可以快速部署k8s應(yīng)用,這種就是面向kuberntes的云原生,還有一些平臺甚至可以吧自己的k8s直接提供給用戶,讓客戶可以直接把應(yīng)用部署在上面,也就是容器即服務(wù)的環(huán)境,國內(nèi)比如靈雀云就是一個PaaS的平臺。也正是因?yàn)檫@些大型云廠商的支持,也使得K8s在業(yè)內(nèi)收到了廣泛的認(rèn)可和支持,大概在2017年10月份,docker宣布他們的docker swarm上也支持k8s和docker compose,我們知道docker swarm本來是docker公司用來占領(lǐng)容器編排市場的最有力武器,但是docker在他的企業(yè)版本的發(fā)行過程當(dāng)中,同時支持swarm和kuberntes,本來是競爭對手的,但是后來不得不把他整合進(jìn)自己的產(chǎn)品當(dāng)中去,才能獲得競爭優(yōu)勢,同時rkt也是另外一款容器工具,rkt的容器工具當(dāng)中,也有自己的編排工具叫fleet,但是他也放棄了這個項目,而原生使用kubernetes,rkt是coreos旗下的產(chǎn)品,而coreos目前已經(jīng)被紅帽收購了。紅帽在他的PaaS產(chǎn)品openshift的核心就是kubernetes,但是kubernetes只是一個容器編排工具,沒有到達(dá)PaaS這種平臺即服務(wù)的標(biāo)準(zhǔn)。而openshift卻解決了這些問題,成為了一款真正意義上的PaaS產(chǎn)品,我們也可以認(rèn)為openshift是kuberntes的發(fā)行版。我們知道,kubernetes做的非常底層,真正離終端用戶要自己使用kubernetes,你需要在kubernetes上面部署很多工具,以滿足devops的需要,或者滿足自己PaaS的需要,那么openshifit就是一個解決方法,他的里面已經(jīng)集成了一切關(guān)于devops和PaaS所需要的一起工具。紅帽又被IBM收購了,那么openstack這款PaaS就屬于IBM了,我們可以看到這些大廠商已經(jīng)花了大價錢在容器編排市場上

3. kubernetes特性

下面是官方列出的kubernetes的特性

image.png

咱們分三類來說:

3.1. 還在測試階段的特性

  • Service Topology:基于集群的拓?fù)鋪砺酚煞?wù)的流量,有點(diǎn)像service mesh。1.17新特性,還在alpha測試。

  • EndpointSlices:可以伸縮的去追蹤kubernetes集群中的網(wǎng)絡(luò)節(jié)點(diǎn)。1.17新特性,beta測試

這兩個是新特性,還在測試當(dāng)中,我們目前不關(guān)注。

3.2. 一般的特性

  • Self-healing:一旦容器崩潰,由于容器易于啟動,我們沒有必要修復(fù)他,直接kill掉重新啟動一個新的。有了k8s這樣的平臺之后,我們更多的是關(guān)注群體,而不再是個體。如果個體壞了就直接干掉,換一個新的。

  • Automatic bin packing:“根據(jù)資源需求和其他約束自動放置容器,同時不會犧牲可用性,將任務(wù)關(guān)鍵工作負(fù)載和盡力服務(wù)工作負(fù)載進(jìn)行混合放置,以提高資源利用率并節(jié)省更多資源?!惫俜降拿枋龊軙崦?,其實(shí)就是對資源的限制,我們會對正在運(yùn)行的容器進(jìn)行資源使用的限制,這樣,就實(shí)現(xiàn)了一定程度上的隔離,讓其他程序在運(yùn)行的時候不會受到傷害,就好像把應(yīng)用程序放進(jìn)bin中打包了一樣。

  • IPv4/IPv6 dual-stack:自動的給pod和service分配IPv4或者IPv6的地址

  • Batch execution:作為服務(wù)的擴(kuò)展,kubernetes還可以管理批量操作,CI的工作,替換失敗的容器

  • Horizontal scaling:水平擴(kuò)展,通過一條簡單的命令或者圖形界面,或者基于CPU的使用率自動的擴(kuò)展應(yīng)用。一個不夠就在啟動一個,再不夠就在啟動一個,只要你物理平臺的支撐是足夠的。但是我們的物理平臺往往是不夠的,所以我們會選擇上公有云,而公有云的特性,按需付費(fèi),彈性伸縮就和容器的水平擴(kuò)展功能無縫結(jié)合,實(shí)現(xiàn)真正意義上的自動擴(kuò)展。

3.3. 考試會考的特性

  • Service discovery and load balancing:服務(wù)發(fā)現(xiàn)和負(fù)載均衡,當(dāng)我們在k8s上有很多應(yīng)用程序的時候,程序和程序之間如果存在依賴,他就可以通過服務(wù)發(fā)現(xiàn)的方式,找到依賴的服務(wù),如果每個服務(wù),我們啟動了多個容器,他可以實(shí)現(xiàn)自動的負(fù)載均衡。

  • Storage orchestration:把存儲卷實(shí)現(xiàn)動態(tài)編輯,也就意味著某一個容器需要用到存儲卷時,根據(jù)容器自身的需要,創(chuàng)建能夠滿足他需要的存儲卷,實(shí)現(xiàn)存儲編排

  • Automated rollouts and rollbacks:Kubernetes支持一步一步的推出對應(yīng)用程序或其配置的更改,同時監(jiān)視應(yīng)用程序運(yùn)行狀況,以確保它不會同時殺死所有實(shí)例。一旦出現(xiàn)問題,Kubernetes會為您回滾更改。從而實(shí) 現(xiàn)了灰度或者金絲雀發(fā)布

  • Secret and configuration management:部署和更新機(jī)密和應(yīng)用程序配置,而不重建映像,也不公開堆棧配置中的機(jī)密。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容