一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

云原生初學(xué)者入門必讀

 長(zhǎng)沙7喜 2020-11-01

近年來(lái)騰訊、阿里巴巴、華為、網(wǎng)易、百度等大廠,中國(guó)信通院、各大技術(shù)大會(huì)和社區(qū)都在推廣的云原生究竟如何入門?本文是入門向,適合所有想要入門云原生的新人閱讀。另外,云原生社區(qū)還發(fā)布過(guò)一篇投資人視角下的云原生解讀,可以幫助您了解云原生。

作者:宋凈超(Jimmy Song),云原生社區(qū)發(fā)起人,Tetrate 布道師。


為什么寫這篇文章

看到這個(gè)標(biāo)題后,大家可能會(huì)問(wèn)“都已經(jīng) 2020 年了,Kubernetes 開(kāi)源有 6 年時(shí)間了,為什么還要寫一篇 Kubernetes 入門的文章?”我想說(shuō)的是,Kubernetes 還遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到我們想象的那么普及。眾多的開(kāi)發(fā)者,平時(shí)忙于各自的業(yè)務(wù)開(kāi)發(fā),學(xué)習(xí)新技術(shù)的時(shí)間有限;還有大量的學(xué)生群體,可能還僅僅停留在“知道有這門技術(shù)”的階段,遠(yuǎn)遠(yuǎn)沒(méi)有入門。這篇文章將助于各位有志于從事云原生領(lǐng)域工作或需要了解該領(lǐng)域背景的人群快速入門 Kubernetes 和云原生。

因?yàn)樵圃闹R(shí)體系過(guò)于龐雜,本文主要講解容器、Kubernetes 及服務(wù)網(wǎng)格的入門概念,關(guān)于云原生的更多細(xì)節(jié)將在后續(xù)文章中推出。另外大家也可以關(guān)注云原生社區(qū)推出的 云原生知識(shí)圖譜[1] 項(xiàng)目,進(jìn)一步了解云原生。

引言

Kubernetes[2] 一詞來(lái)自希臘語(yǔ),意思是“飛行員”或“舵手”。這個(gè)名字很貼切,Kubernetes 可以幫助你在波濤洶涌的容器海洋中航行。

Kubernetes 是做什么的?什么是 Docker?什么是容器編排?Kubernetes 是如何工作和擴(kuò)展的?你可能還有很多其他的問(wèn)題,本文將一一為你解答。

這篇文章適合初學(xué)者,尤其是那些工作忙碌,沒(méi)有辦法抽出太多時(shí)間來(lái)了解 Kubernetes 和云原生的開(kāi)發(fā)者們,希望本文可以幫助你進(jìn)入 Kubernetes 的世界。

簡(jiǎn)而言之,Kubernetes 提供了一個(gè)平臺(tái)或工具來(lái)幫助你快速協(xié)調(diào)或擴(kuò)展容器化應(yīng)用,特別是在 Docker[3] 容器。讓我們深入了解一下這些概念。

容器和容器化

那么什么是容器呢?

要討論容器化首先要談到虛擬機(jī) (VM),顧名思義,虛擬機(jī)就是可以遠(yuǎn)程連接的虛擬服務(wù)器,比如 AWS 的 EC2 或阿里云的 ECS。

接下來(lái),假如你要在虛擬機(jī)上運(yùn)行一個(gè)網(wǎng)絡(luò)應(yīng)用——包括一個(gè) MySQL 數(shù)據(jù)庫(kù)、一個(gè) Vue 前端和一些 Java 庫(kù),在 Ubuntu 操作系統(tǒng) (OS) 上運(yùn)行。你不用熟悉其中的每一個(gè)技術(shù)——你只要記住,一個(gè)應(yīng)用程序由各種組件、服務(wù)和庫(kù)組成,它們運(yùn)行在操作系統(tǒng)上。

現(xiàn)在,將應(yīng)用程序打包成一個(gè)虛擬機(jī)鏡像,這個(gè)鏡像中包括了 Ubuntu 操作系統(tǒng)。這使得虛擬機(jī)變得非常笨重——通常有幾個(gè) G 的大小。

虛擬機(jī)鏡像包含了整個(gè)操作系統(tǒng)及所有的庫(kù),對(duì)應(yīng)用程序來(lái)說(shuō),這個(gè)鏡像過(guò)于臃腫,其中大部分組件并沒(méi)有被應(yīng)用程序直接調(diào)用。如果你需要重新創(chuàng)建、備份或擴(kuò)展這個(gè)應(yīng)用程序,就需要復(fù)制整個(gè)環(huán)境(虛擬機(jī)鏡像),在新環(huán)境中啟動(dòng)應(yīng)用通常需要幾十秒甚至幾分鐘時(shí)間。如果你想單獨(dú)升級(jí)應(yīng)用中的某個(gè)組件,比如說(shuō) Vue 應(yīng)用,就需要重建整個(gè)虛擬機(jī)鏡像。另外,如果你的兩個(gè)應(yīng)用依賴同一個(gè)底層鏡像,升級(jí)底層鏡像會(huì)同時(shí)影響這兩個(gè)應(yīng)用,而有時(shí)候,你只需要升級(jí)其中一個(gè)應(yīng)用的依賴而已。這就是所謂的“依賴陷阱”。

解決這個(gè)問(wèn)題的辦法就是容器。容器是繼虛擬機(jī)之后更高層次的抽象,在這層抽象中,整個(gè)應(yīng)用程序的每個(gè)組件被單獨(dú)打包成一個(gè)個(gè)獨(dú)立的單元,這個(gè)單元就是所謂的容器。通過(guò)這種方式,可以將代碼和應(yīng)用服務(wù)從底層架構(gòu)中分離出來(lái),實(shí)現(xiàn)了完全的可移植性(在任何操作系統(tǒng)或環(huán)境上運(yùn)行應(yīng)用的能力)。所以在上面的例子中,Ubuntu 操作系統(tǒng)就是一個(gè)單元(容器)。MySQL 數(shù)據(jù)庫(kù)是另一個(gè)容器,Vue 環(huán)境和隨之而來(lái)的庫(kù)也是一個(gè)容器。

但是,MySQL 數(shù)據(jù)庫(kù)是如何自己“運(yùn)行”的?數(shù)據(jù)庫(kù)本身肯定也要在操作系統(tǒng)上運(yùn)行吧?沒(méi)錯(cuò)!

更高層次的容器,比如 MySQL 容器,實(shí)際上會(huì)包含必要的庫(kù)來(lái)與底層的操作系統(tǒng)容器通信和集成。所以你可以把容器看成是整個(gè)應(yīng)用堆棧中的一層,每層都依賴于下層的單元。而這就類似于船舶或港口中集裝箱的堆疊方式,每個(gè)容器的穩(wěn)定性都依賴于下面的容器的支持。所以應(yīng)用容器的核心是一個(gè)受控的執(zhí)行環(huán)境。它們?cè)试S你從頭開(kāi)始定義整個(gè)環(huán)境,從操作系統(tǒng)開(kāi)始,到你要使用的各個(gè)版本的庫(kù),再到你要添加的代碼版本。

與容器相關(guān)的一個(gè)重要概念是微服務(wù)。將應(yīng)用程序的各個(gè)組件拆分并打包成獨(dú)立的服務(wù),這樣每個(gè)組件都可以很容易地被替換、升級(jí)、調(diào)試。上面的例子中,我們會(huì)為 Vue 前端創(chuàng)建一個(gè)微服務(wù),為 MySQL 數(shù)據(jù)庫(kù)創(chuàng)建另一個(gè)微服務(wù),為 Java 中間件部分創(chuàng)建另一個(gè)微服務(wù),以此類推。很明顯,微服務(wù)與容器化是相輔相成的。

從 Docker 開(kāi)始

現(xiàn)在你已經(jīng)對(duì)容器有一定了解了吧?Docker 是最常用的容器化工具,也是最流行的容器運(yùn)行時(shí)。

Docker 開(kāi)源于 2013 年。用于打包和創(chuàng)建容器,管理基于容器的應(yīng)用。所有 Linux 發(fā)行版、Windows 和 macOS 都支持 Docker。

還有其他的容器化工具,如 CoreOS rkt[4]Mesos Containerizer[5] 和 LXC[6]。但是目前,絕大多數(shù)的容器化應(yīng)用都是在 Docker 上運(yùn)行的。

再到 Kubernetes

首先,簡(jiǎn)單介紹一下歷史。Kubernetes 是 Google 基于其內(nèi)部容器調(diào)度平臺(tái) Borg 的經(jīng)驗(yàn)開(kāi)發(fā)的。2014 年開(kāi)源,并作為 CNCF(云原生計(jì)算基金會(huì))的核心發(fā)起項(xiàng)目。

那么 Kubernetes 又跟容器是什么關(guān)系呢?讓我們?cè)倩氐缴厦娴睦?。假設(shè)我們的應(yīng)用爆火,每天的注冊(cè)用戶越來(lái)越多。

現(xiàn)在,我們需要增加后端資源,使瀏覽我們網(wǎng)站的用戶在瀏覽頁(yè)面時(shí)加載時(shí)間不會(huì)過(guò)長(zhǎng)或者超時(shí)。最簡(jiǎn)單的方式就是增加容器的數(shù)量,然后使用負(fù)載均衡器將傳入的負(fù)載(以用戶請(qǐng)求的形式)分配給容器。

這樣做雖然行之有效,但也只能在用戶規(guī)模有限的情況下使用。當(dāng)用戶請(qǐng)求達(dá)到幾十萬(wàn)或幾百萬(wàn)時(shí),這種方法也是不可擴(kuò)展的。你需要管理幾十個(gè)也許是幾百個(gè)負(fù)載均衡器,這本身就是另一個(gè)令人頭疼的問(wèn)題。如果我們想對(duì)網(wǎng)站或應(yīng)用進(jìn)行任何升級(jí),也會(huì)遇到問(wèn)題,因?yàn)樨?fù)載均衡不會(huì)考慮到應(yīng)用升級(jí)的問(wèn)題。我們需要單獨(dú)配置每個(gè)負(fù)載均衡器,然后升級(jí)該均衡器所服務(wù)的容器。想象一下,當(dāng)你有 20 個(gè)負(fù)載均衡器和每周 5 或 6 個(gè)小的更新時(shí),你將不得不進(jìn)行大量的手工勞動(dòng)。

我們需要的是一種可以一次性將變更傳遞給所有受控容器的方法,同時(shí)也需要一種可以輕松地調(diào)度可用容器的方法,這個(gè)過(guò)程還必須要是自動(dòng)化的,這正是 Kubernetes 所做的事情。

接下來(lái),我們將探討 Kubernetes 究竟是如何工作的,它的各種組件和服務(wù),以及更多關(guān)于如何使用 Kubernetes 來(lái)編排、管理和監(jiān)控容器化環(huán)境。為了簡(jiǎn)單起見(jiàn),假設(shè)我們使用的是 Docker 容器,盡管如前所述,Kubernetes 除了支持 Docker 之外,還支持其他幾種容器平臺(tái)。

Kubernetes 架構(gòu)和組件

首先,最重要的是你需要認(rèn)識(shí)到 Kubernetes 利用了“期望狀態(tài)”原則。就是說(shuō),你定義了組件的期望狀態(tài),而 Kubernetes 要將它們始終調(diào)整到這個(gè)狀態(tài)。

例如,你想讓你的 Web 服務(wù)器始終運(yùn)行在 4 個(gè)容器中,以達(dá)到負(fù)載均衡的目的,你的數(shù)據(jù)庫(kù)復(fù)制到 3 個(gè)不同的容器中,以達(dá)到冗余的目的。這就是你想要的狀態(tài)。如果這 7 個(gè)容器中的任何一個(gè)出現(xiàn)故障,Kubernetes 引擎會(huì)檢測(cè)到這一點(diǎn),并自動(dòng)創(chuàng)建出一個(gè)新的容器,以確保維持所需的狀態(tài)。

現(xiàn)在我們來(lái)定義一些 Kubernetes 的重要組件。

當(dāng)你第一次設(shè)置 Kubernetes 時(shí),你會(huì)創(chuàng)建一個(gè)集群。所有其他組件都是集群的一部分。你也可以創(chuàng)建多個(gè)虛擬集群,稱為命名空間 (namespace),它們是同一個(gè)物理集群的一部分。這與你可以在同一物理服務(wù)器上創(chuàng)建多個(gè)虛擬機(jī)的方式非常相似。如果你不需要,也沒(méi)有明確定義的命名空間,那么你的集群將在始終存在的默認(rèn)命名空間中創(chuàng)建。

Kubernetes 運(yùn)行在節(jié)點(diǎn) (node) 上,節(jié)點(diǎn)是集群中的單個(gè)機(jī)器。如果你有自己的硬件,節(jié)點(diǎn)可能對(duì)應(yīng)于物理機(jī)器,但更可能對(duì)應(yīng)于在云中運(yùn)行的虛擬機(jī)。節(jié)點(diǎn)是部署你的應(yīng)用或服務(wù)的地方,是 Kubernetes 工作的地方。有 2 種類型的節(jié)點(diǎn)——master 節(jié)點(diǎn)和 worker 節(jié)點(diǎn),所以說(shuō) Kubernetes 是主從結(jié)構(gòu)的。

主節(jié)點(diǎn)是一個(gè)控制其他所有節(jié)點(diǎn)的特殊節(jié)點(diǎn)。一方面,它和集群中的任何其他節(jié)點(diǎn)一樣,這意味著它只是另一臺(tái)機(jī)器或虛擬機(jī)。另一方面,它運(yùn)行著控制集群其他部分的軟件。它向集群中的所有其他節(jié)點(diǎn)發(fā)送消息,將工作分配給它們,工作節(jié)點(diǎn)向主節(jié)點(diǎn)上的 API Server 匯報(bào)。

Master 節(jié)點(diǎn)本身也包含一個(gè)名為 API Server 的組件。這個(gè) API 是節(jié)點(diǎn)與控制平面通信的唯一端點(diǎn)。API Server 至關(guān)重要,因?yàn)檫@是 worker 節(jié)點(diǎn)和 master 節(jié)點(diǎn)就 pod、deployment 和所有其他 Kubernetes API 對(duì)象的狀態(tài)進(jìn)行通信的點(diǎn)。

Woker 節(jié)點(diǎn)是 Kubernetes 中真正干活的節(jié)點(diǎn)。當(dāng)你在應(yīng)用中部署容器或 pod(稍后定義)時(shí),其實(shí)是在將它們部署到 worker 節(jié)點(diǎn)上運(yùn)行。Worker 節(jié)點(diǎn)托管和運(yùn)行一個(gè)或多個(gè)容器的資源。

Kubernetes 中的邏輯而非物理的工作單位稱為 pod。一個(gè) pod 類似于 Docker 中的容器。記得我們?cè)谇懊嬷v到,容器可以讓你創(chuàng)建獨(dú)立、隔離的工作單元,可以獨(dú)立運(yùn)行。但是要?jiǎng)?chuàng)建復(fù)雜的應(yīng)用程序,比如 Web 服務(wù)器,你經(jīng)常需要結(jié)合多個(gè)容器,然后在一個(gè) pod 中一起運(yùn)行和管理。這就是 pod 的設(shè)計(jì)目的——一個(gè) pod 允許你把多個(gè)容器,并指定它們?nèi)绾谓M合在一起來(lái)創(chuàng)建應(yīng)用程序。而這也進(jìn)一步明確了 Docker 和 Kubernetes 之間的關(guān)系——一個(gè) Kubernetes pod 通常包含一個(gè)或多個(gè) Docker 容器,所有的容器都作為一個(gè)單元來(lái)管理。

Kubernetes 中的 service 是一組邏輯上的 pod。把一個(gè) service 看成是一個(gè) pod 的邏輯分組,它提供了一個(gè)單一的 IP 地址和 DNS 名稱,你可以通過(guò)它訪問(wèn)服務(wù)內(nèi)的所有 pod。有了服務(wù),就可以非常容易地設(shè)置和管理負(fù)載均衡,當(dāng)你需要擴(kuò)展 Kubernetes pod 時(shí),這對(duì)你有很大的幫助,我們很快就會(huì)看到。

ReplicationController 或 ReplicaSet 是 Kubernetes 的另一個(gè)關(guān)鍵功能。它是負(fù)責(zé)實(shí)際管理 pod 生命周期的組件——當(dāng)收到指令時(shí)或 pod 離線或意外停止時(shí)啟動(dòng) pod,也會(huì)在收到指示時(shí)殺死 pod,也許是因?yàn)橛脩糌?fù)載減少。所以換句話說(shuō),ReplicationController 有助于實(shí)現(xiàn)我們所期望的指定運(yùn)行的 pod 數(shù)量的狀態(tài)。

什么是 Kubectl?

kubectl 是一個(gè)命令行工具,用于與 Kubernetes 集群和其中的 pod 通信。使用它你可以查看集群的狀態(tài),列出集群中的所有 pod,進(jìn)入 pod 中執(zhí)行命令等。你還可以使用 YAML 文件定義資源對(duì)象,然后使用 kubectl 將其應(yīng)用到集群中。

Kubernetes 中的自動(dòng)擴(kuò)展

請(qǐng)記住,我們使用 Kubernetes 而不是直接使用 Docker 的原因之一,是因?yàn)?Kubernetes 能夠自動(dòng)擴(kuò)展應(yīng)用實(shí)例的數(shù)量以滿足工作負(fù)載的需求。

自動(dòng)縮放是通過(guò)集群設(shè)置來(lái)實(shí)現(xiàn)的,當(dāng)服務(wù)需求增加時(shí),增加節(jié)點(diǎn)數(shù)量,當(dāng)需求減少時(shí),則減少節(jié)點(diǎn)數(shù)量。但也要記住,節(jié)點(diǎn)是 “物理” 結(jié)構(gòu)——我們把“物理”放在引號(hào)里,因?yàn)橐涀?,很多時(shí)候,它們實(shí)際上是虛擬機(jī)。

無(wú)論如何,節(jié)點(diǎn)是物理機(jī)器的事實(shí)意味著我們的云平臺(tái)必須允許 Kubernetes 引擎創(chuàng)建新機(jī)器。各種云提供商對(duì) Kubernetes 支持基本都滿足這一點(diǎn)。

我們?cè)倮^續(xù)說(shuō)一些概念,這次是和網(wǎng)絡(luò)有關(guān)的。

什么是 kubernetes Ingress 和 Egress?

外部用戶或應(yīng)用程序與 Kubernetes pod 交互,就像 pod 是一個(gè)真正的服務(wù)器一樣。我們需要設(shè)置安全規(guī)則允許哪些流量可以進(jìn)入和離開(kāi)“服務(wù)器”,就像我們?yōu)橥泄軕?yīng)用程序的服務(wù)器定義安全規(guī)則一樣。

進(jìn)入 Kubernetes pod 的流量稱為 Ingress,而從 pod 到集群外的出站流量稱為 egress。我們創(chuàng)建入口策略和出口策略的目的是限制不需要的流量進(jìn)入和流出服務(wù)。而這些策略也是定義 pod 使用的端口來(lái)接受傳入和傳輸傳出數(shù)據(jù) / 流量的地方。

什么是 Ingress Controller?

但是在定義入口和出口策略之前,你必須首先啟動(dòng)被稱為 Ingress Controller(入口控制器)的組件;這個(gè)在集群中默認(rèn)不啟動(dòng)。有不同類型的入口控制器,Kubernetes 項(xiàng)目默認(rèn)只支持 Google Cloud 和開(kāi)箱即用的 Nginx 入口控制器。通常云供應(yīng)商都會(huì)提供自己的入口控制器。

什么是 Replica 和 ReplicaSet?

為了保證應(yīng)用程序的彈性,需要在不同節(jié)點(diǎn)上創(chuàng)建多個(gè) pod 的副本。這些被稱為 Replica。假設(shè)你所需的狀態(tài)策略是“讓名為 webserver-1 的 pod 始終維持在 3 個(gè)副本”,這意味著 ReplicationController 或 ReplicaSet 將監(jiān)控活動(dòng)副本的數(shù)量,如果其中有任何一個(gè) replica 因任何原因不可用(例如節(jié)點(diǎn)的故障),那么 Deployment Controller 將自動(dòng)創(chuàng)建一個(gè)新的系統(tǒng)(定義如下)。

所需狀態(tài)是在 deployment 中定義的。Master 節(jié)點(diǎn)的中有一個(gè)子系統(tǒng)叫做 Deployment Controller,負(fù)責(zé)實(shí)際執(zhí)行并使當(dāng)前狀態(tài)不斷趨向于所需狀態(tài)。

因此,舉例來(lái)說(shuō),如果你目前有 2 個(gè) pod 的副本,而你所希望的狀態(tài)應(yīng)該有 3 個(gè),那么 Replication Controller 或 ReplicaSet 會(huì)自動(dòng)檢測(cè)到這個(gè)要求,并指示 Deployment Controller 根據(jù)預(yù)定義的設(shè)置部署一個(gè)新的 pod。

什么是服務(wù)網(wǎng)格?

服務(wù)網(wǎng)格 (Service Mesh)[7] 用于管理服務(wù)之間的網(wǎng)絡(luò)流量,是云原生的網(wǎng)絡(luò)基礎(chǔ)設(shè)施層,也是 Kubernetes 次世代的云原生應(yīng)用[8] 的重要組成部分。

服務(wù)網(wǎng)格利用容器之間的網(wǎng)絡(luò)設(shè)置來(lái)控制或改變應(yīng)用程序中不同組件之間的交互。下面,我們用一個(gè)例子來(lái)說(shuō)明。假設(shè)你想測(cè)試 Nginx 的新版本,檢查它是否與你的 Web 應(yīng)用兼容。你用新的 Nginx 版本創(chuàng)建了一個(gè)新的容器 (Container2),并從當(dāng)前容器 (Container1) 中復(fù)制了當(dāng)前的 Nginx webserver 配置。但你不想影響組成 web 應(yīng)用的其他微服務(wù)(假設(shè)每個(gè)容器對(duì)應(yīng)一個(gè)單獨(dú)的微服務(wù))——就是 MySQL 數(shù)據(jù)庫(kù)、Node.js 前端、負(fù)載均衡器等。

所以使用服務(wù)網(wǎng)格,你可以立即只把 webserver 微服務(wù)改成 Container2(新 Nginx 版本的那個(gè))進(jìn)行測(cè)試。如果確定它不能工作,比如因?yàn)樗鼘?dǎo)致網(wǎng)站出現(xiàn)一些兼容性問(wèn)題,那么你就調(diào)用服務(wù)網(wǎng)格來(lái)快速切換回原來(lái)的 Container1。而這一切都不需要對(duì)其他容器進(jìn)行任何配置變更——這些變更對(duì)其他容器是完全透明的。

如果沒(méi)有服務(wù)網(wǎng)格,對(duì)容器來(lái)說(shuō)這項(xiàng)工作將十分繁瑣,因?yàn)檫@涉及到逐一更改所有其他容器上的配置,將它們所包含的服務(wù)從 Container1 指向 Container2,然后在測(cè)試失敗后,將它們?nèi)扛幕貋?lái)。

在前面這部分 Kubernetes 指南中,我們介紹了一些與 Kubernetes 網(wǎng)絡(luò)相關(guān)的概念。Kubernetes 中的網(wǎng)絡(luò)可能很棘手,很難理解,如果你剛剛開(kāi)始,你可能需要一些實(shí)踐來(lái)理解這里。關(guān)于服務(wù)網(wǎng)格的更多內(nèi)容請(qǐng)參考 Istio Handbook——Istio 服務(wù)網(wǎng)格進(jìn)階實(shí)戰(zhàn)[9]

在下一部分中,我們將展開(kāi)更多關(guān)于 Kubernetes 的話題:如何開(kāi)始學(xué)習(xí) Kubernetes,如何在本地安裝和測(cè)試 Kubernetes,以及 Kubernetes 的一些優(yōu)秀的監(jiān)控工具。

如何學(xué)習(xí) Kubernetes?

自學(xué) Kubernetes 知識(shí)基本上有三種不同的途徑,我們?cè)谶@里只提供了一個(gè)指導(dǎo)大綱。

一、從零開(kāi)始學(xué)習(xí)和安裝 Kubernetes

要想真正掌握 Kubernetes,最好的辦法莫過(guò)于自己從頭開(kāi)始安裝 Kubernetes。不過(guò)要注意的是,從零開(kāi)始安裝 Kubernetes 并不是一件容易的事情。安裝 Kubernetes 并不是簡(jiǎn)單的“下載文件 -> 點(diǎn)擊安裝”式的操作,Kubernetes 由多個(gè)組件組成,這些組件必須單獨(dú)安裝和配置。而在此之前,你也需要相當(dāng)?shù)募夹g(shù)儲(chǔ)備來(lái)做安裝前的準(zhǔn)備,比如熟悉 Linux 操作系統(tǒng)。如果你決定使用這種方式學(xué)習(xí)的話,推薦你閱讀 Kubernetes Handbook——Kubernetes 中文指南 / 云原生架構(gòu)實(shí)踐手冊(cè)[10]。此外,請(qǐng)記住,盡管 Kubernetes 作為一個(gè)開(kāi)源解決方案在技術(shù)上是免費(fèi)的,但它確實(shí)有一些隱藏的成本,只不過(guò)對(duì)初學(xué)者來(lái)說(shuō)可能并不明顯。

二、Kubernetes 自托管解決方案

這些解決方案是一些工具和實(shí)用程序,大大簡(jiǎn)化了在本地計(jì)算機(jī)上安裝和配置小型 Kubernetes 集群的任務(wù)。它們是學(xué)習(xí) Kubernetes 的好方法,同時(shí)對(duì)于新手來(lái)說(shuō)也不會(huì)太難,又足夠小巧可以到安裝在個(gè)人電腦上。最流行的自托管 Kubernetes 工具和環(huán)境是 Minikube[11]、MicroK8s[12]Docker Desktop[13] 和 Kind[14]。這些解決方案往往有一些限制,例如,Minikube 只允許創(chuàng)建一個(gè)節(jié)點(diǎn)。盡管有這些缺點(diǎn),但這些工具還是非常值得推薦,因?yàn)樗鼈儗⒁讓W(xué)性和成本效益結(jié)合起來(lái),對(duì)于剛開(kāi)始使用 Kubernetes 的初學(xué)者來(lái)說(shuō),是一個(gè)很好的選擇。

三、云托管的解決方案

如今各大云供應(yīng)商都提供了定制化的 Kubernetes 解決方案來(lái)。你也可以通過(guò)線上教學(xué)平臺(tái)如 Katacoda[15] 上的免費(fèi)課程來(lái)學(xué)習(xí) Kubernetes,它們都是云托管的,你不需要自己安裝,只不過(guò)你需要云供應(yīng)商的集群需要付費(fèi)。

本地測(cè)試和調(diào)試 Kubernetes

作為本地安裝 Kubernetes 的一部分,你很可能還需要一些測(cè)試和調(diào)試能力,以確保一切都在順利運(yùn)行,特別是定義入口和出口策略等棘手的任務(wù)。此外,還有 Kubernetes 附加組件的生態(tài)系統(tǒng),你可能想使用這些組件來(lái)擴(kuò)展 Kubernetes 集群的功能。添加所有這些都需要進(jìn)行更多的測(cè)試,以確保它們能與你的 Kubernetes 集群完美的集成。

用于在本地開(kāi)發(fā)和調(diào)試 Kubernetes 服務(wù)的工具有:Microsoft Bridge to Kubernetes[16] 和 telepresence[17]。這些工具可以讓你在本地運(yùn)行單個(gè)服務(wù),同時(shí)將該服務(wù)連接到遠(yuǎn)程 Kubernetes 集群。這樣你就可以讓自己的本地機(jī)器作為 Kubernetes 集群中的一部分來(lái)運(yùn)行——這對(duì)于在本地而不是在生產(chǎn)集群上開(kāi)發(fā)服務(wù)非常有用。

Kubernetes 項(xiàng)目也了解到了 Kubernetes 安裝對(duì)端到端 (E2E) 測(cè)試的需求。為此,項(xiàng)目核心團(tuán)隊(duì)一直在確保在最近的版本中更恰當(dāng)?shù)刂С?E2E 測(cè)試。這包括諸如允許測(cè)試重用和納入更多附加組件和驅(qū)動(dòng)程序的測(cè)試等。

Kubernetes 監(jiān)控工具

Kubernetes 提供了應(yīng)用程序在集群的每個(gè)層次上的資源使用情況的詳細(xì)信息——容器、pod、服務(wù)。這些詳細(xì)信息使你能夠評(píng)估應(yīng)用程序的性能,確定哪些瓶頸可以解決以提高整體性能。

畢竟,監(jiān)控可以幫助你了解應(yīng)用和集群運(yùn)行情況的詳細(xì)信息,這對(duì)于學(xué)習(xí) Kubernetes 是十分有幫助的。

Kubernetes 包含兩個(gè)內(nèi)置度量收集工具用于監(jiān)控:資源管道和全度量管道[18]。資源管道是一個(gè)較低級(jí)和較有限的工具,主要集中在與各種控制器相關(guān)的指標(biāo)上。全指標(biāo)管道,顧名思義,從幾乎所有集群組件中獲取并顯示更豐富的指標(biāo)。

還有一些第三方工具可以安裝并集成到 Kubernetes 集群中。對(duì)于 Kubernetes 來(lái)說(shuō),最普遍使用的兩個(gè)工具是 Prometheus 和 Grafana。

Prometheus 監(jiān)控

Prometheus 是一個(gè)功能豐富的開(kāi)源監(jiān)控和警報(bào)工具。Prometheus 包含一個(gè)內(nèi)部數(shù)據(jù)存儲(chǔ)用來(lái)收集指標(biāo),如生成的時(shí)間序列數(shù)據(jù)。Prometheus 還擁有眾多插件,允許它將數(shù)據(jù)暴露給各種外部解決方案,并從其他數(shù)據(jù)源導(dǎo)入數(shù)據(jù),包括所有主要公有云監(jiān)控解決方案。

Grafana 儀表盤

Grafana 是一個(gè)優(yōu)秀的儀表盤、分析和數(shù)據(jù)可視化工具。它沒(méi)有 Prometheus 的全功能數(shù)據(jù)收集能力,但 Prometheus 又沒(méi)有 Grafana 的數(shù)據(jù)呈現(xiàn)界面。事實(shí)上,他們最好是結(jié)合在一起使用——Prometheus 負(fù)責(zé)數(shù)據(jù)收集和匯總,Grafana 負(fù)責(zé)數(shù)據(jù)展示。它們共同創(chuàng)造了一個(gè)強(qiáng)大的組合,涵蓋了數(shù)據(jù)收集、基本警報(bào)和可視化。

高級(jí)警報(bào)

對(duì)于高級(jí)警報(bào),你可以添加 Nagios[19] 或 Prometheus Alertmanager[20] 等工具。這些警報(bào)工具通常有大量的集成。你可以為自定義值班團(tuán)隊(duì),然后定義你想要監(jiān)控的參數(shù),例如“當(dāng)任何 pod 不可用時(shí)”或“當(dāng)任何節(jié)點(diǎn)無(wú)法訪問(wèn)時(shí)”、“當(dāng)容量達(dá)到 90%”等,然后通過(guò)電子郵件、短信、手機(jī)應(yīng)用提醒、電話呼叫等方式向值班人員發(fā)送自定義通知。你還可以創(chuàng)建升級(jí)策略,比如,如果一個(gè)被定義為“危急”的警報(bào)在 10 分鐘內(nèi)沒(méi)有值班人員確認(rèn),那么就將警報(bào)升級(jí)(發(fā)送警報(bào))到該人員的經(jīng)理。

現(xiàn)在,你應(yīng)該已經(jīng)對(duì) Docker 和 Kubernetes 有了大體的認(rèn)識(shí)。了解了 Kubernetes 的作用,知道它是如何進(jìn)行容器化應(yīng)用部署和管理的。

調(diào)試和監(jiān)控技術(shù)不僅僅是運(yùn)維需要,你也可以把它當(dāng)作學(xué)習(xí)方式。有什么比邊做邊學(xué)更好呢?

請(qǐng)記住,如果你的應(yīng)用規(guī)模太小,而且預(yù)計(jì)用戶需求不會(huì)有太大變化或重大波動(dòng)(比如一個(gè)只在公司內(nèi)部使用的應(yīng)用),那么 Kubernetes 對(duì)你來(lái)說(shuō)可能沒(méi)有必要,這種情況下,直接使用 Docker 就足夠了。

對(duì)云原生應(yīng)用的架構(gòu)模式感興趣的話也可以閱讀我翻譯的《云原生模式》一書(shū)。



更多

云原生領(lǐng)域的開(kāi)源項(xiàng)目眾多(見(jiàn) Awesome Cloud Native/云原生開(kāi)源項(xiàng)目大全[21]),其中有大量的優(yōu)秀項(xiàng)目可供我們學(xué)習(xí)。此外,Kubernetes 開(kāi)源已經(jīng)多年時(shí)間,網(wǎng)上有大量的學(xué)習(xí)資料,業(yè)界出版過(guò)很多 書(shū)籍[22],建議大家通過(guò)閱讀 官方文檔[23] 和實(shí)踐來(lái)學(xué)習(xí),也可以參考我編寫的 Kubernetes Handbook——Kubernetes 中文指南 / 云原生架構(gòu)實(shí)踐手冊(cè)[24]。

推薦大家加入我發(fā)起創(chuàng)辦的 云原生社區(qū)[25],這是一個(gè)立足中國(guó),放眼世界的云原生終端用戶社區(qū),致力于云原生技術(shù)的傳播和應(yīng)用。云原生社區(qū)主辦的 云原生學(xué)院[26] 定期邀請(qǐng)?jiān)圃烷_(kāi)源領(lǐng)域的大咖在 B 站上進(jìn)行直播分享,成員自發(fā)組織了多個(gè) SIG(特別興趣小組)進(jìn)行討論學(xué)習(xí)。歡迎加入我們,共同學(xué)習(xí)和交流云原生技術(shù)。如果你想從事服務(wù)網(wǎng)格領(lǐng)域,加入一家由開(kāi)源技術(shù)而構(gòu)建的全球化公司,歡迎大家關(guān)注我所在的服務(wù)網(wǎng)格公司 Tetrate,下面是我們公司的微信公眾號(hào),會(huì)經(jīng)常發(fā)布一些 Istio、Envoy、Apache SkyWalking 等開(kāi)源項(xiàng)目的博客。

活動(dòng)預(yù)告

云原生學(xué)院直播間,第八期直播,今天晚上 8 點(diǎn),B 站直播間見(jiàn)!

在騰訊文檔中記錄你的問(wèn)題,講師在線解答:https://docs.qq.com/doc/DR2dKdWdWWlNzZEZo

云原生社區(qū)
#云原生社區(qū) 上海meetup 講師招募中,活動(dòng)暫定11月底,主題可以包括#Kubernetes #ServiceMesh #DevOps #云原生 點(diǎn)擊下面的鏈接與我們聯(lián)系。?
視頻號(hào)

引用鏈接

[1] 云原生知識(shí)圖譜: https://github.com/cloudnativeto/cloudnative-knowledge-map
[2] Kubernetes: https:///
[3] Docker: https:///
[4] CoreOS rkt: https:///rkt/
[5] Mesos Containerizer: https://mesos./documentation/latest/mesos-containerizer/
[6] LXC: https:///
[7] 服務(wù)網(wǎng)格 (Service Mesh): https:///blog/what-is-a-service-mesh/
[8] Kubernetes 次世代的云原生應(yīng)用: https:///blog/post-kubernetes-era/
[9] Istio Handbook——Istio 服務(wù)網(wǎng)格進(jìn)階實(shí)戰(zhàn): https://www./istio-handbook
[10] Kubernetes Handbook——Kubernetes 中文指南 / 云原生架構(gòu)實(shí)踐手冊(cè): https://github.com/rootsongjc/kubernetes-handbook
[11] Minikube: https://github.com/kubernetes/minikube
[12] MicroK8s: https://github.com/ubuntu/microk8s
[13] Docker Desktop: https://docs./docker-for-windows/kubernetes/
[14] Kind: https://github.com/kubernetes-sigs/kind
[15] Katacoda: https:///
[16] Microsoft Bridge to Kubernetes: https://github.com/microsoft/mindaro
[17] telepresence: https://github.com/telepresenceio/telepresence
[18] 資源管道和全度量管道: https:///docs/tasks/debug-application-cluster/resource-usage-monitoring/
[19] Nagios: https://www./
[20] Prometheus Alertmanager: https://github.com/prometheus/alertmanager
[21] Awesome Cloud Native/云原生開(kāi)源項(xiàng)目大全: https:///awesome-cloud-native
[22] 書(shū)籍: https:///cloud-native/note/books/
[23] 官方文檔: https:///
[24] Kubernetes Handbook——Kubernetes 中文指南 / 云原生架構(gòu)實(shí)踐手冊(cè): https:///kubernetes-handbook
[25] 云原生社區(qū): https:///
[26] 云原生學(xué)院: https://github.com/cloudnativeto/academy

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产亚洲精品久久久优势| 亚洲av熟女一区二区三区蜜桃| 翘臀少妇成人一区二区| 亚洲国产日韩欧美三级| 在线日本不卡一区二区| 国产av精品一区二区| 日本精品免费在线观看| 日本理论片午夜在线观看| 老司机精品视频免费入口| 懂色一区二区三区四区| 成人午夜激情在线免费观看| 国产av熟女一区二区三区蜜桃| 日韩精品在线观看完整版| 激情五月综五月综合网| 色婷婷在线精品国自产拍| 国内欲色一区二区三区| 老司机精品视频在线免费看| 国产精品久久久久久久久久久痴汉 | 午夜精品麻豆视频91| 国产一区二区在线免费| 熟女少妇久久一区二区三区| 日本和亚洲的香蕉视频| 国产视频一区二区三区四区| 加勒比日本欧美在线观看| 国产韩国日本精品视频| 成人精品一级特黄大片| 亚洲最新中文字幕一区| 日本视频在线观看不卡| 少妇特黄av一区二区三区| 熟女免费视频一区二区| 黑丝袜美女老师的小逼逼| 免费啪视频免费欧美亚洲| 天堂av一区一区一区| 亚洲另类欧美综合日韩精品 | 最好看的人妻中文字幕| 91麻豆精品欧美视频| 日本加勒比中文在线观看| 国产精品一区二区日韩新区| 91亚洲国产成人久久精品麻豆| 少妇淫真视频一区二区| 国内尹人香蕉综合在线|