Kubernetes 入门(1)基本概念
1. Kubernetes簡(jiǎn)介
作為一個(gè)目前在生產(chǎn)環(huán)境已經(jīng)廣泛使用的開源項(xiàng)目 Kubernetes 被定義成一個(gè)用于自動(dòng)化部署、擴(kuò)容和管理容器應(yīng)用的開源系統(tǒng);它將一個(gè)分布式軟件的一組容器打包成一個(gè)個(gè)更容易管理和發(fā)現(xiàn)的邏輯單元。
Kubernetes 是希臘語(yǔ)『舵手』的意思,它最開始由 Google 的幾位軟件工程師創(chuàng)立,深受公司內(nèi)部 Borg 和 Omega 項(xiàng)目的影響,很多設(shè)計(jì)都是從 Borg 中借鑒的,同時(shí)也對(duì) Borg 的缺陷進(jìn)行了改進(jìn),Kubernetes 目前是 Cloud Native Computing Foundation (CNCF) 的項(xiàng)目并且是很多公司管理分布式系統(tǒng)的解決方案。
在 Kubernetes 統(tǒng)治了容器編排這一領(lǐng)域之前,其實(shí)也有很多容器編排方案,例如 compose 和 Swarm,但是在運(yùn)維大規(guī)模、復(fù)雜的集群時(shí),這些方案基本已經(jīng)都被 Kubernetes 替代了。
2. Node
Node 可以是一臺(tái)物理機(jī),也可以是虛擬機(jī)。
2.1 Node狀態(tài)
當(dāng)我們拿到這臺(tái)服務(wù)器后,首先我們登錄服務(wù)器查看下服務(wù)器的基本配置和信息。其實(shí)對(duì)于一個(gè)新加入 K8S 集群的 Node 也是一樣,需要先檢查它的狀態(tài),并將狀態(tài)上報(bào)至集群的 master 。
2.1.1 IP地址
首先,我們所關(guān)心的是我們服務(wù)器的 IP 地址,包括內(nèi)網(wǎng) IP 和外網(wǎng) IP。對(duì)應(yīng)于 K8S 集群的話這個(gè)概念是類似的,內(nèi)部 IP 可在 K8S 集群內(nèi)訪問(wèn),外部 IP 可在集群外訪問(wèn)。
2.1.2 信息
我們需要看下服務(wù)器的基本信息,比如看看系統(tǒng)版本信息, cat /etc/issue 或者 cat /etc/os-release 等方法均可查看。對(duì)于 K8S 集群會(huì)將每個(gè) Node 的這些基礎(chǔ)信息都記錄下來(lái)。
2.1.3 容量
我們通常也都會(huì)關(guān)注下,我們有幾個(gè)核心的 CPU ,可通過(guò) cat /proc/cpuinfo 查看,有多大的內(nèi)存 通過(guò) cat /proc/meminfo 或 free 等查看。對(duì)于 K8S 集群,會(huì)默認(rèn)統(tǒng)計(jì)這些信息,并計(jì)算在此 Node 上可調(diào)度的 Pod 數(shù)量。
2.1.4 條件
對(duì)于我們拿到的服務(wù)器,我們根據(jù)上述的一些基本信息進(jìn)行判斷,這臺(tái)機(jī)器是否能滿足我們的需要。對(duì) K8S 集群也同樣,當(dāng)判斷上述信息均滿足要求時(shí)候,便將集群內(nèi)記錄的該 Node 信息標(biāo)記為 Ready (Ready = True),這樣我們的服務(wù)器便正式的完成交付。
3. Deployment 和 Pod
3.1 Pod
作為 Kubernetes 集群中的基本單元,Pod 就是最小并且最簡(jiǎn)單的 Kubernetes 對(duì)象,這個(gè)簡(jiǎn)單的對(duì)象其實(shí)就能夠獨(dú)立啟動(dòng)一個(gè)后端進(jìn)程并在集群的內(nèi)部為調(diào)用方提供服務(wù)。
3.2 Deployment
提供了一種對(duì) Pod 和 ReplicaSet 的管理方式,每一個(gè) Deployment 都對(duì)應(yīng)集群中的一次部署,是非常常見的 Kubernetes 對(duì)象。
3.3 例如
在使用一臺(tái)服務(wù)器時(shí),我們通常需要編寫一個(gè)主頁(yè)index.html以及將其部署在web服務(wù)器上,對(duì)于 K8S 而言,我們想要的,能提供對(duì) index.html 訪問(wèn)的服務(wù)便可理解為 Deployment 的概念,表明一種我們預(yù)期的目標(biāo)狀態(tài)。
而對(duì)于 web服務(wù)器 和 index.html 這個(gè)組合可以理解為其中的 Pod 概念,作為最小的調(diào)度單元。
4. Container Runtime
Docker 已經(jīng)是容器技術(shù)的事實(shí)標(biāo)準(zhǔn)了,它讓開發(fā)者將自己的應(yīng)用以及依賴打包到一個(gè)可移植的容器中,讓應(yīng)用程序的運(yùn)行可以實(shí)現(xiàn)環(huán)境無(wú)關(guān)。
如果我們想要將當(dāng)前主頁(yè)部署在多臺(tái)服務(wù)器上,我們可以在服務(wù)器上安裝docker,此時(shí),我們需要做的事情,也便只是將我們的服務(wù)構(gòu)建成一個(gè)鏡像,需要編寫一個(gè) Dockerfile,構(gòu)建一個(gè)鏡像并部署到每臺(tái)服務(wù)器上便可。
我們能夠通過(guò) Docker 實(shí)現(xiàn)進(jìn)程、網(wǎng)絡(luò)以及掛載點(diǎn)和文件系統(tǒng)隔離的環(huán)境,并且能夠?qū)λ拗鳈C(jī)的資源進(jìn)行分配,這能夠讓我們?cè)谕粋€(gè)機(jī)器上運(yùn)行多個(gè)不同的 Docker 容器,任意一個(gè) Docker 的進(jìn)程都不需要關(guān)心宿主機(jī)的依賴,都各自在鏡像構(gòu)建時(shí)完成依賴的安裝和編譯等工作,這也是為什么 Docker 是 Kubernetes 項(xiàng)目的一個(gè)重要依賴。
而 Docker 如果對(duì)應(yīng)于 K8S 集群中的概念,便是 Container Runtime,這里還有其他的選擇,比如 rkt,runc 和其他實(shí)現(xiàn)了 OCI 規(guī)范的運(yùn)行時(shí)。
參考資料
《Kubernetes 從上手到實(shí)踐》
總結(jié)
以上是生活随笔為你收集整理的Kubernetes 入门(1)基本概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 初探Golang(4)-map和流程控制
- 下一篇: Kubernetes 入门(2)基本组件