Kubernetes初步了解及入门
2)為什么要選擇容器?
當(dāng)容器技術(shù)這么熱門的時候有是不是在疑惑為什么要選用這樣的技術(shù)呢?
傳統(tǒng)的應(yīng)用部署方式是通過操作系統(tǒng)的包管理器來安裝應(yīng)用。然而這樣做的一個劣勢在于,它把應(yīng)用的運行,配置,庫和生存周期和機器的操作系統(tǒng)糾纏在一起。當(dāng)然你可以通過創(chuàng)建虛機鏡像的方式來獲得可以預(yù)期的前滾和回滾操作,然而虛擬機太重量級并且不可移植。
新的方式是通過部署基于操作系統(tǒng)級別虛擬化的容器進(jìn)行虛擬化而非通過硬件來進(jìn)行虛擬化。這些容器之間相互隔離:它們有自己的文件系統(tǒng),然而它們也無法看到彼此之間的進(jìn)程,并且它們之間的計算資源也是有界限的。相較于虛擬機容器也更容易部署,并且因為它們是和底層設(shè)施和機器文件系統(tǒng)解耦的,它們可以在云和不同版本的操作系統(tǒng)間進(jìn)行遷移。
因為容器小而快,一個應(yīng)用可以被打包進(jìn)一個容器映像。正是應(yīng)用與容器鏡像間一對一的關(guān)系解鎖了容器的很多優(yōu)點:
總結(jié)一下容器的優(yōu)點:
- 敏捷地應(yīng)用創(chuàng)建和部署:相較于VM增加了容器鏡像創(chuàng)建的效率。
- 持續(xù)開發(fā),集成和部署:通過快速的回滾操作(因為鏡像的穩(wěn)定性)提供可靠的經(jīng)常的容器鏡像的創(chuàng)建和部署。
- 開發(fā)和運行相分離:在build或者release 的階段(而非部署階段),使得應(yīng)用和基礎(chǔ)設(shè)施解耦。
- 開發(fā),測試和生產(chǎn)環(huán)境的持續(xù):在筆記本上可以像在云中一樣的運行。
- 云和操作系統(tǒng)版本的可移植性:可以運行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的運行環(huán)境中。
- 應(yīng)用為中心的管理:提升了虛擬化的層次,從虛擬硬件上運行操作系統(tǒng)的抽象到操作系統(tǒng)中應(yīng)用邏輯資源的虛擬。
- 松耦合,分布式,彈性,自由的微服務(wù):應(yīng)用被打散成更小的,獨立的小碎片并且可以動態(tài)地部署和管理——而非是一個在用途單一的龐大機器中運行的一個臃腫堆棧中。
- 資源隔離:可以預(yù)測的應(yīng)用性能。
- 資源使用:高效。
Kubernetes可以安排物理機或者虛擬機上運行的應(yīng)用容器的使用。
當(dāng)然它不只可以做這些。
為了充分發(fā)揮它的潛能,你需要剪斷物理機虛擬機的束縛。
然而,一旦特定的容器不再局限于特定的主機,主機為中心的基礎(chǔ)設(shè)施便不再適用了:組管理,負(fù)載均衡,自動擴(kuò)展等。你需要的是以容器為中心的基礎(chǔ)設(shè)施。而這正是Kubernetes所提供的。
Kubernetes可以滿足很多運行環(huán)境中應(yīng)用的通用的需求,比如:
- 進(jìn)程協(xié)同,利用復(fù)合應(yīng)用保證應(yīng)用和容器一對一的模型。
- 存儲系統(tǒng)掛載
- 分發(fā)密鑰
- 應(yīng)用健康檢測
- 應(yīng)用實例復(fù)制
- 水平自動擴(kuò)展
- 命名和發(fā)現(xiàn)
- 負(fù)載均衡
- 滾動更新
- 資源監(jiān)控
- 日志訪問
- 自檢和調(diào)試
- 識別和認(rèn)證
這為PaaS提供了IaaS層的便利,提供了基礎(chǔ)設(shè)施提供者間的可移植性。
詳細(xì)內(nèi)容,參見用戶指南.
(4)Kubernetes為什么又是怎么樣的一個平臺呢?盡管Kubernetes提供了很多功能,總有一些新的場景可以從這些功能中獲益。特定的應(yīng)用工作流可以提高開發(fā)者的開發(fā)速度。最新可以接受的組合常常需要強勁的大規(guī)模的自動化。這也是為什么Kubernetes構(gòu)建以來為什么要做一個讓應(yīng)用的部署、擴(kuò)展和管理更便捷的生態(tài)平臺的原因。
Labels讓用戶可以隨心所欲地組織自己的資源。 Annotations讓用戶可以給資源添加定制化的信息以充分使用自己的工作流,提供一種簡單的管理工具。
此外,Kubernetes control plane本身也是基于公布給開發(fā)者和用戶相同 的一組API。用戶可以自己定開發(fā)自己的controllers, schedulers等。如果愿意,它們甚至可以用自己的API 開發(fā)自己的command-line tool.
這樣的設(shè)計也讓很多其它系統(tǒng)可以構(gòu)建于Kubernetes之上。
(5)Kubernetes不是什么:Kubernetes不是一個傳統(tǒng)的,包羅一切的PaaS系統(tǒng)。我們保留用戶的選擇,這一點非常重要。
- Kubernetes不限制支持應(yīng)用的種類。它不限制應(yīng)用框架,或者支持的運行時語言,也不去區(qū)分 “apps” 或者“services”。 Kubernetes致力于支持不同負(fù)載應(yīng)用,包括有狀態(tài)、無狀態(tài)、數(shù)據(jù)處理類型的應(yīng)用。只要這個應(yīng)用可以在容器里運行,那么它就可以在Kubernetes上很多地運行。
- Kubernetes不提供中間鍵(如message buses),數(shù)據(jù)處理框架(如Spark),數(shù)據(jù)庫(如Mysql),或者集群存儲系統(tǒng)(如Ceph)。但這些應(yīng)用都可以運行于Kubernetes。
- Kubernetes沒有一個點擊即可用的應(yīng)用市場。
- Kubernetes不部署源碼不編譯應(yīng)用。持續(xù)集成的 (CI)工作流方面,不同的用戶有不同的需求和偏好,因此,我們提供分層的 CI工作流,但并不定義它應(yīng)該怎么做。
- Kubernetes允許用戶選擇自己的日志、監(jiān)控和報警系統(tǒng)。
- Kubernetes不提供可理解的應(yīng)用配置語言(e.g., jsonnet).
- Kubernetes不提供或者任何綜合的機器配置,維護(hù),管理或者自愈系統(tǒng)。
另一方面,大量的Paas系統(tǒng)都可以運行在Kubernetes上,比如Openshift, Deis, 和Gondor。你可以構(gòu)建自己的Paas平臺,集成CI。
因為Kubernetes運行在應(yīng)用而非硬件層面,它提供了普通的Paas平臺提供的一些通用功能,比如部署,擴(kuò)展,負(fù)載均衡,日志,監(jiān)控等。然而,Kubernetes并非一個龐然大物,這些功能老師可選的。
另外,Kubernetes不僅僅是一個“編排系統(tǒng)”;它消彌了編排的需要。“編排”的定義是指執(zhí)行一個預(yù)定的工作流:先做A,之后B,然后C。相反地,Kubernetes是由一系列獨立的、可組合的驅(qū)使當(dāng)前狀態(tài)走向預(yù)想狀態(tài)的控制進(jìn)程組成的。怎么樣從A到C并不重要:達(dá)到目的就好。當(dāng)然也是需要中心控制的;方法更像排舞的過程。這讓這個系統(tǒng)更加好用更加強大、健壯、 有彈性且可擴(kuò)展。
(6)Kubernetes是什么意思呢? K8s?Kubernetes起源于希臘語, 是“舵手”或者“領(lǐng)航員”的意思,是“管理者”和“控制論”的根源。 K8s是把用8代替8個字符“ubernete”而成的縮寫。
總結(jié)
以上是生活随笔為你收集整理的Kubernetes初步了解及入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从涂鸦到发布 —— 理解API的设计过程
- 下一篇: SOA入门及了解