1.Kubernetes的介紹
1.1Kubernetes與Docker
2010年辟灰,幾個搞IT的年輕人丰捷,在美國舊金山成立了一家名叫“dotCloud”的公司。
這家公司主要提供基于PaaS的云計算技術(shù)服務(wù)属提。具體來說权逗,是和LXC(Linux Container容器是一種內(nèi)核虛擬化技術(shù),可以提供輕量級的虛擬化冤议,以便隔離進程和資源)有關(guān)的容器技術(shù)旬迹。
后來,dotCloud公司將自己的容器技術(shù)進行了簡化和標準化求类,并命名為——Docker。
Docker技術(shù)誕生之后屹耐,并沒有引起行業(yè)的關(guān)注尸疆。而dotCloud公司椿猎,作為一家小型創(chuàng)業(yè)企業(yè),在激烈的競爭之下寿弱,也步履維艱犯眠。
正當他們快要堅持不下去的時候,腦子里蹦出了“開源”的想法症革。
什么是“開源”筐咧?開源,就是開放源代碼噪矛。也就是將原來內(nèi)部保密的程序源代碼開放給所有人量蕊,然后讓大家一起參與進來,貢獻代碼和意見艇挨。
Open Source残炮,開源
有的軟件是一開始就開源的。也有的軟件缩滨,是混不下去势就,創(chuàng)造者又不想放棄,所以選擇開源脉漏。自己養(yǎng)不活苞冯,就吃“百家飯”嘛。
2013年3月侧巨,dotCloud公司的創(chuàng)始人之一舅锄,Docker之父,28歲的Solomon?Hykes正式?jīng)Q定刃泡,將Docker項目開源巧娱。
Solomon?Hykes
不開則已,一開驚人烘贴。
越來越多的IT工程師發(fā)現(xiàn)了Docker的優(yōu)點禁添,然后蜂擁而至,加入Docker開源社區(qū)桨踪。
Docker的人氣迅速攀升老翘,速度之快,令人瞠目結(jié)舌锻离。
開源當月铺峭,Docker 0.1版本發(fā)布。此后的每一個月汽纠,Docker都會發(fā)布一個版本卫键。到2014年6月9日,Docker 1.0版本正式發(fā)布虱朵。
此時的Docker莉炉,已經(jīng)成為行業(yè)里人氣最火爆的開源技術(shù)钓账,沒有之一。甚至像Google絮宁、微軟梆暮、Amazon、VMware這樣的巨頭绍昂,都對它青睞有加啦粹,表示將全力支持。
Docker火了之后窘游,dotCloud公司干脆把公司名字也改成了Docker Inc.唠椭。
Docker和容器技術(shù)為什么會這么火爆?說白了张峰,就是因為它“輕”泪蔫。
在容器技術(shù)之前,業(yè)界的網(wǎng)紅是虛擬機喘批。虛擬機技術(shù)的代表撩荣,是VMWare和OpenStack。
相信很多人都用過虛擬機饶深。虛擬機餐曹,就是在你的操作系統(tǒng)里面,裝一個軟件敌厘,然后通過這個軟件台猴,再模擬一臺甚至多臺“子電腦”出來。
在“子電腦”里饱狂,你可以和正常電腦一樣運行程序,例如開QQ宪彩。如果你愿意休讳,你可以變出好幾個“子電腦”,里面都開上QQ尿孔】∪幔“子電腦”和“子電腦”之間,是相互隔離的活合,互不影響雏婶。
虛擬機屬于虛擬化技術(shù)。
而Docker這樣的容器技術(shù)白指,也是虛擬化技術(shù)留晚,屬于輕量級的虛擬化。
虛擬機雖然可以隔離出很多“子電腦”告嘲,但占用空間更大倔丈,啟動更慢憨闰,虛擬機軟件可能還要花錢(例如VMWare)。
而容器技術(shù)恰好沒有這些缺點需五。它不需要虛擬出整個操作系統(tǒng),只需要虛擬一個小規(guī)模的環(huán)境(類似“沙箱”)轧坎。
它啟動時間很快宏邮,幾秒鐘就能完成。而且缸血,它對資源的利用率很高(一臺主機可以同時運行幾千個Docker容器)蜜氨。此外,它占的空間很小捎泻,虛擬機一般要幾GB到幾十GB的空間飒炎,而容器只需要MB級甚至KB級。
正因為如此笆豁,容器技術(shù)受到了熱烈的歡迎和追捧郎汪,發(fā)展迅速。
我們具體來看看Docker闯狱。Docker 容器將軟件以及它運行安裝所需的一切文件(代碼煞赢、運行時、系統(tǒng)工具哄孤、系統(tǒng)庫)打包到一起照筑,這就保證了不管是在什么樣的運行環(huán)境,總是能以相同的方式運行瘦陈。就好像 Java 虛擬機一樣凝危,“一次編寫,到處運行(Write once, run anywhere)”晨逝,而 Docker 是“一次構(gòu)建蛾默,到處運行(Build once,run anywhere)”咏花。
大家需要注意趴生,Docker本身并不是容器,它是創(chuàng)建容器的工具昏翰,是應用容器引擎苍匆。
想要搞懂Docker,其實看它的兩句口號就行棚菊。
第一句浸踩,是“Build, Ship and Run”。
也就是统求,“搭建检碗、發(fā)送据块、運行”,三板斧折剃。
舉個例子:
我來到一片空地另假,想建個房子,于是我搬石頭怕犁、砍木頭边篮、畫圖紙,一頓操作奏甫,終于把這個房子蓋好了戈轿。
結(jié)果,我住了一段時間阵子,想搬到另一片空地去思杯。這時候,按以往的辦法挠进,我只能再次搬石頭色乾、砍木頭、畫圖紙奈梳、蓋房子杈湾。
但是,跑來一個老巫婆攘须,教會我一種魔法漆撞。
這種魔法,可以把我蓋好的房子復制一份于宙,做成“鏡像”浮驳,放在我的背包里。
等我到了另一片空地捞魁,就用這個“鏡像”至会,復制一套房子,擺在那邊谱俭,拎包入住奉件。
怎么樣?是不是很神奇昆著?
所以县貌,Docker的第二句口號就是:“Build?once,Run?anywhere(搭建一次凑懂,到處能用)”煤痕。
Docker技術(shù)的三大核心概念,分別是:
鏡像(Image)
容器(Container)
倉庫(Repository)
我剛才例子里面,那個放在包里的“鏡像”摆碉,就是Docker鏡像塘匣。而我的背包,就是Docker倉庫巷帝。我在空地上忌卤,用魔法造好的房子,就是一個Docker容器锅睛。
說白了埠巨,這個Docker鏡像,是一個特殊的文件系統(tǒng)现拒。它除了提供容器運行時所需的程序、庫望侈、資源印蔬、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(例如環(huán)境變量)脱衙。鏡像不包含任何動態(tài)數(shù)據(jù)侥猬,其內(nèi)容在構(gòu)建之后也不會被改變。
也就是說捐韩,每次變出房子退唠,房子是一樣的,但生活用品之類的荤胁,都是不管的瞧预。誰住誰負責添置。
每一個鏡像可以變出一種房子仅政。那么垢油,我可以有多個鏡像呀!
也就是說圆丹,我蓋了一個歐式別墅滩愁,生成了鏡像。另一個哥們可能蓋了一個中國四合院辫封,也生成了鏡像硝枉。還有哥們,蓋了一個非洲茅草屋倦微,也生成了鏡像妻味。。璃诀。
這么一來弧可,我們可以交換鏡像,你用我的,我用你的棕诵,豈不是很爽裁良?
于是乎,就變成了一個大的公共倉庫校套。
負責對Docker鏡像進行管理的价脾,是Docker Registry服務(wù)(類似倉庫管理員)。
不是任何人建的任何鏡像都是合法的笛匙。萬一有人蓋了一個有問題的房子呢侨把?
所以,Docker Registry服務(wù)對鏡像的管理是非常嚴格的妹孙。
最常使用的Registry公開服務(wù)秋柄,是官方的Docker Hub,這也是默認的Registry蠢正,并擁有大量的高質(zhì)量的官方鏡像骇笔。
好了,說完了Docker嚣崭,我們再把目光轉(zhuǎn)向K8S笨触。
就在Docker容器技術(shù)被炒得熱火朝天之時,大家發(fā)現(xiàn)雹舀,如果想要將Docker應用于具體的業(yè)務(wù)實現(xiàn)芦劣,是存在困難的——編排、管理和調(diào)度等各個方面说榆,都不容易虚吟。于是,人們迫切需要一套管理系統(tǒng)娱俺,對Docker及容器進行更高級更靈活的管理稍味。
就在這個時候,K8S出現(xiàn)了荠卷。
K8S模庐,就是基于容器的集群管理平臺,它的全稱油宜,是kubernetes掂碱。
一個K8S系統(tǒng),通常稱為一個K8S集群(Cluster)慎冤。
這個集群主要包括兩個部分:
一個Master節(jié)點(主節(jié)點)
一群Node節(jié)點(計算節(jié)點)
一看就明白:Master節(jié)點主要還是負責管理和控制疼燥。Node節(jié)點是工作負載節(jié)點,里面是具體的容器蚁堤。
深入來看這兩種節(jié)點醉者。
首先是Master節(jié)點。
Master節(jié)點包括API Server、Scheduler撬即、Controller manager立磁、etcd。
API Server是整個系統(tǒng)的對外接口剥槐,供客戶端和其它組件調(diào)用唱歧,相當于“營業(yè)廳”。
Scheduler負責對集群內(nèi)部的資源進行調(diào)度粒竖,相當于“調(diào)度室”颅崩。
Controller manager負責管理控制器,相當于“大總管”蕊苗。
然后是Node節(jié)點沿后。
Node節(jié)點包括Docker、kubelet朽砰、kube-proxy得运、Fluentd、kube-dns(可選)锅移,還有就是Pod。
Pod是Kubernetes最基本的操作單元饱搏。一個Pod代表著集群中運行的一個進程非剃,它內(nèi)部封裝了一個或多個緊密相關(guān)的容器。除了Pod之外推沸,K8S還有一個Service的概念备绽,一個Service可以看作一組提供相同服務(wù)的Pod的對外訪問接口。這段不太好理解鬓催,跳過吧肺素。
Docker,不用說了宇驾,創(chuàng)建容器的倍靡。
Kubelet,主要負責監(jiān)視指派到它所在Node上的Pod课舍,包括創(chuàng)建塌西、修改、監(jiān)控筝尾、刪除等捡需。
Kube-proxy,主要負責為Pod對象提供代理筹淫。
Fluentd站辉,主要負責日志收集、存儲與查詢。
另外一種通俗的解釋:(可以先往下學習饰剥,等學的差不多了殊霞,再來看更能理解)
18張兒童插畫讓你秒懂Kubernetes
很久很久以前,有一個叫 Phippy 的應用程序捐川。她是一個簡單的應用程序脓鹃,由 PHP 編寫且只有一個頁面誓斥。
她住在一個需要和其他可怕的應用程序分享環(huán)境的主機中井厌,她不認識這些應用程序并且不愿意和他們來往。
她希望她能擁有一個屬于自己的環(huán)境:只有她自己和她可以稱之為家的 Web 服務(wù)器萍悴。
每個應用程序都有個運行所依賴的環(huán)境岩齿。對于 PHP 應用程序來說太颤,這個環(huán)境可能包括 Web 服務(wù)器,一個可讀文件系統(tǒng)和 PHP 引擎本身盹沈。
有一天龄章,一只善良的鯨魚出現(xiàn)了。他建議小 Phippy 住在容器里乞封,這樣可能會更快樂做裙。所以應用程序 Phippy 遷移到了容器中。這個容器很棒肃晚,但是……它有點像一個漂浮在大海中央的豪華起居室锚贱。
(Docker)容器提供了一個獨立的環(huán)境,應用程序可以在這個環(huán)境中運行关串。但是這些孤立的容器常常需要被管理并與外面的世界連接拧廊。
對于孤立的容器而言,共享文件系統(tǒng)晋修、網(wǎng)絡(luò)通信吧碾、調(diào)度、負載均衡和分發(fā)都是要面對的挑戰(zhàn)墓卦。
鯨魚聳了聳肩倦春。“對不起趴拧,孩子溅漾。”他說著著榴,消失在海面下添履。
就在 Phippy 甚至開始絕望時,一位駕駛著巨輪的船長出現(xiàn)在海平線上脑又。這艘船由幾十個綁在一起的木筏組成暮胧,但從外面來看锐借,它就像一艘巨輪。
“你好呀往衷,這位 PHP 應用程序朋友钞翔。我是 Kube 船長∠幔”睿智的老船長說布轿。
“Kubernetes” 在希臘語中是船長的意思。我們可以從這個單詞中得到 Cybernetic 和 Gubernatorial 這兩個詞組来颤。Kubernetes 項目專注于構(gòu)建一個健壯的平臺汰扭,用于在生產(chǎn)環(huán)境中運行數(shù)千個容器。
“我是 Phippy福铅÷苊”小應用程序說。
“很高興認識你滑黔“拾”船長一邊說,一邊在她身上貼上了一張標有姓名的標簽略荡。
Kubernetes 使用標簽作為“名牌”來標識事物庵佣。它可以根據(jù)這些標簽進行查詢。標簽是開放性的:你可以用他們來表示角色汛兜、穩(wěn)定性或其他重要的屬性秧了。
船長建議應用程序把她的容器搬到船上的一個船艙中。Phippy 很高興地把她的容器搬到 Kube 船長巨輪的船艙內(nèi)序无。Phippy 覺得這里像家一樣。
在 Kubernetes 中衡创,Pod 代表一個可運行的工作單元帝嗡。通常,你會在 Pod 中運行一個容器璃氢。
但是對于一些容器緊密耦合的情況哟玷,你可以選擇在同一個 Pod 中運行多個容器。
Kubernetes 負責將你的 Pod 和網(wǎng)絡(luò)以及 Kubernetes 的其余環(huán)境相連一也。
Phippy 有一些不同尋常的興趣巢寡,她很喜歡遺傳學和綿羊。所以她問船長:“如果我想克隆我自己椰苟,是否可以根據(jù)需求克隆任意次數(shù)呢?”
“這很容易抑月。”船長說舆蝴。船長把 Phippy 介紹給了 Replication Controller谦絮。
Replication Controller 提供一種管理任意數(shù)量 Pod 的方法题诵。一個 Replication Controller 包含一個 Pod 模板,該模板可以被復制任意次數(shù)层皱。
通過 Replication Controller性锭,Kubernetes 將管理 Pod 的生命周期,包括伸縮叫胖、滾動更新和監(jiān)控草冈。
無數(shù)個日夜,小應用程序在她的船艙中與她的復制品相處十分愉快瓮增。但與自己為伍并沒有所說的那么好……即使你擁有 N 個自己的克隆體怎棱。
Kube 船長慈祥地笑了笑:“我正好有一樣東西《ち蓿”
他剛開口蹄殃,在 Phippy 的 Replication Controller 和船的其他部分之間打開了一條隧道。Kube 船長笑著說:“即使你的復制品來了又去你踩,這條隧道始終會留在這里诅岩,你可以通過它發(fā)現(xiàn)其他 Pod,其他 Pod 也可以發(fā)現(xiàn)你!”
服務(wù)告知 Kubernetes 環(huán)境的其余部分(包括其他 Pod 和 Replication Controller)你的應用程序包含了哪些服務(wù)带膜,當 Pod 來來往往吩谦,服務(wù)的 IP 地址和端口始終保持不變。
其他應用程序可以通過 Kurbenetes 服務(wù)發(fā)現(xiàn)找到你的服務(wù)膝藕。
多虧了這些服務(wù)式廷,Phippy 開始探索船的其他部分。不久之后芭挽,Phippy 遇到了 Goldie滑废。他們成了***的朋友。
有一天袜爪,Goldie 做了一件不同尋常的事蠕趁。她送給 Phippy 一件禮物。Phippy 看了禮物一眼辛馆,悲傷的淚水奪眶而出俺陋。
“你為什么這么傷心呢?”Goldie 問道。
“我喜歡這個禮物昙篙,但我沒有地方可以放它!”Phippy 抽噎道腊状。
但 Goldie 知道該怎么做√桑“為什么不把它放入卷中呢?”
卷表示容器可以訪問和存儲信息的位置缴挖。對于應用程序,卷顯示為本地文件系統(tǒng)的一部分焚辅。但卷可以由本地存儲醇疼、Ceph硕并、Gluster、持久性塊存儲秧荆,以及其他存儲后端支持倔毙。
Phippy 喜歡在 Kube 船長的船上生活,她很享受來自新朋友的陪伴(Goldie 和每個克隆人都同樣令人愉悅)乙濒。但是陕赃,當她回想起在可怕的主機度過的日子,她想知道她是否也可以擁有一點自己的隱私颁股。
“這聽起來像是你所需要的么库,”Kube 船長說,“這是一個命名空間甘有∷呷澹”
命名空間是 Kubernetes 內(nèi)部的分組機制。服務(wù)亏掀、Pod忱反、Replication Controller 和卷可以在命名空間內(nèi)部輕松協(xié)作,但命名空間提供了與集群其他部分一定程度的隔離滤愕。
Phippy 與她的新朋友一起乘坐 Kube 船長的巨輪航行于大海之上温算。她經(jīng)歷了許多偉大的冒險,但最重要的是间影,Phippy 找到了自己的家注竿。
所以 Phippy 從此過上了幸福的生活。
轉(zhuǎn)自:https://www.cnblogs.com/kouryoushine/articles/8007648.html(站在浪潮之巔)