# Kubernetes (一) - 基本概念  Kubernetes 又稱 K8s,是一個容器叢集管理系統,可以自動化的部署及管理多台機器上的多個容器。 容器建構在最底層的作業系統 Linux 之上,而 Kubernetes 又建構在容器之上。也因此為這些容器提供管理的功能。 <!-- more --> Kubernetes官網對於Kubernetes的服務描述為 : > Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications. 這段描述說明了他的主要功能 : * 自動部署多個容器到多台機器上 (Automating Deployment) * 以叢集的方式針對服務負載量對容器自動進行擴展 (Scaling) * 管理多個容器,自動偵測並重啟故障的容器 (Management) ## 為何需要 Kubernetes 雖然每個容器獨立運行不受其他容器互相干擾,但是隨著時間及需求增加,所需要運行的服務和資料量就會增加,這時就會需要進行擴展容量。 Kubernetes 就可以做到為了多台機器進行擴展容量,他提供了非常良好的資源調度。 Docker 也有提供 Docker Swarm 來提供多台機器調度的能力,但是功能上相較 Kubernetes 來說相對遜色許多。 ## Kubernetes 的分布式架構  Kubernetes 屬於分布式系統,而其具有四種基本的元件,由小到大分別為 : Pod、Worker Node、Master Node、Cluster。 ### Pod Pod 為 Kubernetes 運作的最小單位,一個 Pod 可以由一個或多個容器組成,而這些 Pod 具有以下幾個特點 : * 每個 Pod 都有屬於各自獨立的` yaml` 檔。 * 同一個 Pod 中的容器共享同樣的網路和資源,彼此以 local port number 溝通。 * 一個 Pod 可以容納多個容器,但是一般情況建議一個 Pod 對應一個容器;然而如果多個容器的應用會高度耦合,也就是這些應用必須使用相同的資源,像是以往還沒有容器的概念時,有些應用必須要放在同一個主機或虛擬機上,這種情況就會把多個容器放在同一個 Pod。 ### Worker Node Worker Node 簡稱 Node,是 Kubernetes 運作的最小硬體單位,一個 Node 對應到一台機器。 每個 Node 都有三個組件 : kubelet、kube-Proxy、Container Runtime **kubelet** * 該 Node 的管理員,負責管理該 Node 上的所有 Pod 的狀態並負責與 Master 溝通。Master 負責管理 Node,下方會再詳細介紹。 **kube-Proxy** * 該 Node 的傳訊員,負責更新 Node 的 iptables,讓其他不在該 Node 中的物件可以得知該 Node 上所有 Pod 的最新狀態。 **Container Runtime** * 該 Node 真正負責容器執行的程式,如 Docker 容器的 Container Runtime 即為 Docker Engine。 ### Master Node Master Node 簡稱 Master,可以看成是一個特殊的 Node 負責管理其他的 Node。 Master 具有四個組件 : kube-apiserver、etcd、kube-scheduler、kube-controller-manager **kube-apiserver** * 管理整個 Kubernetes 所需的 API 接口,例如從 Command Line 下 kubectl 指令就會把指令送到此。 * 作為 Node 之間的溝通橋樑,Node 之間不允許直接溝通,必須透過 apiserver 轉介。 * 負責 Kubernetes 中請求的身分認證與授權。 **etcd** * 存放 Kubernetes Cluster 的資料作為備份,當 Master 故障時,可以透過 etcd 還原 Kubernetes 的狀態。 **kube-controller-manager** * 管理並運行 Kubernetes Controller,Controller 是負責監視 Cluster 狀態的 Process,如 Node Controller、Replication Controller。 * Process 會在 Cluster 與預期狀態不符時嘗試更新現有狀態。例如要多開一台機器以應付流量時,預期狀態會更新成 N+1,但現有狀態為 N,因此這時相對應的 Controller 就會想辦法多開一台機器。 * 上述提到的監視與嘗試更新也都需要透過訪問 kube-apiserver 達成。 **kube-scheduler** * 整個 Kubernetes 上的調度員,scheduler 會監視新建立但還沒有被指定要放在哪個 Node 上的 Pod,並根據每個 Node 上的資源規定、硬體限制等等的條件去協調一個最適合的 Node 讓 Pod 運行。 ### Cluster Kubernetes 中多個 Node 與 Master 的集合 ## Summary 本篇介紹了 Kubernetes 的基本概念以及架構,有了 Kubernetes 來幫忙管理 Container,在維護上就會更方便。下一篇我們就要來實際操作 Kubernetes。 ## 參考 [1][什麼是 Kubernetes?| Microsoft Azure](https://azure.microsoft.com/zh-tw/topic/what-is-kubernetes/) [2][Kubernetes 基礎教學(一)原理介紹](https://medium.com/@C.W.Hu/kubernetes-basic-concept-tutorial-e033e3504ec0) [3][帶動IT轉型與軟體開發革命的Kubernetes](https://www.grandsys.com.tw/news/rd/876-kubernetes) [4][KUBERNETES 技術分享 –【CLOUDMILE X GCPUG.TW ](https://www.mile.cloud/zh-hant/cloudmilexgcpug-kubernetes/) [5][Kubernetes在夯什麼—K8S基礎介紹](https://www.inwinstack.com/2018/05/08/what-is-kubernetes-part2/) [6][前言 & 介紹Kubernetes](https://ithelp.ithome.com.tw/articles/10192401) [7] [GKE 系列文章(一) – 為什麼使用 Kubernetes](https://blog.gcp.expert/kubernetes-gke-introduction/?gclid=CjwKCAjwj975BRBUEiwA4whRB57UG-PYHAtVclet2kSGJj_u8HEUveuNQMY0nzSeMuKQSH37cPj0LhoCUwkQAvD_BwE) [8] [Kubernetes Basics | Microsoft Azure YouYube](https://www.youtube.com/playlist?list=PLLasX02E8BPCrIhFrc_ZiINhbRkYMKdPT) ###### tags: `Container` `Kubernetes`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.