k8s 組件架構


一、整體架構

kubernetes分為 master節點和工作節點,前者是管理節點,后者是容器運行的節點。其中master節點主要有3個重要組件,分別是APIServer,sheduler和controller manager。

工作節點 有兩個組件 kubelet 和 kubelet (有時候master節點也可以既是管理節點也是工作節點)

APIServer

APIServer組件負責響應用戶的管理請求、進行指揮協調工作

scheduler

scheduler組件是將待調度的pod按照一定的調度算法綁定到合適的工作節點上

controller manager

是一組控制器的合集,負責控制控制管理對應的資源,如副本(replication)和工作節點(node)等。

etcd

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

 kubelet

管理維護pod運行的agent

kube-proxy

將service的流量轉發到對應endpoint

flannel網絡

維持各個節點上pod之間的通信。

 

kuernetes架構可以用下圖來簡單描述,mster節點上的APIServer將負責與master節點、工作節點上的各個組件之間交互,以及集群外用戶(如kubectl命令)

與集群的交互、在集群中處於消息收發的中心地位。其他各個組件各司其職,共同完成應用的分發,部署與運行的工作。

 二、通過示例來理解

[root@k8s-master k8s]# kubectl run httpd-pod --image=httpd --replicas=2      
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/httpd-pod created
[root@k8s-master k8s]# kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
httpd-pod   2         2         2            2           22s
[root@k8s-master k8s]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE
httpd-pod-7cdfc75664-4trb9   1/1     Running   0          32s   10.244.2.4   k8s-node1   <none>
httpd-pod-7cdfc75664-mjm7f   1/1     Running   0          32s   10.244.1.4   k8s-node2   <none>

上面使用run命令在命令行創建pod的方式已經不被推薦使用

官方推薦使用如下的方式,其中第三種方式已經成為一種廣泛流傳的方式。

Examples:
# Create a pod using the data in pod.json.
kubectl create -f ./pod.json

# Create a pod based on the JSON passed into stdin.
cat pod.json | kubectl create -f -

# Edit the data in docker-registry.yaml in JSON then create the resource using the edited data.
kubectl create -f docker-registry.yaml --edit -o json

 

上面的命令 httpd-pod 是所要deployment的名稱

--image  是指定使用鏡像   --replicas 指定副本的數量

通過查看pod,發現pod分別被調度到 k8s-node1和k8s-node2節點上運行。

詳細過程:

1.kubectl發送部署的請求到API Server

2.API Server通知Controller Manager創建一個 deployment 資源

3.Scheduler執行調度任務,將兩個副本Pod分發到k8s-node和k8s-node2上。

4.k8s-node1和k8s-node2上的kubelet在各自的節點上創建並運行pod。

 

tips:

1.應用的配置和當前的狀態信息保存在etcd中,當執行kubectl get pod 等查詢操作時 API Server會從中讀取數據

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

 

為了下面的學習,需要刪除節點上的pod。刪除這個deployment時,pod的狀態會從running變為Terminating 直至清除。

root@k8s-master k8s]# kubectl delete deployment httpd-pod             
deployment.extensions "httpd-pod" deleted
[root@k8s-master k8s]# kubectl get pod -o wide            
NAME                         READY   STATUS        RESTARTS   AGE   IP           NODE        NOMINATED NODE
httpd-pod-7cdfc75664-4trb9   0/1     Terminating   0          12m   10.244.2.4   k8s-node1   <none>
[root@k8s-master k8s]# kubectl get pod -o wide
NAME                         READY   STATUS        RESTARTS   AGE   IP           NODE        NOMINATED NODE
httpd-pod-7cdfc75664-4trb9   0/1     Terminating   0          12m   10.244.2.4   k8s-node1   <none>
[root@k8s-master k8s]# kubectl get pod -o wide
No resources found.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM