1. 程式人生 > >8 分鐘瞭解 Kubernetes

8 分鐘瞭解 Kubernetes

Kubernetes 脫胎於 Google 的 Borg 系統,是一個功能強大的容器編排系統。Kubernetes 及其整個生態系統(工具、模組、外掛等)均使用 Go 語言編寫,從而構成一套面向 API、可高速執行的程式集合,這些程式文件精良、易於參與貢獻或在其上構建應用程式。

每個開發、運維或感興趣的讀者都應熟悉它的一些核心概念,以便理解這個系統及其不同的功能,以及為什麼幾乎所有人都在使用它。

在繼續之前,我想提一下 Kubernetes 的幾個頂級朋友(或競爭對手):ECS、Nomad 和 Mesos。ECS 是 AWS 自己的編排解決方案,最近它又推出了託管在 AWS 上的 Kubernetes 系統——EKS。兩者都支援 FARGATE,讓使用者無須關心所執行的物理資源。

Kubernetes 毫無疑問是最大贏家,作為一個開源系統,三大主流雲服務商都以託管的方式提供了這項功能。但是,它比其他幾個產品都要來得複雜和混亂。Kubernetes 可以處理幾乎任何型別的容器負載,也有很多技巧,但這並不意味著每個人都應該使用它。其他解決方案或許也能滿足某些公司的要求,例如,完全部署在 AWS 上的網際網路產品公司,使用 ECS 會比 Kubernetes 具有更佳的生產環境體驗,是的,也好於 EKS。

話雖如此,Kubernetes 的魔力在於:它可以部署在任何地方、它擁有一個活躍的社群,有數百個核心開發人員及數千個生態系統開源貢獻者。它執行快速、具有創新性、模組化且面向 API,是一個對構建外掛或服務非常友好的系統。

好了,閒話少說,開始我們的旅程。

Kubernetes 的 11 個部分

1. Pod

Pod 是 Kubernetes 中最小的可互動單元。一個 Pod 可以由多個容器組成,這些容器共同部署在單個節點上形成一個單元。一個 Pod 具有一個 IP,該 IP 在其容器之間共享。 在微服務世界中,一個 Pod 可以是執行後臺工作或服務請求的微服務的單個例項。

2. Node(節點)

Node 是機器。它們是 Kubernetes 用於部署 Pod 的“裸機”(或虛擬機器)。Node 為 Kubernetes 提供可用的叢集資源用於以保持資料、執行作業、維護工作負載、建立網路路由等。

3. Label(標籤)與 Annotation(註解)

Label 是 Kubernetes 及其終端使用者用於過濾系統中相似資源的方式,也是資源與資源相互“訪問”或關聯的粘合劑。比如說,為 Deployment 開啟埠的 Service。不論是監控、日誌、除錯或是測試,任何 Kubernetes 資源都應打上標籤以供後續查驗。例如,給系統中所有 Worker Pod 打上標籤:app=worker,之後即可在 kubectl 或 Kubernetes API 中使用 --selector 欄位對其進行選擇。 Annotation 與 Label 非常相似,但通常用於以自由的字串形式儲存不同物件的元資料,例如“更改原因: 安全補丁升級”。

4. Service Discovery(服務發現)

作為編排系統,Kubernetes 控制著不同工作負載的眾多資源,負責管理 Pod、作業及所有需要通訊的物理資源的網路。為此,Kubernetes 使用了 ETCD。

ETCD 是 Kubernetes 的“內部”資料庫,Master 通過它來獲取所有資源的位置。Kubernetes 還為服務提供了實際的“服務發現”——所有 Pod 使用了一個自定義的 DNS 伺服器,通過解析其他服務的名稱以獲取其 IP 地址和埠。它在 Kubernetes 叢集中“開箱即用”,無須進行設定。

5. ReplicaSet(副本集)

雖然 Pod 是一個物理性的執行任務,但通常使用單個例項是不夠的。為了冗餘並處理負載,出於某種原因(比如“伸縮”)需要對 Pod 進行復制。為了實現負責擴充套件和複製的層,Kubernetes 使用了 ReplicaSet。這個層以副本的數量表示系統的期望狀態,並在任意給定時刻保持該系統的當前狀態。

這也是配置自動伸縮的所在,在系統高負載時建立額外的副本,並在不再需要這些資源來支撐所執行的工作負載時進行縮容。

6. DaemonSet(守護程序集)

有時候,應用程式每個節點需要的例項不超過一個。比如 FileBeat 這類日誌收集器就是個很好的例子。為了從各個節點收集日誌,其代理需要執行在所有節點上,但每個節點只需要一個例項。Kubernetes 的 DaemonSet 即可用於建立這樣的工作負載。

7. StatefulSet(有狀態集)

儘管多數微服務涉及的都是不可變的無狀態應用程式,但也有例外。有狀態的工作負載有賴於磁碟卷的可靠支援。雖然應用程式容器本身可以是不可變的,可以使用更新的版本或更健康的例項來替代,但是所有副本還是需要資料的持久化。StatefulSet 即是用於這類需要在整個生命週期內使用同一節點的應用程式的部署。

它還保留了它的“名稱”:容器內的 hostname 以及整個叢集中服務發現的名稱。3 個 ZooKeeper 構成的 StatefulSet 可以被命名 zk-1、zk-2 及 zk-3,也可以擴充套件到更多的成員 zk-4、zk-5 等等…… StatefulSets 還負責管理 PersistentVolumeClaim(Pod 上連線的磁碟)。

8. Job(任務)

Kubernetes 核心團隊考慮了大部分使用編排系統的應用程式。雖然多數應用程式要求持續執行以同時處理伺服器請求(比如 Web 伺服器),但有時還是需要生成一批作業並在其完成後進行清理。比如,一個迷你的無伺服器環境。 為了在 Kubernetes 中實現這一點,可以使用 Job 資源。正如其名,Job 的工作是生成容器來完成特定的工作,並在成功完成時銷燬。舉個例子,一組 Worker 從待處理和儲存的資料佇列中讀取作業。一旦佇列空了,就不再需要這些 Worker 了,直到下個批次準備好。

9. ConfigMap(配置對映)及 Secret(機密配置)

如果你還不熟悉十二要素應用清單,請先行了解。現代應用程式的一個關鍵概念是無環境,並可通過注入的環境變數進行配置。應用程式應與其位置完全無關。為了在 Kubernetes 中實現這個重要的概念,就有了 ConfigMap。實際上這是一個環境變數鍵值列表,它們會被傳遞給正在執行的工作負載以確定不同的執行時行為。在同樣的範疇下,Secret 與正常的配置條目類似,只是會進行加密以防類似金鑰、密碼、證書等敏感資訊的洩漏。

我個人認為 Hashicorp 的 Vault 是使用機密配置的最佳方案。請務必閱讀一下我去年寫的有關文章,文章講述了將 Vault 作為生產環境一部分的原因,以及我的一位同事寫的另一篇更技術性的文章

10. Deployment(部署)

一切看起來都很美好,Pod 可以正常執行,如果上層有 ReplicaSet,還可以根據負載進行伸縮。不過,大家蜂擁而來,為的是能用新版本快速替換應用程式。我們想小規模地進行構建、測試和釋出,以縮短反饋週期。使用 Deployments 即可持續地部署新軟體,這是一組描述特定執行工作負載新需求的元資料。舉個例子,釋出新版本、錯誤修復,甚至是回滾(這是 Kubernetes 的另一個內部選項)。 在 Kubernetes 中部署軟體可使用 2 個主要策略:

  • 替換——正如其名,使用新需求替換全部負載,自然會強制停機。對於快速替換非生產環境的資源,這很有幫助。

  • 滾動升級——通過監聽兩個特定配置慢慢地將容器替換成新的:

a. MaxAvailable——設定在部署新版本時可用的工作負載比例(或具體數量),100% 表示“我有 2 個容器,在部署時要保持 2 個存活以服務請求”; b. MaxSurge——設定在當前存活容器的基礎上部署的工作負載比例(或數量),100% 表示“我有 X 個容器,部署另外 X 個容器,然後開始滾動移除舊容器”。

11. Storage(儲存)

Kubernetes 在儲存之上添加了一層抽象。工作負載可以為不同任務請求特定儲存,甚至可以管理超過 Pod 生命週期的持久化。為簡短起見,請閱讀作者之前釋出的關於 Kubernetes 儲存的文章,特別重點看看為什麼它不能完全解決類似資料庫部署這樣的資料永續性要求。

概念性理解

Kubernetes(現在仍然)是根據一些指導原則進行設計和開發的,構建在系統裡的每個功能、概念和想法都考慮了社群因素。此外,終端使用者會被引導以某種方式使用該系統,但這不是強迫的;最佳實踐也是公開的,但作為一個開源免費的系統,你完全可以根據自身需要進行操作。

面向 API——系統每個部分構建時通過優良的文件和可操作的 API 來實現可互動性。核心開發人員會確保終端使用者可以進行更改、查詢和更新,以免將其阻擋在外或有不想要的過濾器。

歡迎包裝工具——作為前一點的衍生產品,Kubernetes 對在其 API 之上構建的工具和包裝器表示歡迎。作為一個原始平臺,Kubernetes 是以一個非常可定製的方式進行構建的,以便他人使用,並進一步開發用於不同用例的工具。有些工具已經變得非常有名並被廣泛使用,比如 Spinnaker、Istio 等等。

宣告性狀態——鼓勵使用者在系統中使用宣告性描述而非命令式描述。這意味著,系統的狀態和元件最好被描述為在某種版本控制(如 Git)中管理的程式碼,以此避免手工修改造成的困擾。因此,Kubernetes 減少了災難恢復的難度、更易於在團隊之間分享並傳遞責任。

原文連結:https://medium.com/prodopsio/an-8-minute-introduction-to-k8s-94fda1fa5184<br />


掃描下方二維碼新增小助手,與 8000 位雲原生愛好者討論技術趨勢,實戰進階!

進群暗號:公司-崗位-城市

相關推薦

8 分鐘瞭解 Kubernetes

Kubernetes 脫胎於 Google 的 Borg 系統,是一個功能強大的容器編排系統。Kubernetes 及其整個生態系

分鐘瞭解Kubernetes

何為Kubernetes? 最簡單的一句話來概括Kubernetes。 它就是一套成熟的商用服務編排解決方案。Kubernetes定位在Saas層,重點解決了微服務大規模部署時的服務編排問題。 Kubernetes元件介紹 瞭解Kubernetes都是從Pod開始的。 Pod是Kubernetes最小的排程單

OpenCV開發筆記(五十五):紅胖子8分鐘帶你深入瞭解Haar、LBP特徵以及級聯分類器識別過程(圖文並茂+淺顯易懂+程式原始碼)

若該文為原創文章,未經允許不得轉載原博主部落格地址:https://blog.csdn.net/qq21497936原博主部落格導航:https://blog.csdn.net/qq21497936/article/details/102478062本文章部落格地址:https://blog.csdn.net

OpenCV開發筆記(六十五):紅胖子8分鐘帶你深入瞭解ORB特徵點(圖文並茂+淺顯易懂+程式原始碼)

若該文為原創文章,未經允許不得轉載原博主部落格地址:https://blog.csdn.net/qq21497936原博主部落格導航:https://blog.csdn.net/qq21497936/article/details/102478062本文章部落格地址:https://blog.csdn.ne

【精選文章】YUM 8分鐘部署LAMP架構

list httpd配置 php.ini 分享圖片 服務器軟件 yum ini install create 什麽是LAMP? LAMP指的Linux(操作系統)、ApacheHTTP 服務器,MySQL(有時也指MariaDB,數據庫軟件) 和PHP(有時也是指Perl

8分鐘丨教你玩轉 API

解決 規範 嚴格 自定義 二次 後臺服務 from 性能優化 失敗 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由織雲平臺團隊發表於雲+社區專欄 背景 當下,業界越來越多公司在項目架構設計時,會采用微服務架構。微服務架構,可以讓我們的產品有更好的擴

10分鐘瞭解react引入的hooks

“大家好,我是谷阿莫,今天要將的是一個...”,哈哈哈,看到這個題我就想到這個開頭。最近react 官方在 2018 ReactConf 大會上宣佈 React v16.7.0-alpha(內測) 將引入 Hooks。所以我們有必要了解 Hooks,以及由此引發的疑問。 當然,學習的最好、最

10分鐘瞭解 react 引入的 Hooks

“大家好,我是谷阿莫,今天要將的是一個...”,哈哈哈,看到這個題我就想到這個開頭。最近react 官方在 2018 ReactConf 大會上宣佈 React v16.7.0-alpha(內測) 將引入 Hooks。所以我們有必要了解 Hooks,以及由此引發的疑問。 當然,學習的最好、最直接的方法就是看

分鐘瞭解spring之FactoryBean

轉自 http://blog.51cto.com/4247649/2118353 今天主要從以下兩方面來介紹一下FactoryBean FactoryBean是什麼 FactoryBean使用演示 1,FactoryBean是什麼 FactoryB

5分鐘瞭解赴港上市公司CEO薪酬

2018年韋萊韜悅中國內地赴香港上市公司高管薪酬、股權激勵和公司治理研究報告涵蓋中國內地赴香港上市公司共計713家,其中包括H股、紅籌股、以及2017年均市值規模在15億港幣以上的內地赴香港上市中資公司。 港股中國上市公司業績穩步上升,整體淨利潤增長率達到17% 20

深入瞭解Kubernetes REST API的工作方式

關於Kubernetes REST API的工作方式: 在哪裡以及如何定義從REST路徑到處理REST呼叫的函式的對映? 與etcd的交互發生在哪裡? 從客戶端發出請求到儲存在etcd中物件的端到端路徑是怎樣的? Kubernetes REST框架 Kubernetes

3分鐘瞭解HTTP的基礎概念

1. 什麼是HTTP? HTTP意為超文字傳輸協議(HyperText Transfer Protocol), Web以此為規範傳送請求、獲取資源,完成從客戶端到伺服器端的一些列操作。 2. 如何理解WWW? 起初是CERN(歐洲核子研究組織)的Tim Berners-Lee 博士提出的一種能夠讓遠隔兩

分鐘瞭解CONSTRAINT約束的用法

場景 設計資料庫表,用來儲存學生和班級資訊表 第一種情況: 將學生資訊和班級資訊儲存到一張表中 sno sname classno cname 1 周杰倫 001 高三1班 2 林俊杰

8分鐘學會使用AutoMapper

logs uget 領域 src 就是 不能 ret har create 一.什麽是AutoMapper與為什麽用它。 它是一種對象與對象之間的映射器,讓AutoMapper有意思的就是在於它提供了一些將類型A映射到類型B這種無聊的實例,只要B遵循AutoMapper已

雲資料庫POLARDB優勢解讀之①——10分鐘瞭解

什麼是POLARDB POLARDB 是阿里雲自研的下一代關係型分散式資料庫,100%相容MySQL,之前使用MySQL的應用程式不需要修改一行程式碼,即可使用POLARDB。 POLARDB在執行形態上是一個多節點叢集,叢集中有一個Writer節點(主節點)和多個Reader節點,他們之間節點間通過分散

分鐘瞭解單元測試

 一、單元測試 1、什麼是單元測試? 單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。 單元測試是在軟體開發過程中要進行的最低級別的測試活動,軟體的獨立單元將在與程式的其他部分相隔離的情況下進行測試。 2、單元測試的分類有哪些? 軟體測試可以按測試範圍

#Java乾貨分享:兩分鐘瞭解日常程式設計中的小技巧,提高你的能力

1.return 一個空的集合,而不是 null 如果一個程式返回一個沒有任何值的集合,請確保一個空集合返回,而不是空元素。這樣你就不用去寫一大堆 ”if else” 判斷null元素。 如果有想學習java的程式設計師,可來我們的java學習扣qun:94311,1692免費送java的視

如何學習、瞭解Kubernetes

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗 [Kubernetes官方文件](https://kubernetes.io/docs/tutorials/)是最基本的入門教材,這裡的內容是最官方,也是最基礎的學習資料。 為了更好地教育使用者,Google還專門出了一套視訊教材,[Sc

30分鐘瞭解Shiro與Springboot的多Realm基礎配置

寫在前面的話: 我之前寫過兩篇與shiro安全框架有關的博文,居然能夠廣受歡迎實在令人意外。說明大家在網際網路時代大夥對於安全和登入都非常重視,無論是大型專案還是中小型業務,普遍都至少需要登入與認證的邏輯封裝。相較於SpringSecurity而言,Shrio更輕量無過多依賴和便於獨立部署的特點更收到開發者

10分鐘瞭解區塊鏈程式設計

談起這幾年最熱的技術,一定少不了區塊鏈。按說新技術的出現本是稀鬆平常的事情,但區塊鏈的出現和發展,卻有那麼一點讓人不淡定:其一,區塊鏈的代表應用比特幣,其價格在這七八年間翻了上百萬倍。2010年有人花10000個比特幣買了兩塊披薩,在比特幣最高價位時,這兩塊披薩相當於近兩億美元。其二,因為區塊鏈專案的大熱,相