如何用Kubernetes進行容器編排的超詳細指南

語言: CN / TW / HK

CC-BY-SA William Kenlon  http://www.williamkenlon.com

協調這個詞對IT行業來說相對較新,它仍然有細微的差別,讓那些不是整天在協調的人摸不著頭腦或感到困惑。當我向別人描述協調時,通常聽起來好像我只是在描述自動化。這並不完全正確。事實上,我寫了一整篇文章來區分自動化和協調

一個簡單的思考方式是,協調只是自動化的一種形式。要了解你如何從協調中獲益,有助於瞭解它具體自動化的內容。

關於Kubernetes的更多資訊

什麼是Kubernetes?

免費線上課程。容器、Kubernetes和紅帽OpenShift的技術介紹...

電子書。Kubernetes的儲存模式

試用OpenShift實戰

企業級Kubernetes的介紹

如何用通俗的語言解釋Kubernetes

電子書。在Raspberry Pi家庭實驗室上執行Kubernetes

Kubernetes小抄

電子書。Kubernetes的SRE和sysadmins指南

最新的Kubernetes文章

瞭解容器

容器是一個檔案系統的映象,只包含執行特定任務所需的內容。大多數人不會從頭開始構建容器,儘管閱讀有關如何構建容器的文章會讓人豁然開朗。相反,更常見的是,從一個公共容器中心拉出一個現有的映象。

容器引擎是一個執行容器的應用程式。當一個容器被執行時,它是用一種叫做cgroup 的核心機制啟動的,它將容器內的程序與容器外執行的程序分開。

執行一個容器

你可以用PodmanDockerLXC在自己的Linux電腦上輕鬆執行一個容器。它們都使用類似的命令。我推薦Podman,因為它是無守護程式的,這意味著一個程序不需要一直執行就可以啟動容器。使用Podman,你的容器引擎只在必要時執行。假設你已經安裝了一個容器引擎,你可以通過引用你知道的存在於公共容器中心的容器映象來執行一個容器。

例如,要執行一個Nginx網路伺服器。

$ podman run -p 8080:80 nginx 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf [...]

開啟一個單獨的終端,用curl來測試它。

``` $ curl --no-progress-meter localhost:8080 | html2text

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx. ```

作為網路伺服器的安裝,這是很容易的。

現在想象一下,你剛剛部署的網站得到了一個意外的流量激增。儘管Nginx是一個非常有彈性的Web伺服器,但一切都有其侷限性。如果有足夠的同步流量,即使Nginx也會崩潰。現在怎麼辦?

維持容器

容器很便宜。換句話說,正如你剛才所經歷的,它們的啟動是很容易的。

你也可以使用systemd來使容器具有彈性,這樣,即使在崩潰的情況下,容器也會自動重新啟動。這時,Podman就派上用場了。Podman有一個命令可以在現有的容器基礎上生成一個systemd服務檔案。

$ podman create --name mynginx -p 8080:80 nginx $ podman generate systemd mynginx \ --restart-policy=always -t 5 -f -n

你可以作為一個普通使用者啟動你的容器服務。

$ mkdir -p ~/.config/systemd/user $ mv ./container-mynginx.service ~/.config/systemd/user/ $ systemctl enable --now --user container-mynginx.service $ curl --head localhost:8080 | head -n1 HTTP/1.1 200 OK

執行容器的pod

因為容器很便宜,你可以隨時啟動一個以上的容器來滿足你的服務需求。通過兩個(或更多)容器提供相同的服務,你增加了更好地分配勞動的可能性,以成功管理傳入的請求。

你可以將容器組合成pod,Podman(如其名字所示)可以建立。

$ systemctl stop --user container-myngnix $ podman run -dt --pod new:mypod -p 8080:80 nginx $ podman pod ps POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS 26424cc... mypod Running 22m ago e25b3... 2

這也可以用systemd自動完成。

$ podman generate systemd mypod \ --restart-policy=always -t 5 -f -n

莢和容器的叢集

很明顯,容器為你部署網路應用和服務提供了多種選擇,特別是當你使用正確的工具來管理它們時。Podman和systemd都能很有效地與容器整合,它們可以幫助確保你的容器在需要的時候可以使用。

但你不會真的想整天整夜地坐在你的伺服器前,只是為了在整個網際網路決定拜訪你的時候,手動將容器新增到pod。即使你能做到這一點,容器也只能像它們所執行的計算機一樣強大。最終,在單個伺服器上執行的容器會耗盡該伺服器的頻寬和記憶體。

解決方案是Kubernetes叢集:大量的伺服器,其中一臺作為 "控制平面",所有的配置都被輸入,其他許多伺服器作為計算節點,以確保你的容器擁有它們需要的所有資源。Kubernetes是一個大專案,還有許多其他專案,如TerraformHelmAnsible,它們與Kubernetes對接,使常見的任務可以編寫指令碼並變得簡單。對於所有級別的系統管理員、架構師和開發人員來說,這是一個重要的話題。

要了解有關Kubernetes的容器編排的所有資訊,請下載我們的免費電子書。用Kubernetes進行協調的指南。該指南教你如何設定本地虛擬叢集,部署應用程式,設定圖形介面,瞭解用於配置Kubernetes的YAML檔案,以及更多。