通過插畫理解kubernetes基本概念

========== 第一篇 ==========

轉自:https://www.cnblogs.com/kouryoushine/articles/8007648.html

插畫版Kubernetes指南(小孩子也能看懂的kubernetes教程)

是根據一個視頻翻譯過來的,比較形象

編者按:Matt Butcher 是 Deis 的平臺架構師,熱愛哲學,咖啡和精雕細琢的代碼。有一天女兒走進書房問他什麼是 Kubernetes,於是就有了這本插畫版的 Kubernetes 指南,講述了勇敢的 Phippy(一個 PHP 應用),在 Kubernetes 的冒險故事,滿滿的父愛有木有!

  某一天

你女兒也能看懂的插畫版 Kubernetes 指南

  有一天,女兒走進書房問我:『親愛的爸爸,什麼是 Kubernetes 呢?』

你女兒也能看懂的插畫版 Kubernetes 指南

  我回答她:『Kubernetes 是一個開源的 Docker 容器編排系統,它可以調度計算集羣的節點,動態管理上面的作業,保證它們按用戶期望的狀態運行。通過使用「labels」和「pods」的概念,Kubernetes 將應用按邏輯單元進行分組,方便管理和服務發現。』

  女兒更疑惑了……於是就有了這個故事。

  給孩子的插畫版 Kubernetes 指南

你女兒也能看懂的插畫版 Kubernetes 指南

  很久很久以前,有一個叫 Phippy 的 PHP 應用,她很單純,只有一個頁面。她住在一個託管服務裏,周圍還有很多可怕的應用,她都不認識,也不想去認識,但是他們卻要共享這裏的環境。所以,她一直都希能有一個屬於自己的環境:一個可以稱作 home 的 webserver。

你女兒也能看懂的插畫版 Kubernetes 指南

  每個應用的運行都要依賴一個環境,對於一個 PHP 應用來說,這個環境包括了一個 webserver,一個可讀的文件系統和 PHP 的 engine。

你女兒也能看懂的插畫版 Kubernetes 指南

  有一天,一隻可愛的鯨魚拜訪了 Phippy,他建議 Phippy 住在容器裏。Phippy 聽從了鯨魚的建議搬家了,雖然這個容器看起來很好,但是……怎麼說呢,就像是漂浮在海上的一個小房間一樣,還是沒有家的感覺。

你女兒也能看懂的插畫版 Kubernetes 指南

  不過容器倒是爲應用提供了隔離的環境,在這個環境裏應用就能運行起來。但是這些相互隔離的容器需要管理,也需要跟外面的世界溝通。共享的文件系統,網絡,調度,負載均衡和資源分配都是挑戰。

你女兒也能看懂的插畫版 Kubernetes 指南

  『抱歉……孩子……』鯨魚聳聳肩,一搖尾消失在了海平面下…… Phippy 還沒有來得及失望,就看到遠方駛來一艘巨輪,掌舵的老船長非常威風。這艘船乍一看就是大了點,等到船走近了,Phippy 才發現船體兩邊掛滿了皮筏。

  老船長用充滿智慧的語氣對 Phippy 說:『你好,我是 Kube 船長』。

你女兒也能看懂的插畫版 Kubernetes 指南

  『Kubernetes』是希臘語中的船長,後來的『Cybernetic』和『Gubernatorial』這兩個詞就是從 Kubernetes 衍生來的。Kubernetes 項目由 Google 發起,旨在爲生產環境中成千上萬的容器,構建一個健壯的平臺。

你女兒也能看懂的插畫版 Kubernetes 指南

  『您好,我是 Phippy。』

  『很高興認識你。』船長邊說,邊在 Phippy 身上放了一個 name tag。

你女兒也能看懂的插畫版 Kubernetes 指南

  Kubernetes 使用 label 作爲『nametag』來區分事物,還可以根據 label 來查詢。label 是開放式的:可以根據角色,穩定性或其它重要的特性來指定。

你女兒也能看懂的插畫版 Kubernetes 指南

  Kube 船長建議 Phippy 可以把她的容器搬到船上的 pod 裏,Phippy 很高興地接受了這個提議,把容器搬到了 Kube 的大船上。Phippy 感覺自己終於有家了。

你女兒也能看懂的插畫版 Kubernetes 指南

  在 Kubernetes 中,pod 代表着一個運行着的工作單元。通常,每個 pod 中只有一個容器,但有些情況下,如果幾個容器是緊耦合的,這幾個容器就會運行在同一個 pod 中。Kubernetes 承擔了 pod 與外界環境通信的工作。

  Phippy 對這一切都感到很新奇,同時她也有很多與衆不同的關注點:『如果我想要複製自己該怎麼做呢?按需的……任意次數的可以嗎?』

  『很簡單。』船長說道,接着就給 Phippy 介紹起了 replication controller。

  Replication controller 提供了一種管理任意數量 pod 的方式。一個 replication controller 包含了一個 pod 模板,這個模板可以被不限次數地複製。通過 replication controller,Kubernetes 可以管理 pod 的生命週期,包括擴/縮容,滾動部署和監控等功能。

  Phippy 就這樣在船上和自己的副本愉快地生活了好多天。但是每天只能面對自己的副本,這樣的生活也太孤單了。

  Kube 船長慷慨地笑道:『我有好東西給你。』

  說着,Kube 船長就在 Phippy 的 replication controller 和船上其它地方之間建了一個隧道:『就算你們四處移動,這個隧道也會一直待在這裏,它可以幫你找到其它 pod,其它 pod 也可以找到你。』

  service 可以和 Kubernetes 環境中其它部分(包括其它 pod 和 replication controller)進行通信,告訴它們你的應用提供什麼服務。Pod 可以四處移動,但是 service 的 IP 地址和端口號是不變的。而且其它應用可以通過 Kubernetes 的服務發現找到你的 service。

  有了 service,Phippy 終於敢去船上其它地方去玩了,她很快就有了新朋友 Goldie。有一天,Goldie 送了 Phippy 一件禮物,沒想到 Phippy 只看了一眼就哭了。

  『你怎麼哭了?』Goldie 問道。

  『我太喜歡這個禮物了,可惜沒地兒放……』Phippy 都開始抽泣了。Goldie 一聽原來是這麼回事,馬上就告訴 Phippy:『爲什麼不放在一個 volume 裏呢?』

  Volume 代表了一塊容器可以訪問和存儲信息的空間,對於應用來說,volume 是一個本地的文件系統。實際上,除了本地存儲,Ceph、Gluster、Elastic Block Storage 和很多其它後端存儲都可以作爲 volume。

  Phippy 漸漸地愛上了船上的生活,她很享受和新朋友的相處(Goldie 的每個 pod 副本也都很 nice)。但是回想起以前的生活,她又在想是不是可以有一點點私人空間呢?

  Kube 船長很理解:『看起來你需要 namespace。』

  Namespace 是 Kubernetes 內的分組機制。Service,pod,replication controller 和 volume 可以很容易地和 namespace 配合工作,但是 namespace 爲集羣中的組件間提供了一定程度的隔離。

  於是,在 Kube 船長的船上,Phippy 和她的朋友們開始了海上的歷險,最重要的是,Phippy 找到了自己的家。

  從此,Phippy 過上了幸福的生活。

 

========== 第二篇 ==========

轉自:https://www.jianshu.com/p/4ca3b98de06f

十分鐘帶你理解Kubernetes核心概念

本文將會簡單介紹Kubernetes的核心概念。因爲這些定義可以在Kubernetes的文檔中找到,所以文章也會避免用大段的枯燥的文字介紹。相反,我們會使用一些圖表(其中一些是動畫)和示例來解釋這些概念。我們發現一些概念(比如Service)如果沒有圖表的輔助就很難全面地理解。在合適的地方我們也會提供Kubernetes文檔的鏈接以便讀者深入學習。

容器特性、鏡像、網絡;Kubernetes架構、核心組件、基本功能;Kubernetes設計理念、架構設計、基本功能、常用對象、設計原則;Kubernetes的數據庫、運行時、網絡、插件已經落地經驗;微服務架構、組件、監控方案等。

這就開始吧。

什麼是Kubernetes?

Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集羣間擴展。如果你曾經用過Docker容器技術部署容器,那麼可以將Docker看成Kubernetes內部使用的低級別組件。Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。
使用Kubernetes可以:

  • 自動化容器的部署和複製
  • 隨時擴展或收縮容器規模
  • 將容器組織成組,並且提供容器間的負載均衡
  • 很容易地升級應用程序容器的新版本
  • 提供容器彈性,如果容器失效就替換它,等等...

實際上,使用Kubernetes只需一個部署文件,使用一條命令就可以部署多層容器(前端,後臺等)的完整集羣:

$ kubectl create -f single-config-file.yaml

kubectl是和Kubernetes API交互的命令行程序。現在介紹一些核心概念。

集羣

集羣是一組節點,這些節點可以是物理服務器或者虛擬機,之上安裝了Kubernetes平臺。下圖展示這樣的集羣。注意該圖爲了強調核心概念有所簡化。這裏可以看到一個典型的Kubernetes架構圖。

 

1.png

 

上圖可以看到如下組件,使用特別的圖標表示Service和Label:

  • Pod
  • Container(容器)
  • Label(標籤)
  • Replication Controller(複製控制器)
  • Service(服務)
  • Node(節點)
  • Kubernetes Master(Kubernetes主節點)

Pod

Pod(上圖綠色方框)安排在節點上,包含一組容器和卷。同一個Pod裏的容器共享同一個網絡命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續性實體。你可能會有這些問題:

  • 如果Pod是短暫的,那麼我怎麼才能持久化容器數據使其能夠跨重啓而存在呢? 是的,Kubernetes支持的概念,因此可以使用持久化的卷類型。
  • 是否手動創建Pod,如果想要創建同一個容器的多份拷貝,需要一個個分別創建出來麼?可以手動創建單個Pod,但是也可以使用Replication Controller使用Pod模板創建出多份拷貝,下文會詳細介紹。
  • 如果Pod是短暫的,那麼重啓時IP地址可能會改變,那麼怎麼才能從前端容器正確可靠地指向後臺容器呢?這時可以使用Service,下文會詳細介紹。

Lable

正如圖所示,一些Pod有Label。一個Label是attach到Pod的一對鍵/值對,用來傳遞用戶定義的屬性。比如,你可能創建了一個"tier"和“app”標籤,通過Label(tier=frontend, app=myapp)來標記前端Pod容器,使用Label(tier=backend, app=myapp)標記後臺Pod。然後可以使用Selectors選擇帶有特定Label的Pod,並且將Service或者Replication Controller應用到上面。

Replication Controller

是否手動創建Pod,如果想要創建同一個容器的多份拷貝,需要一個個分別創建出來麼,能否將Pods劃到邏輯組裏?

Replication Controller確保任意時間都有指定數量的Pod“副本”在運行。如果爲某個Pod創建了Replication Controller並且指定3個副本,它會創建3個Pod,並且持續監控它們。如果某個Pod不響應,那麼Replication Controller會替換它,保持總數爲3.如下面的動畫所示:

 

2.gif

 

如果之前不響應的Pod恢復了,現在就有4個Pod了,那麼Replication Controller會將其中一個終止保持總數爲3。如果在運行中將副本總數改爲5,Replication Controller會立刻啓動2個新Pod,保證總數爲5。還可以按照這樣的方式縮小Pod,這個特性在執行滾動升級時很有用。

當創建Replication Controller時,需要指定兩個東西:

  1. Pod模板:用來創建Pod副本的模板
  2. Label:Replication Controller需要監控的Pod的標籤。

現在已經創建了Pod的一些副本,那麼在這些副本上如何均衡負載呢?我們需要的是Service。

Service

如果Pods是短暫的,那麼重啓時IP地址可能會改變,怎麼才能從前端容器正確可靠地指向後臺容器呢?

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因爲Service是抽象的,所以在圖表裏通常看不到它們的存在,這也就讓這一概念更難以理解。

現在,假定有2個後臺Pod,並且定義後臺Service的名稱爲‘backend-service’,lable選擇器爲(tier=backend, app=myapp)。backend-service 的Service會完成如下兩件重要的事情:

  • 會爲Service創建一個本地集羣的DNS入口,因此前端Pod只需要DNS查找主機名爲 ‘backend-service’,就能夠解析出前端應用程序可用的IP地址。
  • 現在前端已經得到了後臺服務的IP地址,但是它應該訪問2個後臺Pod的哪一個呢?Service在這2個後臺Pod之間提供透明的負載均衡,會將請求分發給其中的任意一個(如下面的動畫所示)。通過每個Node上運行的代理(kube-proxy)完成。這裏有更多技術細節。

下述動畫展示了Service的功能。注意該圖作了很多簡化。如果不進入網絡配置,那麼達到透明的負載均衡目標所涉及的底層網絡和路由相對先進。如果有興趣,這裏有更深入的介紹。

 

3.gif

 

有一個特別類型的Kubernetes Service,稱爲'LoadBalancer',作爲外部負載均衡器使用,在一定數量的Pod之間均衡流量。比如,對於負載均衡Web流量很有用。

Node

節點(上圖橘色方框)是物理或者虛擬機器,作爲Kubernetes worker,通常稱爲Minion。每個節點都運行如下Kubernetes關鍵組件:

  • Kubelet:是主節點代理。
  • Kube-proxy:Service使用其將鏈接路由到Pod,如上文所述。
  • Docker或Rocket:Kubernetes使用的容器技術來創建容器。

Kubernetes Master

集羣擁有一個Kubernetes Master(紫色方框)。Kubernetes Master提供集羣的獨特視角,並且擁有一系列組件,比如Kubernetes API Server。API Server提供可以用來和集羣交互的REST端點。master節點包括用來創建和複製Pod的Replication Controller。

下一步

現在我們已經瞭解了Kubernetes核心概念的基本知識,你可以進一步閱讀Kubernetes 用戶手冊。用戶手冊提供了快速並且完備的學習文檔。
如果迫不及待想要試試Kubernetes,可以使用Google Container Engine。Google Container Engine是託管的Kubernetes容器環境。簡單註冊/登錄之後就可以在上面嘗試示例了。

原文鏈接:Learn the Kubernetes Key Concepts in 10 Minutes(翻譯:崔婧雯)
===========================
譯者介紹
崔婧雯,現就職於IBM,高級軟件工程師,負責IBM WebSphere業務流程管理軟件的系統測試工作。曾就職於VMware從事桌面虛擬化產品的質量保證工作。對虛擬化,中間件技術,業務流程管理有濃厚的興趣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章