---
# System prepended metadata

title: Kubernetes Architecture
tags: [Kubernetes]

---

---
title: Kubernetes Architecture
tags: Kubernetes
description: Kubernetes architecture detail
---

# Kubernetes Architecture

kubernetes 架構為 cluster -> node -> pod，pod 為 kubernetes 最小單位，一個 pod 裡面可以同時存在很多個 container。
![](https://i.imgur.com/QKwtE1Q.png)

---
## Kebernetes Node 

kubernetes 的 node 分為兩種，分別為 master node 和 worker node，master node 負責管理 worker node 工作進程、container 的狀態。

---

## Master Node Architecture

Master Node 主要負責管理所有其他的 Node，主要由四個部分組成，API server、Scheduler、Controller Manager、Etcd

![](https://i.imgur.com/c9Bc4hy.png)


### API server
* 管理整個 Kubernetes 所需 API 的接口（Endpoint），例如從 Command Line 下 kubectl 指令就會把指令送到這裏
* 負責 Node 之間的溝通橋樑，每個 Node 彼此不能直接溝通，必須要透過 apiserver 轉介
* 負責 Kubernetes 中的請求的身份認證與授權

### Scheduler
* scheduler 在要建立一個新的 pod 時，會根據每個 Node 上面資源規定、硬體限制等條件去協調出一個最適合 放置的 Node 讓該 Pod 跑 Scheduler 會監控所有 Node 上的

### controller-manager
* 負責管理並運行 Kubernetes controller 的組件，簡單來說 controller 就是 Kubernetes 裡一個個負責監視 Cluster 狀態的 Process，例如：Node Controller、Replication Controller
* 這些 Process 會在 Cluster 與預期狀態（desire state）不符時嘗試更新現有狀態（current state）。例如：現在要多開一台機器以應付突然增加的流量，那我的預期狀態就會更新成 N+1，現有狀態為 N，這時相對應的 controller 就會想辦法多開一台機器
* controller-manager 的監視與嘗試更新也都需要透過訪問 kube-apiserver 達成

### Etcd
* 用來存放 Kubernetes Cluster 所有的資料作為，當 Master 因為某些原因而故障時，我們可以透過 etcd 幫我們還原 Kubernetes 的狀態

---
## Worker Node Architecture
Worker Node 負責運行工作的Node，主要由三個部分組成，kubelet、kube-proxy、Container Runtime

### kubelet
kubernetes內部指令工具，用來管理kubernetes內部狀態，包含node pod 創建刪除等等。

### kube-proxy
負責更新 Node 的 iptables，讓 Kubernetes 中不在該 Node 的其他物件可以得知該 Node 上所有 Pods 的最新狀態

### Container Runtime
以 Docker 為容器負責容器執行程式，Container Runtime就是 Docker Engine

---

## Thank you! :dash: 

You can find me on
- GitHub: https://github.com/shaung08
- Email: a2369875@gmail.com