k8s入門-k8s整體架構介紹

Kubernetes被設計爲Master和Node兩個角色,Master爲控制節點,Node爲計算節點或者叫工作節點。

一、Master節點介紹

Kubernetes Master是Kubernetes Cluster的大腦,Master上運行的節點主要有5個組件:

  • Kube-apiserver

  • kube-scheduler

  • kube-controller-manager

  • etcd

  • Pod網絡(例如flannel)
    在這裏插入圖片描述

1、API Server(kube-apiserver)

API Server 提供 HTTP/HTTPS RESTful API,即 Kubernetes API。API Server 是 Kubernetes Cluster 的前端接口,各種客戶端工具(CLI 或 UI)以及 Kubernetes 其他組件可以通過它管理 Cluser 中的各種資源。

2、Scheduler(kube-scheduler)

Scheduler 負責決定將 Pod 放在哪個 Node 上運行。Scheduler 在調度時會充分考慮 Cluster 的拓撲結構,當前各個節點的負載,以及應用對高可用、性能、數據和親和性的需求。

3、Controller Manager(kube-controller-manager)

Controller Manager 負責管理 Cluster 各種資源,保證資源處於預期的狀態。Controller Manager 由多種 controller 組成,包括 replication controller、endpoints controller、namespace controller、serviceaccount controller等。

不同的 controller 管理不同的資源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命週期 ,namespace controller 管理 namespace 資源。

4、etcd

etcd 負責保存 Kubernetes Cluster 的配置信息和各種資源的狀態信息。當數據發生變化時,etcd 會快速地通知 Kubernetes 相關組件。

5、Pod網絡

Pod 要能夠相互通信,Kubernetes Cluster 必須部署 Pod 網路,flannel 是其中一個可選方案,也是Kubernetes官方默認的一種方案。

二、Node節點

Node節點是Kubernetes集羣的工作節點,是Pod運行的地方,Kubernetes支持Docker、rkt等容器Runtime。Node上運行的Kubernetes組件有:

  • kubelet
  • kube-proxy
  • Docker
  • Pod網絡(例如flannel)
    在這裏插入圖片描述

1、kubelet

kubelet是Node的agent,當Scheduler確定在某個Node上運行Pod後,會將Pod的具體配置信息(image、volume等)發送給該節點的kubelet,kubelet根據這些信息創建和運行容器,並向Master報告運行狀態。

2、kube-proxy

service在邏輯上代表了後端的多個Pod,外接通過service訪問Pod。service接收到的請求是如何轉發到Pod的呢?這就是kube-proxy要完成的工作。

每個Node都會運行kube-proxy服務,它負責訪問service的TCP/UDP數據流轉發到後端的容器。如果有多個副本,kube-proxy會實現負載均衡。

3、Docker

docker 運行和管理容器,kubelet 通過 Container Runtime Interface (CRI) 與它進行交互。

4、Pod網絡

Pod要能夠相互通信,Kubernetes Cluster必須部署Pod網絡,flannel是其中一個可選方案。

三、完整的架構

將master節點和node節點結合起來,就組成了一個k8s的集羣:
在這裏插入圖片描述
這裏再k8s-master上也有kubelet和kube-proxy,是因爲在實際部署的時候,master即能夠作爲管理節點,同時爲了資源的充分利用,也可以同時擔任work節點。

四、通過例子理解k8s架構

現在通過一個實例來演示k8s整個集羣的工作流程。

kubectl run nginx-ds --image=nginx --replicas=2

稍等一段時間,應用部署完成:

[root@k8s-01 ~]# kubectl get pod -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx-ds-25h8m              1/1     Running   3          13d   172.30.64.3     k8s-01   <none>           <none>
nginx-ds-7whgp              1/1     Running   3          13d   172.30.224.6    k8s-02   <none>           <none>

Kubernetes部署了deployment nginx-ds ,有兩個副本Pod,分別運行在k8s-01k8s-02上。

這個部署過程的詳細流程如下圖:
在這裏插入圖片描述

  • 1、kubectl發送部署請求到API Server。
  • 2、API Server通你只Controller Manager創建一個deployment資源。
  • 3、Scheduler執行調度任務,將兩個副本Pod分發到k8s-01和k8s-02。
  • 4、k8s-node1和k8s-node2上的kubelet在各自的節點上創建並運行Pod。

補充兩點:

1、應用的配置和當前狀態信息保存在etcd中,執行kubectl get pod時API Server會從etcd中讀取這些數據。

2、flannel會爲每個Pod都分配IP。因爲沒有創建service,目前kube-proxy還沒參與進來。

參考文章:
https://www.cnblogs.com/CloudMan6/p/8308334.html
http://k8s.unixhot.com/kubernetes/kubernetes-introduce.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章