--- lang: zh-tw title: Kubernetes Architecture tags: K8s --- # Kubernetes Architecture  1. Cluster至少包含一個Master跟一個Node 2. Master(Control Plane):調度整個Cluster,負責控制所有Node執行必要的容器、調度哪些Pods要排安到哪個Nodes運作、儲存Cluster運作過程的所有狀態 ## Kubernetes Control Plane(Master) ||| | -------- | -------- | |kube-apiserver|管理K8s API接口,也負責Node之間溝通 | |etcd |Key-Value資料庫,存放Cluster所有資料 | |kube-scheduler|負責Pod調度,安排Pod到適合的Node運行| |kube-controller-manager|管理並運行Controller| 1. Master 指的是Cluster控制節點,負責整個Cluster的管理和控制 2. Kubernetes所有控制指令都發給Master,它來負責實際的執行過程 3. kube-apiserver:管理Kubernetes API接口,kubectl的指令就會把指令送到這裡;負責Node之間溝通,每個Node不能直接溝通,必須透過apiserver 4. etcd:Key-Value資料庫,存放Cluster的資料作為備份,當Master因為某些原因而故障時,可以透過etcd還原Kubernetes的狀態 5. kube-scheduler:Kubernetes的Pods調度員,會監視新建立但尚未被指定要在哪個Node上執行的Pod,並選擇最適合放置的Node,讓該Pod在上面運行 6. kube-controller-manager:負責管理並運行controller 6-1. Node Controller:Node故障時進行通知和回應 6-2. Replication Controller:維護正確數量的Pod 6-3. Endpoints Controller:加入Service與Pod 6-4. Service Account & Token Controllers:為新的Namespace建立預設帳戶和API Token ## Kubernetes Node(Minions) ||| | -------- | -------- | |kubelet|管理Pod狀態並與Master溝通| |kube-proxy|實現Service的通訊與負載平衡機制的元件| |Container Runtime|負責本機容器建立與管理,ex: Docker, containerd, cri-o, rktlet| 1. 早期版本也被稱為 Minion 2. 可以是實體機也可以是虛擬機 3. Node才是Kubernetes Cluster中的工作節點 4. 每個Node都會被Master分配一些Pod 5. 當某個Node當機,上面的Pod會被Master自動傳輸到其它Node ## Kubernetes Cluster  ## Node  Node是K8s中負責容器運行的機器,多個Pod可以在一個Node上運行 ## Pod  一組(一個或多個)容器,容器共用Storage, Network,以及如何運行的Sepc ## Architecture Summary + Cluster至少包含一個Master(Control-Plane)跟一個Worker(Node, Minions) + Master包含:api-server, etcd, scheduler, controller-manager + Master會調度Pods要到哪個Node運作,儲存叢集運作過程的狀態 + Node提供K8s運行的環境、管理所有容器運行,並監控運行的Pod狀態 + 每個Node都包含:kubelet, kube-proxy, Container Runtime + Pod是一組(一個或多個)容器,容器共用Storage與Network,以及容器如何運行的Spec ## 實作 Create a Cluster 使用 WSL2 + KinD 建立學習環境叢集 Note: Google Cloud SDK [官網](https://cloud.google.com/sdk/docs/quickstarts?hl=zh-tw) 安裝kubectl工具 sudo apt-get install kubectl # or gcloud components install kubectl 查看kubectl 工具版本 kubectl version --short 更新Client版本 curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.17.0/bin/linux/amd64/kubectl chmod +x ./kubectl sudo mv ./kubectl /usr/local/bin/kubectl KinD [官網](https://kind.sigs.k8s.io/docs/user/quick-start/) 建立Single Node叢集 kind create cluster --name k8s-cluster 確認安裝kubectl kubectl version 查看Cluster資訊 kubectl cluster-info 查看Node資訊 kubectl get nodes 提供worker label kubectl label node kind-worker node-role.kubernetes.io/worker=worker 查看Node描述,列出所有可用host kubectl describe nodes $NODE_NAME
×
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
.