# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up