kubectl: k8s是命令行端,用來發送客戶的操做指令。
API server:是k8s集羣的前端接口,各類客戶端工具以及k8s的其餘組件能夠經過它管理k8s集羣的各類資源。它提供了HTTP/HTTPS RESTful API,即K8S API.
Scheduler:負責決定將Pod放在哪一個Node上運行。在調度時,會充分考慮集羣的拓撲結構,當前各個節點的負載狀況,以及應對高可用、性能、數據親和性和需求。
Controller Manager:負責管理集羣的各類資源,保證資源處於預期的狀態。它由多種Controller組成,包括Replication Controller、Endpoints Controller.
Namespace Controller、Serviceaccounts Controller等等。
Etcd:負責保存k8s集羣的配置信息和各類資源的狀態信息。當數據發生變化時,etcd會快速的通知k8s相關組件。第三方組件,它有可替換方案。Consul、 zookeeper
Pod: k8s集羣的最小組成單位。一個Pod內,能夠運行一個或多個容器。大多數狀況下,一個Pod內只有一個Container容器。
Flanner:是k8s集羣網路方案,能夠保證Pod的跨主機通訊。第三方解決方案,也有替換方案。前端
查看應用在哪一個節點
[root@master ~]# kubectl get pod --all-namespaces node
查看應用在哪一個節點的詳細信息
[root@master ~]# kubectl get pod --all-namespaces -o wideweb
Kubeler:他是Node的agent(代理),當Scheduler肯定某個Node上運行Pod以後,會將Pod的具體配置信息發送給該節點的Kubelet,Kubeler會根據這些信息建立和運行容器,並向Master報告運行狀態。
Kube-proxy:負責將訪問service的TCP/UDP數據流轉發到後端的容器。若是有多個副本,kube-proxy會實現負載均衡。docker
運行一個例子:三臺都導入httpd鏡像導成docker鏡像
建立一個deployment資源對象。Pod控制器。
[root@master ~]# kubectl run test-web --image=httpd --replicas=2
查看節點:
[root@master ~]# kubectl get deployments.
簡寫:
[root@master ~]# kubectl get deploy
後端
[root@master ~]# kubectl get pod
架構
哪臺dang掉重啓kuelet:
[root@master ~]# systemctl restart kubelet
[root@master ~]# kubectl get pod -o wide
負載均衡
刪除節點:
[root@master ~]# kubectl delete pod test-web-5b56bdff65-j6g75
仍是兩個:這就是控制器的緣由
ide
分析各個組件的做用以及架構工做流程:
1)kubectl發送部署請求到API server
2)API server 通知Controller Manager建立一個Deployment資源
3)Scheduler執行調度任務,將兩個副本Pod分發到node01和node02上
4)node01和node02上的kubelet在各自節點上建立並運行Pod。
補充:
1.應用的配置和當前的狀態信息保存在etcd中,執行kubectl get pod時API server會從etcd中讀取這些數據。
2.flannel回味每一個Pod分配一個IP。但此時沒有建立Service資源,目前kube-proxy尚未參與進來。工具