【插畫】一文看懂容器k8s
作者:石義峰
來源:恒生Light雲社區
本篇翻譯官方英文的插畫版内容,插畫版指南生動形象,更好(hǎo)的幫助理解k8s。
英文原文--The Illustrated Children’s Guide to Kubernetes
————————————————中文正文開(kāi)始————————————————
有一天,女兒走進(jìn)書房問我:『親愛的爸爸,什麼(me)是Kubernetes呢?』
我回答她:『Kubernetes是一個開(kāi)源的Docker容器編排系統,它可以調度計算集群的節點,動态管理上面(miàn)的作業,保證它們按用戶期望的狀态運行。通過(guò)使用「labels」和「pods」的概念,Kubernetes將(jiāng)應用按邏輯單元進(jìn)行分組,方便管理和服務發(fā)現。』
女兒更疑惑了……于是就(jiù)有了這(zhè)個故事(shì)
很久很久以前,有一個叫(jiào) Phippy 的應用程序。她是一個簡單的應用程序,由 PHP 編寫且隻有一個頁面(miàn)。
她住在一個需要和其他可怕的應用程序分享環境的主機中 ,她不認識這(zhè)些應用程序并且不願意和他們來往。
她希望她能(néng)擁有 一個屬于自己的環境:隻有她自己和她可以稱之爲家的 Web 服務器。
每個應用程序都(dōu)有個運行所依賴的環境。對(duì)于 PHP 應用程序來說(shuō),這(zhè)個環境可能(néng)包括 Web 服務器,一個可讀文件系統和 PHP 引擎本身。
有一天,一隻善良的鲸魚出現了。他建議小 Phippy 住在容器裡(lǐ),這(zhè)樣(yàng)可能(néng)會(huì)更快樂。所以應用程序 Phippy 遷移到了容器中。這(zhè)個容器很棒,但是……它有點像一個漂浮在大海中央的豪華起(qǐ)居室。
容器提供了一個獨立的環境,應用程序可以在這(zhè)個環境中運行。但是這(zhè)些孤立的容器常常需要被(bèi)管理并與外面(miàn)的世界連接。
對(duì)于孤立的容器而言,共享文件系統、網絡通信、調度、負載均衡和分發(fā)都(dōu)是要面(miàn)對(duì)的挑戰。
就(jiù)在 Phippy 甚至開(kāi)始絕望時(shí),一位駕駛著(zhe)巨輪的船長(cháng)出現在海平線上。這(zhè)艘船由幾十個綁在一起(qǐ)的木筏組成(chéng),但從外面(miàn)來看,它就(jiù)像一艘巨輪。
“你好(hǎo)呀,這(zhè)位 PHP 應用程序朋友。我是 Kube 船長(cháng)。”睿智的老船長(cháng)說(shuō)。
“Kubernetes” 在希臘語中是船長(cháng)的意思。 我們可以從這(zhè)個單詞中得到 Cybernetic 和 Gubernatorial 這(zhè)兩(liǎng)個詞組。Kubernetes 項目專注于構建一個健壯的平台,用于在生産環境中運行數千個容器。
“我是 Phippy。”小應用程序說(shuō)。
“很高興認識你。”船長(cháng)一邊說(shuō),一邊在她身上貼上了一張标有姓名的标簽。
Kubernetes 使用标簽作爲“名牌”來标識事(shì)物。它可以根據這(zhè)些标簽進(jìn)行查詢。标簽是開(kāi)放性的:你可以用他們來表示角色、穩定性或其他重要的屬性。
船長(cháng)建議應用程序把她的容器搬到船上的一個船艙中。Phippy 很高興地把她的容器搬到 Kube 船長(cháng)巨輪的船艙内。Phippy 覺得這(zhè)裡(lǐ)像家一樣(yàng)。
在 Kubernetes 中,Pod 代表一個可運行的工作單元。通常,你會(huì)在 Pod 中運行一個容器。
但是對(duì)于一些容器緊密耦合的情況,你可以選擇在同一個 Pod 中運行多個容器。
Kubernetes 負責將(jiāng)你的 Pod 和網絡以及 Kubernetes 的其餘環境相連。
Phippy 有一些不同尋常的興趣,她很喜歡遺傳學(xué)和綿羊。所以她問船長(cháng):“如果我想克隆我自己,是否可以根據需求克隆任意次數呢?”
“這(zhè)很容易。”船長(cháng)說(shuō)。船長(cháng)把 Phippy 介紹給了 Replication Controller。
Replication Controller 提供一種(zhǒng)管理任意數量 Pod 的方法。一個 Replication Controller 包含一個 Pod 模闆,該模闆可以被(bèi)複制任意次數。
通過(guò) Replication Controller,Kubernetes 將(jiāng)管理 Pod 的生命周期,包括伸縮、滾動更新和監控。
無數個日夜,小應用程序在她的船艙中與她的複制品相處十分愉快。但與自己爲伍并沒(méi)有所說(shuō)的那麼(me)好(hǎo)……即使你擁有 N 個自己的克隆體。
Kube 船長(cháng)慈祥地笑了笑:“我正好(hǎo)有一樣(yàng)東西。”
他剛開(kāi)口,在 Phippy 的 Replication Controller 和船的其他部分之間打開(kāi)了一條隧道(dào)。Kube 船長(cháng)笑著(zhe)說(shuō):“即使你的複制品來了又去,這(zhè)條隧道(dào)始終會(huì)留在這(zhè)裡(lǐ),你可以通過(guò)它發(fā)現其他 Pod,其他 Pod 也可以發(fā)現你!”
服務告知 Kubernetes 環境的其餘部分(包括其他 Pod 和 Replication Controller)你的應用程序包含了哪些服務,當 Pod 來來往往,服務的 IP 地址和端口始終保持不變。
其他應用程序可以通過(guò) Kurbenetes 服務發(fā)現找到你的服務。
多虧了這(zhè)些服務,Phippy 開(kāi)始探索船的其他部分。不久之後(hòu),Phippy 遇到了 Goldie。他們成(chéng)了最好(hǎo)的朋友。
有一天,Goldie 做了一件不同尋常的事(shì)。她送給 Phippy 一件禮物。Phippy 看了禮物一眼,悲傷的淚水奪眶而出。
“你爲什麼(me)這(zhè)麼(me)傷心呢?”Goldie 問道(dào)。
“我喜歡這(zhè)個禮物,但我沒(méi)有地方可以放它!”Phippy 抽噎道(dào)。
但 Goldie 知道(dào)該怎麼(me)做。“爲什麼(me)不把它放入卷中呢?”
卷表示容器可以訪問和存儲信息的位置。對(duì)于應用程序,卷顯示爲本地文件系統的一部分。但卷可以由本地存儲、Ceph、Gluster、持久性塊存儲,以及其他存儲後(hòu)端支持。
Phippy 喜歡在 Kube 船長(cháng)的船上生活,她很享受來自新朋友的陪伴(Goldie 和每個克隆人都(dōu)同樣(yàng)令人愉悅)。但是,當她回想起(qǐ)在可怕的主機度過(guò)的日子,她想知道(dào)她是否也可以擁有一點自己的隐私。
“這(zhè)聽起(qǐ)來像是你所需要的,”Kube 船長(cháng)說(shuō),“這(zhè)是一個命名空間。”
命名空間是 Kubernetes 内部的分組機制。服務、Pod、Replication Controller 和卷可以在命名空間内部輕松協作,但命名空間提供了與集群其他部分一定程度的隔離。
Phippy 與她的新朋友一起(qǐ)乘坐 Kube 船長(cháng)的巨輪航行于大海之上。她經(jīng)曆了許多偉大的冒險,但最重要的是,Phippy 找到了自己的家。
所以 Phippy 從此過(guò)上了幸福的生活。